plsql チュートリアル
plsqlを使い始める
サーチ…
備考
この節では、plsqlの概要と開発者がなぜそれを使用したいのかを概説します。
また、plsql内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 plsqlのドキュメントは新しくなっているので、これらの関連トピックの初期バージョンを作成する必要があります。
PLSQLの定義
PL / SQL(手続き型言語/構造化問合せ言語)は、Oracle CorporationのSQLおよびOracleリレーショナル・データベースの手続き型拡張です。 PL / SQLは、Oracle Database(バージョン7以降)、TimesTenインメモリ・データベース(バージョン11.2.1以降)、およびIBM DB2(バージョン9.7以降)で使用できます。
PL / SQLの基本単位はブロックと呼ばれ、宣言部分、実行可能部分、例外構築部分の3つの部分で構成されています。
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
宣言 - このセクションはキーワードDECLAREで始まります。オプションのセクションであり、プログラムで使用されるすべての変数、カーソル、サブプログラム、およびその他の要素を定義します。
実行可能コマンド - このセクションはキーワードBEGINとENDで囲まれており、必須セクションです。これは、プログラムの実行可能PL / SQL文で構成されています。少なくとも1つの実行可能なコード行を持つ必要があります。これは、何も実行する必要がないことを示すためのNULLコマンドです。
例外処理 - このセクションはキーワードEXCEPTIONで始まります。このセクションはオプションであり、プログラムのエラーを処理する例外を含みます。
すべてのPL / SQL文はセミコロン(;)で終了します。 PL / SQLブロックは、BEGINおよびENDを使用して他のPL / SQLブロック内にネストできます。
匿名ブロックでは、ブロックの実行可能部分のみが必要であり、他の部分は固有ではありません。以下は、単純な匿名コードの例です。エラーを報告することなく実行する以外は何もしません。
BEGIN
NULL;
END;
/
PL / SQLが空のブロックをサポートしていないため、excecutable命令がないとエラーになります。たとえば、以下のコードを実行するとエラーが発生します。
BEGIN
END;
/
アプリケーションでエラーが発生する:
END;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
キーワード「END;」の下の行にあるシンボル「*」このブロックで終わるブロックが空であるか悪いブロックであることを意味します。この例のように、実行ブロックごとに何もしなくても、実行するための命令が必要です。
こんにちは世界
set serveroutput on
DECLARE
message constant varchar2(32767):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
コマンドset serveroutput on
出力可能にするためにSQL * PlusおよびSQL Developerのクライアントで必要とされるdbms_output
。コマンドがなければ何も表示されません。
end;
行は匿名PL / SQLブロックの終わりを示します。 SQLコマンドラインからコードを実行するには、コードの最後の行の後の最初の空白行の先頭に/
を入力する必要があります。上記のコードがSQLプロンプトで実行されると、次の結果が生成されます。
Hello, World!
PL/SQL procedure successfully completed.
PLSQLについて
PL / SQLは、SQLへの手続き型言語拡張を表します。 PL / SQLは、他のソフトウェア製品内の「有効化技術」としてのみ利用できます。それは独立した言語として存在しません。 PL / SQLは、Oracleリレーショナル・データベース、Oracle Server、およびOracle Formsなどのクライアント側アプリケーション開発ツールで使用できます。 PL / SQLを使用する方法のいくつかを次に示します。
- ストアドプロシージャを構築する。
- データベース・トリガーを作成する。
- Oracle Formsアプリケーションにクライアント側のロジックを実装する。
- World Wide WebのホームページをOracleデータベースにリンクする。
%TYPEと%ROWTYPEの違い。
%TYPE
:指定された表の列と同じ型のフィールドを宣言するために使用されます。
DECLARE
vEmployeeName Employee.Name%TYPE;
BEGIN
SELECT Name
INTO vEmployeeName
FROM Employee
WHERE RowNum = 1;
DBMS_OUTPUT.PUT_LINE(vEmployeeName);
END;
/
%ROWTYPE:指定された表、ビューまたはカーソル(複数の列)にあるものと同じタイプのレコードを宣言するために使用されます。
DECLARE
rEmployee Employee%ROWTYPE;
BEGIN
rEmployee.Name := 'Matt';
rEmployee.Age := 31;
DBMS_OUTPUT.PUT_LINE(rEmployee.Name);
DBMS_OUTPUT.PUT_LINE(rEmployee.Age);
END;
/
ビューの作成または置換
この例では、ビューを作成します。
ビューは、主に複数のテーブルからデータを取得する簡単な方法として使用されます。
例1:
1つのテーブルで選択して表示する。
CREATE OR REPLACE VIEW LessonView AS
SELECT L.*
FROM Lesson L;
例2:
複数のテーブルを選択して表示する。
CREATE OR REPLACE VIEW ClassRoomLessonView AS
SELECT C.Id,
C.Name,
L.Subject,
L.Teacher
FROM ClassRoom C,
Lesson L
WHERE C.Id = L.ClassRoomId;
このビューをクエリで呼び出すには、selectステートメントを使用します。
SELECT * FROM LessonView;
SELECT * FROM ClassRoomLessonView;
テーブルを作成する
以下では、3つの列を持つ表を作成します。
カラムId
は必ず埋める必要があるので、 NOT NULL
と定義しNOT NULL
。
Contract
の列には、唯一の値が 'Y'または 'N'であるようにチェックを追加します。挿入が完了し、この列が挿入中に指定されていない場合、デフォルトの 'N'が挿入されます。
CREATE TABLE Employee (
Id NUMBER NOT NULL,
Name VARCHAR2(60),
Contract CHAR DEFAULT 'N' NOT NULL,
---
CONSTRAINT p_Id PRIMARY KEY(Id),
CONSTRAINT c_Contract CHECK (Contract IN('Y','N'))
);