サーチ…


備考

この節では、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を使用する方法のいくつかを次に示します。

  1. ストアドプロシージャを構築する。
  2. データベース・トリガーを作成する。
  3. Oracle Formsアプリケーションにクライアント側のロジックを実装する。
  4. 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'))
);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow