[英]Can we pass partition as parameter in stored procedure ? I'm getting following error
我們可以在存儲過程中將分區作為參數傳遞嗎? 我遇到以下錯誤。 請幫忙。
CREATE OR REPLACE PROCEDURE PROCEDURE_NAME (PARTITION_NAME IN VARCHAR2)
IS
LASTDATE VARCHAR2(12);
ENDDATE VARCHAR2(12);
BEGIN
IF PARTITION_NAME='DEC_2014' OR PARTITION_NAME='JAN_2015' OR PARTITION_NAME='MAR_2015' OR PARTITION_NAME='MAY_2015' OR PARTITION_NAME='JUL_2015' OR PARTITION_NAME='AUG_2015' OR PARTITION_NAME='OCT_2015' OR PARTITION_NAME='DEC_2015' OR PARTITION_NAME='JAN_2016' THEN
ENDDATE:='31';
ELSIF PARTITION_NAME='NOV_2014' OR PARTITION_NAME='APR_2015' OR PARTITION_NAME='JUN_2015' OR PARTITION_NAME='SEP_2015' OR PARTITION_NAME='NOV_2015' THEN
ENDDATE:='30';
ELSE
ENDDATE:='28';
END IF;
LASTDATE:=CONCAT(CONCAT(ENDDATE,'-'),REPLACE (PARTITION_NAME, '_', '-'));
DBMS_OUTPUT.PUT_LINE(LASTDATE);
DBMS_OUTPUT.PUT_LINE(PARTITION_NAME);
UPDATE
/*+ PARALLEL(Alias 4) */
TABLE_NAME PARTITION (PARTITION_NAME) Alias
SET Alias.Alias_D_EFFECTIVE_DATE =
(SELECT
/*+ PARALLEL(Alias3 4) */
ALAIS2.ALAIS2_D_DATETIME
FROM schema1.TABLE_2 ALAIS2
WHERE TRUNC(ALAIS2_D_DATETIME) <= TO_DATE(LASTDATE,'DD-MON-YYYY')
AND ALAIS2.ALAIS2_N_TRN_ID = Alias.Alias_N_PR
)
WHERE EXISTS
(SELECT Alias3.ALAIS2_D_DATETIME
FROM schema1.TABLE_2 Alias3
WHERE TRUNC(Alias3.ALAIS2_D_DATETIME) <= TO_DATE(LASTDATE,'DD-MON-YYYY')
AND Alias3.ALAIS2_N_TRN_ID = Alias.Alias_N_PR
);
COMMIT;
END PROCEDURE_NAME;
錯誤:
第1行發生錯誤ORA-02149:指定的分區不存在ORA-06512:在“ schema1.PROCEDURE_NAME”的第17行ORA-06512:在第1行
我認為您可以通過動態SQL語句,EXECUTE IMMEDIATE語句來完成
跟隨此鏈接... https://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg09dyn.htm https://docs.oracle.com/cloud/latest/db112/LNPLS/dynamic.htm #LNPLS01115
CREATE OR REPLACE PROCEDURE PROCEDURE_NAME (PARTITION_NAME IN VARCHAR2)
IS
LASTDATE VARCHAR2(12);
ENDDATE VARCHAR2(12);
query_str VARCHAR2(1000);
BEGIN
//.......your code.......
query_str := 'UPDATE TABLE_NAME PARTITION (' || PARTITION_NAME || ') Alias '
||'SET Alias.Alias_D_EFFECTIVE_DATE =.....'
EXECUTE IMMEDIATE query_str;
COMMIT;
END PROCEDURE_NAME;
希望這會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.