2016-08-17 8 views
0

これは非常に基本的なことがあります。私はPL/SQLの初心者ですが、私はこの問題に悩まされています。誰かが解決策を知っているなら、私に知らせてください。PL/SQL変数をどのように割り当てるのですか?

このコード

DECLARE  
    v_objectID VARCHAR2(100); 
    v_account VARCHAR2(100); 

BEGIN   
    v_objectID :='21,22'; 

    DBMS_OUTPUT.PUT_LINE(v_objectID); 
END; 
/

出力

21,22

次いで、

このコード

DECLARE  
    v_objectID VARCHAR2(100); 
    v_account VARCHAR2(100); 

BEGIN   



    SELECT LISTAGG(x.ACCOUNT, ',') WITHIN GROUP (ORDER BY NULL) AS ACCOUNT 
    INTO v_account   
    FROM acctx x 
    where x.OBJECT_ID IN (21,22); 

    DBMS_OUTPUT.PUT_LINE(v_account); 
END; 
/

出力する

1001,2002

それから私は、この

DECLARE  
    v_objectID VARCHAR2(100); 
    v_account VARCHAR2(100); 

BEGIN   
    v_objectID :='21,22'; 


    SELECT LISTAGG(x.ACCOUNT, ',') WITHIN GROUP (ORDER BY NULL) AS ACCOUNT 
    INTO v_account   
    FROM acctx x 
    where x.OBJECT_ID IN (v_objectID); 

    DBMS_OUTPUT.PUT_LINE(v_account); 
END; 
/

のように実行しようと、私はv_objectID追加:= '21,22' の;;これが問題を引き起こしている

エラーが

ORA_07122です:無効な数 ORA-06512:行で9

がどのように適切に出力1001,2002に変数を割り当てる必要がありますか?

おかげで、あなたのテーブルのobject_idで

答えて

1

エラーが明らかであるが、数値データ型のされていると思います。今ではvarcharと数値を比較しようとしているので、問題に直面しました。以下を試してください:

DECLARE  
    v_objectID VARCHAR2(100); 
    v_account VARCHAR2(100); 

BEGIN   
    v_objectID :='21,22'; 


    SELECT LISTAGG(x.A, ',') WITHIN GROUP (ORDER BY NULL) AS ACCOUNT 
    INTO v_account   
    FROM test x 
    where to_char(x.A) IN (v_objectID); 

    DBMS_OUTPUT.PUT_LINE(v_account); 
END; 
/
関連する問題