CREATE OR REPLACE PROCEDURE PKG_TEST (P_IN IN VARCHAR2)
AS
V_SQLERRM VARCHAR2(100);
V_LOGMVARCHAR2(100);
BEGIN
BEGIN
SAVEPOINT BEFORE_PROCESS;
PKG_GENERAL.P_LOGGING(TO_CHAR(SYSDATE,\\\'YYYYMMDDHH24MISS\\\'),\\\'P_IN\\\',\\\'T\\\',\\\'\\\',V_LOGM);
END;
IF P_IN=\\\'Y\\\' THEN
COMMIT;
ELSIF P_IN=\\\'N\\\' THEN
ROLLBACK TO BEFORE_PROCESS;
END IF;
EXCEPTION
WHEN OTHERS THEN
PKG_GENERAL.P_ERROR(\\\'P_IN\\\',\\\'\\\',\\\'T\\\',SQLCODE||\\\'>>\\\'||SQLERRM,\\\'\\\',\\\'\\\',\\\'\\\',V_SQLERRM);
END;
根据我对savepoint的理解,这个过程运行的结构应该是,输入‘Y’时,通过P_LOGGING向表中写入一条记录。输入为‘N’时则会回滚到savepoint处,不会对表产生任何影响。
但是运行起来都会向表插入,不知道是何原因?请那位大侠指点:) |