SQL*Plus > PL/SQL ブロックを実行する

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 Oracle 9i または 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

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 を実行するには…

スクリプトを実行するには…

変数の使い方

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト