我有一個SQL語句,它使用Check-Function
這需要很長時間才能執行。並行執行SQL語句中的過程(Oracle 11g)
現在我想parallize Check-Function
的執行,但它不起作用。
我犯的錯誤在哪裏?
下面的示例需要5秒才能執行,但根據我的理解,由於並行性,應該花費大約1秒。
代碼段來進行測試:
CREATE TABLE PERSON AS
SELECT LEVEL AS ID, 'Person_'||LEVEL AS NAME
FROM DUAL
CONNECT BY LEVEL <= 5;
CREATE OR REPLACE FUNCTION LONGCHECKFUNC(ID NUMBER)
RETURN NUMBER IS
BEGIN
--Doing some very heavy Checks....
DBMS_LOCK.SLEEP(1 /*second*/);
RETURN 1;
END;
SELECT /*+PARALLEL(person, 5) */ *
FROM PERSON
WHERE LONGCHECKFUNC(ID)=1;
所以你想有一些異步執行的程序?同時並行執行多個程序? – user75ponic
這是正確的。我想同時爲每個行執行相同的過程(LongCheckFunc)。 –
看一看[this](http://www.oracle-base.com/articles/10g/scheduler-10g.php#simple),可能有用 – user75ponic