次のPL/SQLを書いて、私に与えられた式を動的に文字列として実行しました。数式からの最終出力は、o_
変数に返されると期待していた19
を返す必要があります。動的PL/SQLブロックを実行して合計を実行し、値を返す
実際にコードはエラーなく実行されますが、私が期待していた結果は得られません。 DBMS_SQL
パッケージを正しく使用していますか?
この問題を複雑にする要因は、入力文字列(または数式)に含まれるバインド変数の数がわからないことです。したがって、EXECUTE IMMEDIATE
は、バインディングが必要な変数の数を事前に知っていることを前提としているため、動的PL/SQLを実行する戦略を使用することはできません。
正しい方法で問題に近づいていますか?これを行うより良い方法はありますか?
DECLARE
cur_ INTEGER;
r_ NUMBER;
str_ VARCHAR2(2000) := 'BEGIN :out := :x * 3 + :y; END;';
x_ NUMBER := 3;
y_ NUMBER := 10;
o_ NUMBER;
BEGIN
cur_ := Dbms_SQL.open_cursor;
Dbms_SQL.Parse (cur_, str_, Dbms_SQL.Native);
Dbms_SQL.Bind_Variable (cur_, ':out', o_);
Dbms_SQL.Bind_Variable (cur_, ':x', x_);
Dbms_SQL.Bind_Variable (cur_, ':y', y_);
r_ := Dbms_SQL.Execute (cur_);
Dbms_SQL.Close_Cursor (cur_);
Dbms_Output.Put_Line ('Your variables: ' || x_ || ', ' || y_ || ', and out: ' || o_ || ', and R: ' || r_);
END;
文字列は固定文字列ですか。そうでない場合は、[この質問](http://stackoverflow.com/questions/5209981/use-of-bind-variable)の回答にあるもののようなものを使用することができます。 – Nitish
@Nitishあなたが何を言及しているかわからない。私はそのページに私が求めている質問に近づく何かを見つけることができません。 – cartbeforehorse