PL/SQL ブロックの実行
データベースにアクセスする SQL コマンドの実行
SQL*Plus のコマンド・プロンプト から PL/SQL を入力する。
PL/SQL コマンドの入力したのち最終行にスラッシュ(/) を入力して改行することで入力した PL/SQL が実行される。
PL/SQL ブロックの入力と実行
SQL> conn rivus/rivus_pass
SQL> set serveroutput on
接続されました。
SQL> declare
2 vName VARCHAR2(10);
3 begin
4 for vRec in (select user_name from account)
5 loop
6 dbms_output.put_line(vRec.user_name);
7 end loop;
8 end;
9 /
富樫 歩夢
小杉 光輝
倉本 大翔
長谷川 春奈
荒木 奈央子
PL/SQLプロシージャが正常に完了しました。
PL/SQL プロシージャを実行する
定義済みのプロシージャを実行するには CALL または EXECUTE 文を実行する。
SQL> set serveroutput on
SQL> call dbms_output.put_line('プロシージャをコールした');
プロシージャをコールした
コールが完了しました。
SQL> execute dbms_output.put_line('プロシージャを実行した');
プロシージャを実行した
PL/SQLプロシージャが正常に完了しました。
SQL>
PL/SQL ファンクションを実行する
ストアドプロシージャやストアドファンクションを実行するには CALL または EXECUTE 文を実行する。
CALL では戻り値を受け取るために INTO 構文が用意されている。(参考:CALL と EXECUTE の機能の違い)
SQL> variable vNum number;
SQL> call sys.standard.greatest(100,2,300,4) into :vNum;
コールが完了しました。
SQL> print vNum
VNUM
----------
300
EXUCUTE の場合には代入を行なう PL/SQL ブロックとして実行する。
SQL> variable vNum number;
SQL> execute :vNum := sys.standard.greatest(100,2,400,4);
PL/SQLプロシージャが正常に完了しました。
SQL> print vNum
VNUM
----------
400
sys.standard.greatest の sys.standard. 部分は sys ユーザーが所有する standard という パッケージ名 をあらわし、標準関数の使用は greatest だけでよい(別スキーマのパッケージの呼び出例として使用)
PL/SQL ブロックの入力を中止する
誤ったペースト操作などによりプロンプトから begin と入力すると空行を連続しても終了しないで途方にくれていることがある。
入力状態のままになったイメージ
SQL> fkjdsafugasdf
SP2-0042: 不明なコマンドです("fkjdsafugasdf")。行の残りは無視されました。
SQL> begin
2 fjskadjgyregynb
3 ・・・・・・・・・・・・・・
4
5
6
7
8
9
10
11
12
13
14
15 .
SQL> rollback;
そのようなときには先頭にドット(.) だけ入力して改行する。
入力した内容はバッファに送られるが実行されないためデータを書き換えるような事は発生しない。
rollback もしておくとさらに安心。
このようになった場合には end; は入力しない。
特にウィンドウを閉じたり Ctrl+C を押下するようなことは OS によって何が起こったのかのログが見えなくなり余計面倒になるので控える。
SQL を実行するには…
スクリプトを実行するには…
変数の使い方