我準備了一些fiddle:Oracle 11gR2:我可以使用DBMS_PARALLEL_EXECUTE運行我的自定義PL/SQL代碼嗎?
CREATE TABLE t_process
("process_number" int, "process_status" varchar2(12))
;
INSERT ALL
INTO t_process ("process_number", "process_status")
VALUES (1, 'PROCESSING')
INTO t_process ("process_number", "process_status")
VALUES (2, 'PROCESSING')
INTO t_process ("process_number", "process_status")
VALUES (3, 'TO_BE_KILLED')
INTO t_process ("process_number", "process_status")
VALUES (4, 'PROCESSING')
INTO t_process ("process_number", "process_status")
VALUES (5, 'PROCESSING')
INTO t_process ("process_number", "process_status")
VALUES (6, 'TO_BE_KILLED')
INTO t_process ("process_number", "process_status")
VALUES (7, 'TO_BE_KILLED')
INTO t_process ("process_number", "process_status")
VALUES (8, 'WAITING')
INTO t_process ("process_number", "process_status")
VALUES (9, 'KILLED')
SELECT * FROM dual
;
這是我的處理過程:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE(IN_ID IN NUMBER) IS
BEGIN
UPDATE T_PROCESS SET process_status = 'KILLING' WHERE process_number = IN_ID;
COMMIT;
-- DO SOME STUFF
UPDATE T_PROCESS SET process_status = 'KILLED' WHERE process_number = IN_ID;
COMMIT;
END MY_PROCEDURE;
現在我想用DBMS_PARALLEL_EXECUTE
運行此定製SQL
:
DECLARE
id1 number = :id1;
id2 number = :id2;
BEGIN
MY_PROCEDURE(id1);
END;
所以,我的問題是:
我可以使用DBMS_PARALLEL_EXECUTE
來執行上面的SQL語句嗎?
因爲我只發現了UPDATE
的例子。也許CREATE_CHUNKS_BY_SQL
只能選擇TO_BE_KILLED
,然後RUN_TASK
用上面的語句?
還有一點,一個人不需要在自定義過程中提交,因爲DBMS_PARALLEL_EXECUTE.run_task會自動完成! – pahariayogi