這個問題與我的previous question有關。
執行一個函數內部的程序(ORA-14551錯誤)
我有一個程序(PROC_YEARLYACTIVELIST2
),它將顯示在指定年份處於活動狀態的所有記錄。
它將刪除以前的內容TBLACTIVELISTYEARLY2
並從PROC_YEARLYACTIVELIST2
中插入結果。
我創建了一個函數,它將執行TBLACTIVELISTYEARLY2
,從TBLACTIVELISTYEARLY
中選擇所有記錄並將其放入CURSOR C_IH
,然後返回Crystal Report報表。
下面只是部分代碼:
DECLARE CURSOR C_IH IS SELECT * FROM tblActiveListYearly2; ctr INT; i NUMBER; currDeploymentComputer COL_TYPE_DEPLOYMENT_COMPUTER := COL_TYPE_DEPLOYMENT_COMPUTER NULL); R_IH C_IH%ROWTYPE; BEGIN PROC_YEARLYACTIVELIST2(in_year); OPEN C_IH; i := 0; LOOP (....)
我試圖調用該函數爲
SELECT GETDEPLOYMENT_COMPUTER('2012') from dual;
,並具有ORA-14551
錯誤
ORA-14551: cannot perform a DML operation inside a query
ORA-06512: at "NPLS.PROC_YEARLYACTIVELIST2", line 12
ORA-06512: at "NPLS.GETDEPLOYMENT_COMPUTER", line 3
搜索了它並發現它是因爲與發生衝突,UPDATE
或DELETE
和DUAL
。
是否有任何其他方式來執行我的過程中將返回一個表的函數?
謝謝!
閱讀關於自治事務。不漂亮,但可能是您的情況的唯一解決方法。 – 2013-02-12 07:25:41
謝謝@a_horse_with_no_name的迴應! :) – 2013-02-13 01:34:55