==[[Oracle Database10g PL/SQL]]==[[PL/SQL]] | ] Oracle][[Oracle Database10g][[PL/SQL] | [[[[PL/SQL]] |
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/toc.html
==PL/SQLの概要[[SQL]]の概要=====PL/SQLのメリット[[SQL]]のメリット=======SQLとの緊密な統合[[SQL]]との緊密な統合====*PL/SQLでは、SQLのすべてのファンクション、演算子および疑似列と同様に、 SQLのデータ操作、カーソル制御およびトランザクション制御のすべてのコマンドを使用できます。SQLのデータ操作、カーソル制御および[[トランザクション]]制御のすべてのコマンドを使用できます。*PL/SQLでSQLのデータ型が完全にサポートされているため、アプリケーションとデータベースの間でデータをやり取りする際、データを変換する必要が少なくなります。[[SQL]]で[[SQL]]のデータ型が完全にサポートされているため、アプリケーションとデータベースの間でデータをやり取りする際、データを変換する必要が少なくなります。*SQLデータ型とPL[[SQL]]データ型とPL/SQLデータ型の変換を行う必要はありません。[[SQL]]データ型の変換を行う必要はありません。**データベースのNUMBERまたはVARCHAR2列は、PL/SQLのNUMBERまたはVARCHAR2変数に格納されます。[[SQL]]のNUMBERまたはVARCHAR2変数に格納されます。
*データ型を指定せずに表の列や行を操作できるため、表の定義が変更された場合のメンテナンス作業が簡略化。
*SQL問合せの実行および結果セットの処理は、スクリプト言語でテキスト・ファイルを開いて各行を処理する場合と同様に簡単。[[SQL]]問合せの実行および結果セットの処理は、スクリプト言語でテキスト・ファイルを開いて各行を処理する場合と同様に簡単。
*トリガーやオブジェクト型など、データベースの多くの機能で使用されます。
*トリガー本体およびオブジェクト型のメソッドをPL/SQLで作成できます。[[SQL]]で作成できます。*静的SQLおよび動的SQLの両方をサポート。静的[[SQL]]および動的[[SQL]]の両方をサポート。
====高いパフォーマンス====
*PL/SQLがあれば、複数文のブロック全体をOracleに一度に送信できるため、データベースとアプリケーションの間のネットワークの通信量を大幅に削減できます。SQLがあれば、複数文のブロック全体を[[Oracle]]に一度に送信できるため、データベースとアプリケーションの間のネットワークの通信量を大幅に削減できます。*PL/SQLストアド・プロシージャは一度コンパイルされてから実行可能なフォームで格納されるため、プロシージャ・コールは効果的。[[SQL]]ストアド・プロシージャは一度コンパイルされてから実行可能なフォームで格納されるため、プロシージャ・コールは効果的。
*ストアド・プロシージャはデータベース・サーバー内で実行されるため、ネットワーク上で一度コールすると大規模なジョブを開始でる。
*ストアド・プロシージャはキャッシュされ、ユーザー間で共有され、これによって、必要なメモリー量と起動オーバーヘッドが減少。
*データを操作するコードを非常にコンパクトにすることができます。
*例外処理、カプセル化、データ隠ぺいおよびオブジェクト指向のデータ型など、あらゆるソフトウェア・エンジニアリング機能が提供されているため、設計およびデバック時間を節約できます。
*[[Oracle ]] Formsなどのツールを拡張。*ある1つのOracleツールで習得した ある1つの[[Oracle]]ツールで習得した PL/SQLの知識は他のツールにも利用できます。
====完全な移植性====
*Oracleデータベースが動作する任意のオペレーティング・システムおよびプラットフォームで実行できます。[[Oracle]]データベースが動作する任意のオペレーティング・システムおよびプラットフォームで実行できます。
*様々な環境で再利用できる、移植性の高いプログラム・ライブラリを作成できます。
====事前定義パッケージへのアクセス====
*Oracleでは、様々な実用的な作業を実行するためにPL[[Oracle]]では、様々な実用的な作業を実行するためにPL/SQLからコールできるAPIを定義した製品固有のパッケージを提供しています。
====オブジェクト指向プログラミングのサポート====
*オブジェクト型を使用すると、モジュール構造で維持および再利用が可能なソフトウェア構成要素を作成できるのみでなく、複数の異なるチームのプログラマが同時にソフトウェア構成要素を開発できます。
*データに対する操作をカプセル化すると、オブジェクト型を使用してデータ・メンテナンスのためのコードをSQLスクリプトやPLデータに対する操作をカプセル化すると、オブジェクト型を使用してデータ・メンテナンスのためのコードを[[SQL]]スクリプトやPL/SQLブロックではなく、メソッドに入れることができます。[[SQL]]ブロックではなく、メソッドに入れることができます。
*オブジェクト型を使用すれば、実装の細部が隠されるため、クライアント・プログラムに影響することなく細部を変更できます。
*オブジェクト型を使用することで、現実のデータをモデル化できます。
====WebアプリケーションおよびWebページ開発のサポート[[Webアプリケーション]]およびWebページ開発のサポート====*WebアプリケーションおよびServer [[Webアプリケーション]]およびServer Pages(PSP)を開発できます。
===PL/SQLの主な特長[[SQL]]の主な特長===*SQLのデータ操作機能と手続き型言語の処理機能の両方が利用できます。[[SQL]]のデータ操作機能と手続き型言語の処理機能の両方が利用できます。
*プロシージャ・コードに分割し、複数のアプリケーション間でそのコードを再利用できます。
*単純なSQLで問題が解決できる場合、PL単純な[[SQL]]で問題が解決できる場合、PL/SQLプログラム内でSQLコマンドを直接発行できます。[[SQL]]プログラム内で[[SQL]]コマンドを直接発行できます。====PL/SQLブロック構造[[SQL]]ブロック構造====
*プログラムを構成する基本単位(プロシージャ、ファンクションおよび無名ブロック)は、内部で相互にネストできる論理ブロックです。
*ブロックは、関連する宣言および文をグループ化します。宣言は、それを使用する場所に近い場所に置くことができます。
*必ず存在する必要があるのは実行部のみ
#宣言部(DECLARE)宣言部(DECLA[[R]]E)
#実行部(BEGIN ..END)
#例外処理(EXCEPTION)
====権限の付与====
=====EXAMユーザーに、以下の権限を与える=====
*EXECUTE ANY PROCEDUREP[[R]]OCEDU[[R]]E*DEBUG ANY PROCEDUREP[[R]]OCEDU[[R]]E*ALTER ALTE[[R]] ANY PROCEDUREP[[R]]OCEDU[[R]]E*CREATE C[[R]]EATE ANY PROCEDUREP[[R]]OCEDU[[R]]E*DROP D[[R]]OP ANY PROCEDUREP[[R]]OCEDU[[R]]E
[[SQL]]>grant create any procedure to exam;
Grant succeeded.
=====適当なのを作る=====
CREATE OR REPLACE C[[R]]EATE O[[R]] [[R]]EPLACE procedure exam.test_proc is
cursor c1 is
select ip_address