このテーマに関する他の投稿がすでにあることは知っていますが、それを機能させる方法が見つかりません。誰かが私のコードを撃ってくれませんか?この問題でブロックされています。
したがって、基本的に、次の3つのエラーのために、PROCEDUREを正しく作成できません。
PL / SQL:SQL文が無視されましたPL / SQL:ORA-00904: "BCM_CURSOR"。 "ORDER_REF":無効な識別子PLS-00225:サブプログラムrefまたはカーソル 'BCM_CURSOR'が範囲外です
これは私のSUBORDERSTABLEのスキーマです。
CREATE TABLE SUBORDERS (
IDSUBORDER VARCHAR(128) PRIMARY KEY,
StatusSubOrders VARCHAR(128) DEFAULT 'Open',
DescriptionSubOrders VARCHAR(128)
);
そして、XXBCM_ORDER_MGTテーブルのスキーマは次のとおりです。
CREATE OR REPLACE PROCEDURE pr_MigrateSubOrders AS
CURSOR BCM_cursor IS select * FROM XXBCM_ORDER_MGT where ORDER_REF LIKE '%-%'; -- DECLARING MY CURSOR
v_current_max NUMBER;
r_current_row XXBCM_ORDER_MGT%ROWTYPE; -- ROWTYPE USED BY THE CURSOR
BEGIN
OPEN BCM_cursor;
FETCH BCM_cursor INTO r_current_row;
WHILE BCM_cursor%NOTFOUND != FALSE
LOOP
SELECT MAX(TO_NUMBER(regexp_replace(IDSUBORDER, '.*-(.*)','\1'))) INTO v_current_max FROM SUBORDERS WHERE IDSUBORDER LIKE regexp_replace(BCM_cursor.ORDER_REF, '(.*)-.*','\1') || '%'; -- working
IF v_current_max = NULL THEN
v_current_max := 1;
ELSE
v_current_max := v_current_max + 1;
END IF;
DBMS_OUTPUT.PUT_LINE(v_current_max);
FETCH BCM_cursor INTO r_current_row;
END LOOP;
CLOSE BCM_cursor;
END;
アルゴリズムの主要部分をテストしましたが、正しく機能しているようです。(SELECT MAX
...)
CREATE OR REPLACE PROCEDURE pr_MigrateSubOrders AS
CURSOR BCM_cursor IS select * FROM XXBCM_ORDER_MGT where ORDER_REF LIKE '%-%'; -- DECLARING MY CURSOR
v_current_max NUMBER;
r_current_row XXBCM_ORDER_MGT%ROWTYPE; -- ROWTYPE USED BY THE CURSOR
BEGIN
OPEN BCM_cursor;
LOOP
FETCH BCM_cursor INTO r_current_row;
EXIT WHEN BCM_cursor%NOTFOUND;
SELECT MAX(TO_NUMBER(regexp_replace(IDSUBORDER, '.*-(.*)','\1'))) INTO v_current_max
FROM SUBORDERS
WHERE IDSUBORDER LIKE regexp_replace(r_current_row.ORDER_REF, '(.*)-.*','\1') || '%'; -- working
v_current_max := NVL( v_current_max, 0) + 1;
DBMS_OUTPUT.PUT_LINE(v_current_max);
END LOOP;
CLOSE BCM_cursor;
END;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加