2017-01-05 16 views
0

に値を挿入されていない、私はエラーを1としてNetezzaのストアドプロシージャでの即時実行、テーブル、私はこのNetezzaのストアドプロシージャを実行しています

を見つけていない

属性「SOME_VALUE」を取得しています私はあるテーブル(TABLE_A)から値を取得し、別のテーブル(TABLE_B)に挿入する必要があります。ここでは、以下の

create or replace procedure my_proc() 
returns boolean 
execute as owner 
language NZPLSQL 
as 
BEGIN_PROC 
    declare rec RECORD ; 
BEGIN 
    for rec in SELECT * from TABLE_A loop 
    EXECUTE IMMEDIATE 
    'INSERT INTO TABLE_B(COLUMN_B) 
    values('||  rec.COLUMN_A_OFTABLE_A || ')'; 
END LOOP; 
END; 
END_PROC; 

execute my_proc() 

、私は文字列を挿入することができる午前:

この

は手順です。しかし、私は上記のように他のテーブルに応じて異なる値を挿入する必要があります。

EXECUTE IMMEDIATE 'INSERT INTO TABLE_B(COLUMN_B) values(''Y'');'; 

答えて

0

EXECUTE IMMEDIATEを実行するストリングを作成するときは、すべてを適切に引用するように注意してください。あなたの場合は、SOME_VALUEを属性/列として扱う必要があり、その名前の列は扱えないと考えています。

quote_literal()にカラム参照をラップすると、カラムの内容が解釈され、適切に引用符でエスケープされます。

create or replace procedure my_proc() 
returns boolean 
execute as owner 
language NZPLSQL 
as 
BEGIN_PROC 
    declare rec RECORD ; 
BEGIN 
    for rec in SELECT * from TABLE_A loop 
    EXECUTE IMMEDIATE 
    'INSERT INTO TABLE_B(COLUMN_B) 
    values('|| quote_literal(rec.COLUMN_A_OFTABLE_A) || ')'; 
END LOOP; 
END; 
END_PROC; 

さらに詳しい情報はthe documentation hereにあります。

注:このストアドプロシージャで実装するには、より複雑なロジックがあると仮定しています。行単位でのループ処理は、insert..selectよりはるかに遅いためです。しばしば大きさのオーダー。

+0

返信ありがとうございます。はい、私はTABLE_Aの2つの列を比較し、結果に基づいてTABLE_Bにデータを挿入する必要があります。 – VivekT

+0

そのソリューションはあなたのために機能しましたか?もしそうなら、答えとしてマークしてください。そうでない場合は、何が問題になったのかをお知らせください。 – ScottMcG

関連する問題