ttIsql内でのOUTパラメータを使用したPL/SQLからのデータの受渡し

OUTパラメータを使用して、PL/SQLからアプリケーションにデータを戻すことができます。

次の例では、TimesTenデータベースの空き状況に関する情報を戻します。

tt_space_info PL/SQLプロシージャを作成し、SQLを使用してpermpctpermmaxpcttemppctおよびtempmaxpctの各パラメータに値を入力します。

Command> CREATE OR REPLACE PROCEDURE tt_space_info
(permpct    OUT PLS_INTEGER,
permmaxpct OUT PLS_INTEGER,
temppct    OUT PLS_INTEGER,
tempmaxpct OUT PLS_INTEGER) AS
monitor    sys.monitor%ROWTYPE;
BEGIN
SELECT * INTO monitor FROM sys.monitor;
permpct := monitor.perm_in_use_size * 100 / 
monitor.perm_allocated_size;
permmaxpct := monitor.perm_in_use_high_water * 100 / 
monitor.perm_allocated_size;
temppct := monitor.temp_in_use_size * 100 / 
monitor.temp_allocated_size;
tempmaxpct := monitor.temp_in_use_high_water * 100 / 
monitor.temp_allocated_size;
END;
/

Procedure created.

変数を宣言し、tt_space_infoをコールします。出力できるように、パラメータ値がttIsqlに戻されます。

Command> VARIABLE permpct NUMBER
Command> VARIABLE permpctmax NUMBER
Command> VARIABLE temppct NUMBER
Command> VARIABLE temppctmax NUMBER
Command> BEGIN
tt_space_info(:permpct, :permpctmax, :temppct, :temppctmax);
END;
/

PL/SQL procedure successfully completed.

Command> PRINT permpct;
PERMPCT              : 4

Command> PRINT permpctmax;
PERMPCTMAX           : 4

Command> PRINT temppct;
TEMPPCT              : 11

Command> PRINT temppctmax;
TEMPPCTMAX           : 11

また、PL/SQL文で実行可能な文ハンドルを、OUT参照カーソル・パラメータで戻すこともできます。PL/SQL文はカーソルに関連付けられている問合せを選択できます。次の例は、昇順と降順をランダムに選択する参照カーソルをオープンします。

Command> VARIABLE ref REFCURSOR;
Command> BEGIN
IF (mod(dbms_random.random(), 2) = 0) THEN
open :ref for select object_name from SYS.ALL_OBJECTS order by 1 asc;
ELSE
open :ref for select object_name from SYS.ALL_OBJECTS order by 1 desc;
end if;
END;
/

PL/SQL procedure successfully completed.

参照カーソルから結果セットをフェッチするには、PRINTコマンドを使用します。

Command> PRINT ref 
REF           : 
< ACCESS$ >
< ALL_ARGUMENTS >
< ALL_COL_PRIVS >
< ALL_DEPENDENCIES >
...
143 rows found.

または、結果セットが降順になっている場合、次のように出力されます。

Command> PRINT ref
REF          : 
< XLASUBSCRIPTIONS >
< WARNING_SETTINGS$ >
< VIEWS >
...
143 rows found.