PL / SQL ORACLEエラー:コード内のPLS-00225

JustAskingQuestions

このテーマに関する他の投稿がすでにあることは知っていますが、それを機能させる方法が見つかりません。誰かが私のコードを撃ってくれませんか?この問題でブロックされています。

したがって、基本的に、次の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]

編集
0

コメントを追加

0

関連記事