0

別のユーザー名と行タイプのデータを使用して動的な Insert ステートメントを生成したい

私のスニペット

create or replace procedure test()
is
TYPE cv_typ is REF CURSOR;
cv cv_typ;
stmt varchar(2000);
zieldb varchar(20);

vKunden "Kunden"%rowtype;

BEGIN

execute immediate 'select * from "Kunden" where "KndNr"=55 ' into vKunden;

stmt:='select kc.zieldb from test.kunden_copy kc, test.transrel vd 
where kc.zieldb=vd.dbname and kc.status=1 ';

OPEN cv FOR stmt;
LOOP
    FETCH cv into nachdb;
    EXIT WHEN cv%NOTFOUND;
    ...
    ...
    stmt:='insert into ' || nachdb || ' ."Kunden"   values  ' || vKunden;
    execute immediate stmt ;        
    ...
    ... 
END LOOP;
END;

次のエラー メッセージが表示されます。

Please-00306 呼び出しの引数の数または型が間違っています

次の構文で

stmt:='insert into ' || nachdb || ' ."Kunden"   values   vKunden ';
execute immediate stmt ;        

次のメッセージが表示されます。

ORA-03001: 実装されていない機能です

4

2 に答える 2

0

うまくいかない理由を追加するだけです: 03001 は、値の周りに括弧 () がないためです。vKunden は %rowtype であるため、括弧を使用しても機能しません。これを動的 SQL に渡すことはできません (pls-00457)。これは次を使用して確認できます。

于 2016-06-21T09:45:31.607 に答える