2017-04-03 4 views
0

FUNCTION呼び出しでFOR LOOP変数を使用する方法はありますか。たとえば、私は文字列を返す単純な関数を持っています。私は、プロシージャから関数を呼び出して、パラメータの一つは、FOR LOOPから変数である2つのパラメータを渡す:Oracle PL/SQL:FUNCTION呼び出しでFOR LOOP変数を使用するとエラーが発生する

create or replace package body TEST_JNS is 
    -- 
    FUNCTION f_display_msg(var IN VARCHAR2, 
         num IN NUMBER) 
    RETURN VARCHAR2 IS 
    BEGIN 
    -- 
    RETURN num || '#: ' || var || ' world'; 
    END f_display_msg; 
    -- 
    -- 
    PROCEDURE main 
    AS 
    l_name VARCHAR2(100); 
    l_id NUMBER; 
    BEGIN 
    l_name := 'hello'; 
    -- 

    FOR f1 IN (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR('1,2,3', '[^,]+', 1, LEVEL))) AS "id" 
       FROM DUAL 
       CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE('1,2,3', '[^,]+')) + 1) 

    LOOP 
     --  
     dbms_output.put_line(f_display_msg(l_name, f1.id)); 
     -- 
    END LOOP;      
    END main; 
    -- 
end TEST_JNS; 

私はエラーを取得:コンポーネントのIDは "宣言する必要があります。また、FOR LOOP値をローカル変数に追加しようとしましたが、同じ結果が得られました。何か案は?

答えて

0

もし私がそれを助けるなら、IOTはIDを囲む二重引用符を削除しなければならない問題を解決します。

+2

を。デフォルトでは、oracleはソースをコンパイルする前にコードを大文字に変換し、コンパイラにリテラルの大文字小文字を変更しないように指示します。あなたのケースでは、コードIDとIDに2つの異なるリテラルがあるので、エラーが表示されます。 – Seyran

+0

ありがとうございます。良いことを知っている! –

0

むしろコレクションは使用しない理由は、区切りのリストを解析するために正規表現を使用するよりも:あなたは右のそれをやった

create or replace package body TEST_JNS is 
    FUNCTION f_display_msg(var IN VARCHAR2, 
         num IN NUMBER) 
    RETURN VARCHAR2 IS 
    BEGIN 
    RETURN num || '#: ' || var || ' world'; 
    END f_display_msg; 

    PROCEDURE main 
    AS 
    TYPE numberlist IS TABLE OF INTEGER; 
    l_name VARCHAR2(100) := 'hello'; 
    v_list numberlist := numberlist(1, 2, 3); 
    BEGIN 
    l_name := 'hello'; 
    FOR i IN 1 .. v_list.COUNT LOOP 
     dbms_output.put_line(f_display_msg(l_name, v_list(i))); 
    END LOOP; 
    END main; 
end TEST_JNS; 
+0

チップをありがとう。実生活のシナリオでは、文字列パラメータを受け取るため、カンマ区切りで値を区切るため、正規表現アプローチを使用しました。コレクションを使って同じことを達成できるかどうかはわかりません。ありがとう! –

+0

@DevNgron外部言語から受け取った場合は、コレクションに配列を渡すことができます([Java example](http://stackoverflow.com/a/37161584/1509264)) – MT0

関連する問題