Oracle 10g 这段代码实现自治事务为何失败呢?
PROMPT
PROMPT ** Create a procedure using PRAGMA AUTONOMOUS_TRANSACTION
PROMPTCREATE OR REPLACE PROCEDURE logging_ins (
i_username IN VARCHAR2,
i_datetime IN TIMESTAMP)
IS
PRAGMA AUTONOMOUS_TRANSACTION; -- 定义自治事务
BEGIN INSERT INTO logging (username, datetime)
VALUES (i_username, i_datetime); commit;END;
/
PROMPT
PROMPT
PROMPT ** Create a procedure that calls the autonomous block
PROMPT
CREATE OR REPLACE PROCEDURE book_ins (
i_isbn IN BOOKS.ISBN%TYPE,
i_category IN BOOKS.CATEGORY%TYPE,
i_title IN BOOKS.TITLE%TYPE,
i_num_pages IN BOOKS.NUM_PAGES%TYPE,
i_price IN BOOKS.PRICE%TYPE,
i_copyright IN BOOKS.COPYRIGHT%TYPE,
i_author1 IN BOOKS.AUTHOR1%TYPE,
i_author2 IN BOOKS.AUTHOR1%TYPE,
i_author3 IN BOOKS.AUTHOR1%TYPE)
IS
BEGIN INSERT INTO books (ISBN, CATEGORY,
TITLE, NUM_PAGES,
PRICE, COPYRIGHT, AUTHOR1,
AUTHOR2, AUTHOR3)
VALUES (i_isbn, i_category,
i_title, i_num_pages,
i_price, i_copyright, i_author1,
i_author2, i_author3); LOGGING_INS('PLSQL', systimestamp); -- 自治事务失败 ROLLBACK;EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm);
END;
/
EXEC book_ins('12345678','Oracle Server','Oracle Information Retrieval with Oracle Text',440, 35.99, 2005, 44, null, null);
是不是logging_ins没有被调用就出现错误了?
我这样执行就没有问题: BEGIN
book_ins('12345678',
'Oracle Server',
'Oracle Information Retrieval with Oracle Text',
440,
35.99,
2005,
44,
null,
null);
END;
/