CREATE OR REPLACE FUNCTION FUNC_EXECUTE(realityTab VARCHAR2,realityTabId VARCHAR2)
RETURN VARCHAR2
IS
indexTabConut NUMBER;
idValue VARCHAR2(100);
v_sql VARCHAR2(200);
null_unit_exp exception;
v_result number ;
pragma exception_init(null_unit_exp,-20010);
BEGIN
DECLARE
realityText NUMBER;
sqls VARCHAR2(200);
BEGIN
sqls:='SELECT COUNT(TABLE_NAME) FROM USER_TAB_COLUMNS WHERE TABLE_NAME';
v_sql:=sqls|| '='''||realityTab||''' AND COLUMN_NAME='''||realityTabId||'''';
EXECUTE IMMEDIATE v_sql INTO realityText;
IF realityText > 0 THEN
v_sql:='SELECT COUNT(PT_INNER_CODE) FROM INNER_CODE_SUB where PT_NAME='''||realityTab||'''';
EXECUTE IMMEDIATE v_sql INTO indexTabConut;
IF indexTabConut > 0 OR indexTabConut = NULL THEN
v_sql:='SELECT MIN(PT_INNER_CODE) FROM INNER_CODE_SUB ';
EXECUTE IMMEDIATE v_sql INTO idValue;
ELSE
idValue:=GETCODE(realityTab,realityTabId);
v_sql:='INSERT INTO INNER_CODE_SUB VALUES('''||realityTab||''','''||idValue||''')';
EXECUTE IMMEDIATE v_sql;--这里要加个异常,如何捕获?如果有多个异常的话,怎么做,需要自定义异常,该怎么加多个自定义异常捕获?
END IF;
ELSE
raise null_unit_exp;
END IF;
END;
RETURN idValue;
EXCEPTION
WHEN OTHERS THEN
v_sql:=SUBSTR(SQLERRM, 1, 200);
raise_application_error(-20010,'表名或列明不存在');
ROLLBACK;
END;
分享至: