SAK 図書館
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 編資料