DB/Oracle/PLSQL/概要と基本

Top/DB/Oracle/PLSQL/概要と基本

目次

PL/SQL についてのまとめ。Pukiwiki の制約都合上、ページ名が PLSQL だけど、正式名称は PL/SQL なので気をつける(ぼくが)。


PL/SQL とは

  • SQL を拡張した言語。SQL はもともと非手続き型言語で、それを手続き型言語に拡張したもの

実行時の挙動

  • PL/SQL エンジンで各ブロックが解析される
  • ブロックのうちのプロシージャ文はプロシージャ文エグゼキュータ、SQL 文は SQL 文エグゼキュータに入る
    • PL/SQL エンジンはクライアント側にあってもサーバ側にあってもいい。基本的にはデータベースサーバのを使う
    • Oracle Forms、Oracle Reports やらなにやらのツールだとクライアント側に入る

利点

  • SQL とプロシージャ構造(いわゆるプログラミング言語っぽい感じのアレ)を一緒に扱える
  • 通常は SQL 文ひとつでひとつの通信、サーバ側のコールだけど、PL/SQL を使うとブロック単位でまとめて送信できるので通信回数が減らせる。処理効率が上がってパフォーマンスが改善
  • プログラムのモジュール化。ブロックを部品として再利用できるしネストもできるのでやりたい放題
  • いろいろな Oracle ツールで使われている
  • 移行が楽。プラットフォームに依存しない
  • 例外処理がわかりやすい。一番最後にまとめて書くので楽

ブロック

  • プログラムを扱う単位。ひとつのブロックがひとつのプログラムなかんじ
  • 以降、大文字と小文字の区別はない

構造

  • DECLARE
    • ひとつめのセクション。宣言部。変数宣言とかカーソル宣言とか
  • BEGIN
    • ふたつめのセクション。実行部。メインのプログラム部分。必須
  • EXCEPTION
    • みっつめのセクション。例外処理部。エラー処理を書くところ
  • END;
    • ブロックの終了。セミコロン大事。必須

種類

  • 無名
  • サブプログラム
    • プロシージャ
    • ファンクション
    • パッケージ
    • トリガ

無名

  • 名前を付けない。再利用しない前提、一回しか使わないときなどに

サブプログラム

  • 名前を付けて保存しておくもの。名前があるので呼び出せる。何回も使うときなどに
  • サーバ側に保存しておくものをストアドほげほげ、クライアント側に保存しておくものをアプリケーションほげほげと呼ぶ
    • ストアドプロシージャ、ストアドファンクションとか

基本構文のサンプル

すんごい簡単な例。画面出力はデバッグ目的でよく使う。

END; まででバッファに格納、/ でバッファの内容の実行、っていうイメージ。たぶん。

無名ブロックの例

  • @hoge.sql
    declare
        hoge number;
    begin
        hoge := 10;
    
        -- 何もしない処理は null であらわす
        null;
    end;
    /
    

画面に文字を出力する

  • @fuga.sql
    begin
        dbms_output.put_line('hoge');
    end;
    /
    
  • SQL*Plus で出力を有効にする場合は set serveroutput on しておく必要がある

Last-modified: 2011-11-08 (火) 11:53:19