SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SQL 基礎実地編 (その十) ストアドファンクション、PL/SQL、動的 SQL

Oracle 固有の部分があるかもしれません。SQL-Server、MDB では注意のこと。

■ストアドファンクション (ストアドプロシジャ)

  ・SQL の組み込み関数以外にユーザが独自の関数を作ることができる。
    構文は Pascal 言語に似ている。
    データベースアクセスをしないユーザ関数は簡単である。
    次の例は、引数 dt1 と dt2 を与えて、dt2 が NULL でなければ、戻り値と
    して dt2 が、dt2 が NULL なら dt1 が返る。

/*
========================================================================
  文字項目 Not NULL 時セット関数作成
========================================================================
*/

create or replace function sak.Char2NotNull (dt1 in varchar2, dt2 in varchar2) return varchar2 is
  dt varchar2(2000);
begin
  dt := dt1;
  if dt2 > '''' then
    dt := dt2;
  end if;
  return dt;
end;
/

  ・ストアドファンクションのテストは次のように行う。
    この例では、20 が返る。

  select sak.Data2NotNull(10, 20) from dual
  ;

■PL/SQL

  ・PL/SQL は、ストアドファンクションの構文とほとんど同じである。

  set serveroutput on;

  declare
    cursor c1 is select * from sak.受注m
      where 品番 = 'a001' order by 受注番号;
    -- rec c1%rowtype;
  begin
    dbms_output.put_line ('start...');
    for rec in c1 loop
      dbms_output.put_line (rec.受注番号 || ' ' || rec.品番);
    end loop;
    dbms_output.put_line ('end');
  exception
    when OTHERS then
      dbms_output.put_line ('** エラー **');
  end;
  /

■動的 SQL

  ・Oracle8 では、オブジェクト機能を用いて、もっと容易に動的な操作ができ
    る。この例はオブジェクト機能を使用していない。

  ・通常の静的 SQL では、テーブル名などが実在していなくてはならない。
    ストアドでテーブル名などを動的に扱うには、DBMS_SQL パッケージを使用
    する。

  declare
    tbl in varchar2 default 'sak.test';
    cid integer;
  begin
    cid := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(cid, 'create table ' || tbl || ' (データ number(9))', dbms_sql.v7);
    DBMS_SQL.CLOSE_CURSOR(cid);
    dbms_output.put_line ('end');
  exception
    when OTHERS then
      dbms_output.put_line ('** エラー **');
  end;
  /

■ストアドプロシジャ作成

create function ストアド名...
create procedure ストアド名...

■ストアドプロシジャ削除

drop function ストアド名;
drop procedure ストアド名;

■SQL 基礎実地編資料
■SQL 基礎編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK