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