VARIABLE_VALUE ステートメントは、動的SQLステートメントを実行した後に出力変数の値を取得するために使用されます。
構文
DBMS_SQL.VARIABLE_VALUE(
cursor IN NUMBER,
variable IN VARCHAR2,
value OUT value_type
);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| cursor | 開いている動的SQLカーソルのID。 |
| variable | 取得する変数名。 |
| value | 返される値を格納するターゲット変数。 |
使用例
以下のコマンドを実行して、4列を含むテーブル tab を作成し、ストアドプロシージャ single_Row_insert を使用して動的SQLでデータをテーブルに挿入します。同時に RETURNING 句を使用して計算値 (c1*c2) と挿入された日付値を出力パラメータに返し、最終的に結果を出力します。
create table tab(c1 number, c2 number, c3 date, c4 varchar2(10));
delimiter /;
CREATE OR REPLACE PROCEDURE single_Row_insert
(c1 NUMBER, c2 NUMBER, c3 date, c4 varchar2, r1 OUT NUMBER, r2 OUT date, r3 OUT varchar2) is
c NUMBER;
n NUMBER;
begin
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'INSERT INTO tab VALUES (:bnd1, :bnd2, :bnd3, :bnd4) ' ||
'RETURNING c1*c2, c3 INTO :bnd5, :bnd6', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, 'bnd1', c1);
DBMS_SQL.BIND_VARIABLE(c, 'bnd2', c2);
DBMS_SQL.BIND_VARIABLE(c, 'bnd3', c3);
DBMS_SQL.BIND_VARIABLE(c, 'bnd4', c4);
DBMS_SQL.BIND_VARIABLE(c, 'bnd5', r1);
DBMS_SQL.BIND_VARIABLE(c, 'bnd6', r2);
n := DBMS_SQL.EXECUTE(c);
DBMS_SQL.VARIABLE_VALUE(c, 'bnd5', r1);-- get value of outbind variable
DBMS_SQL.VARIABLE_VALUE(c, 'bnd6', r2);-- get value of outbind variable
DBMS_SQL.CLOSE_CURSOR(c);
END;
/
DECLARE
a number;
b date;
c varchar2(10);
BEGIN
single_Row_insert(2, 4, to_date('2020-01-01', 'yyyy-mm-dd'), 'Tomorrow', a, b, c);
dbms_output.put_line(a || ' --- ' || b || ' --- ' || c);
end;
/