Oracle pl/sql ステートメントで動的コードを実行したいと考えています。
うまく機能するのは次のとおりです。
execute immediate 'begin :r := 3*7*(:aa); end;' using in out myresvar,100;
今、私はそれをより一般化したいと思います:
DECLARE
-- arbitrary formula to evaluate
formula VARCHAR2(100) := 'c+si/2.+mn/6.';
-- string variable to keep pl/sql-code
dynCall VARCHAR2(2046);
-- variables to put into formula evaluation
c NUMBER := 0.02;
si NUMBER := 0.35;
mn NUMBER := 1.5;
res NUMBER;
BEGIN
dynCall := dynCall || 'DECLARE' || chr(10);
dynCall := dynCall || ' c NUMBER;' || chr(10);
dynCall := dynCall || ' si NUMBER;' || chr(10);
dynCall := dynCall || ' mn NUMBER;' || chr(10);
dynCall := dynCall || ' res NUMBER;' || chr(10);
dynCall := dynCall || 'BEGIN' || chr(10);
dynCall := dynCall || ' c := (:aa);' || chr(10);
dynCall := dynCall || ' si := (:bb);' || chr(10);
dynCall := dynCall || ' mn := (:cc);' || chr(10);
dynCall := dynCall || ' :r := ' || formula || ';' || chr(10);
dynCall := dynCall || 'END;' || chr(10);
EXECUTE IMMEDIATE dynCall USING IN OUT c,si,mn,res;
END;
残念ながら、これにより次のようなエラーが発生します (ドイツ語):
... トランザクションのエラー: ORA-06536: IN-Bind-Variable an OUT-Position gebunden ...
つまり、即時実行ステートメントの in 変数と output 変数に混乱があるようです。
今、私は何が問題なのか混乱しています。
誰でも私を助けることができますか?