2016-04-12 15 views
0

以下は、別のテーブルのフォームを選択してレコードを挿入するPL/SQLブロックです。select文を使用してテーブルに挿入する方法

DECLARE 
    CURSOR cust_insert is 
    select distinct UBAN,SUBSCRIBER_NO from not_exists_inv_RC_CINF; 

    i_cust_id varchar2(100); 
    i_sub_no  varchar2(100); 

Begin 

    dbms_output.enable(2000000); 

    Open cust_insert; 
    Loop 
    Fetch cust_insert into i_cust_id,i_sub_no; 
    Exit when cust_insert%NOTFOUND; 

    dbms_output.put_line('CUSTOMER IS :- '||i_cust_id 
     ||' SUBSCRIBER IS :- '||i_sub_no); 

    insert into not_exists_inv_RC_CINF_TRB 
    select a.MST_TRX_ID,entity_id 
    from lspappc.trb9_mst_log_1v a, lspappc.trb1_actv b 
    where a.ACTV_CODE_ID=b.ACTV_CODE_ID 
    and PART_DEP_ENT like 'CUSTOMER=i_cust_id' 
    and general_data_c like '%i_sub_no%' 
    and a.ACTV_CODE_ID=44; 

    commit; 
    END LOOP; 

    Close cust_insert; 
End; 
/

データがテーブルに挿入されていないため、理由を説明できますか?

+1

この部分はうまく構成されていないようです。 'PART_DEP_ENT like ' CUSTOMER = i_cust_id''は 'PART_DEP_ENT'のように '%'を意味しましたか? i_cust_id || % '' – cableload

答えて

4

PL/SQL変数を文字列リテラルとして扱います。この:

general_data_c like '%i_sub_no%' 

は次のようになります。

general_data_c like '%' || i_sub_no || '%' 

私はあなたがやろうとしているかなりよく分からない:何のワイルドカードや構築物が存在しないよう

PART_DEP_ENT like 'CUSTOMER=i_cust_id' 

とにかく奇妙に見える。あなたは望むかもしれません:

PART_DEP_ENT = 'CUSTOMER=' || l_cust_id 

...しかしそれは明確ではありません。

あなたが持っているリテラル値では、選択しているテーブルに一致するレコードがありません。覚えておいて、 `i_sub_no '変数の値ではなく、文字列'i_sub_no'を探しています。

+0

ありがとう、それは働いた –

関連する問題