Oracle®Developersリファレンス・ガイドのデータベース互換性
 
 
 
EDB Postgres™Advanced Server 11
2018年11月20日
 
 
 
 
1 はじめに
オラクルの データベース互換性とは、アプリケーションがOracle環境だけでなく、 EDB Postgres Advanced Server(Advanced Server)環境で動作し、アプリケーションコードをほとんど変更しないか、またはまったく変更しないことを意味します。
このガイドでは、Advanced Serverの互換性機能に関する参考資料を提供しています。
Advanced Server でOracleデータベースと互換性の ある アプリケーションを 開発するには、アプリケーションの構築にどの機能が使用されているかを特に注意する必要があります。たとえば、 互換性のあるアプリケーションを開発するとは、
Oracle SQLと互換性のあるSQL
Oracleデータベースと互換性のあるSQL文およびプロシージャー・ロジックで使用するためのシステムおよび組み込み関数
ストアドプロシージャ 、関数、トリガ、およびパッケージ用のデータベースサーバー側アプリケーションロジックを作成するためのストアドプロシージャ言語SPL
Oracleのデータ・ディクショナリと互換性のあるシステム・カタログ・ビュー
Advanced Serverの互換性機能と拡張機能の詳細については、Advanced Serverのドキュメントの完全なライブラリを参照してください。
https://www.enterprisedb.com/resources/product-documentation
1.1 新機能
Advanced Server 11を作成するためにAdvanced Server 10に 以下の Oracle機能のデータベース互換性が追加されました
Advanced Serverは、任意のSPLブロック内でPRAGMA AUTONOMOUS_TRANSACTION指示文を サポートし 、自律型トランザクション機能を提供するようになりました。詳細は、「 Oracle Developer's Guide」のデータベース互換性を参照してください。影響を受けたSPLプログラムでは、セクションを参照2.3.202.3.242.3.252.3.35 、および2.3.37を
1.2 このガイドで使用される表記規則
このマニュアルでは、さまざまなコマンド、文、プログラム、例などの意味と使用法を明確にするために、特定の表記規則が使用されています。このセクションでは、これらの規則の概要を説明します。
以下の説明では、 用語は、言語キーワード、ユーザ提供値、リテラルなどの任意の単語または単語群を指す。用語の正確な意味は、それが使用される文脈に依存する。
イタリック体のフォントで は、通常、最初に定義された文章に新しい用語が導入されています。
固定幅(単間隔)フォント は、 SQL コマンド、例で使用されている特定のテーブルとカラム名、プログラミング言語キーワード など、文字通り与えなければならない用語に使用され ます 。たとえば、 SELECT * FROM emp;
イタリック固定幅フォント は、ユーザーが実際の使用で値を置き換える必要がある用語に使用されます。たとえば、 DELETE FROM table_name ;
角括弧[]は、囲まれた用語の1つまたはいずれかが置換されている可能性があることを示します。たとえば、 [a | b]は 、「 a 」または「 b 」のいずれかを選択するか、またはどちらも選択しないことを意味します。
中括弧{}は、囲まれた選択肢のうちの1つを指定する必要があることを示します。たとえば、 {a | b}は 、 " a "または " b "のうちの1つを指定する必要があることを意味します。
楕円形...とは、進行中の用語を繰り返すことができることを意味します。たとえば、 [a | b] ...は、あなたがシーケンス「 baaba 」を持っているかもしれないことを意味します。
2 SQL言語
以下のセクションでは、 Oracleデータベースと互換性のある Advanced Server SQL言語のサブセットについて説明します。次のSQL構文、コマンド、データ型、および関数は、EDB Postgres Advanced ServerOracleの両方で機能します
Advanced Serverのドキュメント・セットには、拡張機能(Oracleとのデータベース互換性を提供しない機能、またはOracleスタイルのアプリケーションをサポートしない機能)の構文とコマンドが含まれています。
このセクションは、次のセクションで構成されています。
Advanced Serverの SQL構文と言語要素の一般的な説明
SQLコマンドの要約
2.1 SQL構文
このセクションでは、 SQL の一般的な構文について説明し ます 。これは、データを定義および変更するためにSQLコマンドがどのように適用されるかについての詳細を含む次の章を理解するための基礎を形成します。
 
2.1.1 字句構造
SQL入力は一連のコマンドで構成されています。 コマンドは、一連のトークンで構成され、セミコロン(;)で終了します。入力ストリームの終わりもコマンドを終了します。有効なトークンは、特定のコマンドの構文に依存します。
トークンは、 キーワード識別子引用符で囲まれた識別子リテラル定数 )、または特殊文字シンボルです。トークンは通常、 空白 (スペース、タブ、 改行 )で区切られますが、あいまいさがない場合(通常、特殊文字が他のトークンタイプに隣接している場合のみです)にする必要はありません。
さらに、 SQL入力 コメントが発生する可能性があります 。それらはトークンではなく、空白と事実上同等です。
たとえば、次の構文は有効な SQL入力です。
SELECT * FROM MY_TABLE;
UPDATE MY_TABLE SET A = 5;
INSERT INTO MY_TABLE VALUES (3, 'hi there');
これは一連の3つのコマンドで、1行に1つです(これは必須ではありませんが、複数のコマンドを1つの行に置くことができ、コマンドは通常行間に分割できます)。
SQL構文は、トークンがコマンドを識別し、オペランドまたはパラメータである何に関して非常に一貫していません。最初の数個のトークンは一般にコマンド名です。したがって、上記の例では、通常、 SELECTUPDATE 、およびINSERTコマンドについて説明します。しかし、例えば、 UPDATEコマンドは常にSETトークンを特定の位置に表示する必要があります。この特定のINSERTバリエーションには、 VALUESトークンが必要です。各コマンドの正確な構文規則については、 2.3節で説明します。
 
2.1.2 識別子とキーワード
上の例のSELECTUPDATEVALUES などのトークンキーワードの例です。つまり、 SQL言語で固定された意味を持つ単語です。トークンMY_TABLEA識別子の例です。それらは、使用されているコマンドに応じて、テーブル、列、または他のデータベースオブジェクトの名前を識別します。したがって、単に「 名前 」と呼ばれることもあります。キーワードと識別子は同じ字句構造を持ちます。つまり、言語を知らなくてもトークンが識別子かキーワードかどうかを知ることはできません。
SQLの識別子とキーワードは、文字( azまたはAZ )で始まる必要があります。識別子またはキーワードの後続の文字は、文字、アンダースコア、数字( 0-9 )、ドル記号( $ )、または数字記号( )です。
識別子とキーワード名は大文字と小文字を区別しません。したがって、
UPDATE MY_TABLE SET A = 5;
等価的に以下のように書くことができます:
uPDaTE my_TabLE SeT a = 5;
大抵の場合、大文字で大文字を、大文字では小文字で、
UPDATE my_table SET a = 5;
第2の種類の識別子: 区切られた識別子または引用された識別子 。二重引用符( ")で任意の文字の並びを囲むことによって形成される。区切り識別子は常に識別子、キーワードではありません。だから、『『選択 という名前の列やテーブルを参照するために使用できる を選択し 、引用符で囲まれていないselectはキーワードとして扱われるため、テーブルやカラムの名前が必要な場所で使用すると解析エラーが発生します。
UPDATE "my_table" SET "a" = 5;
引用符付きの識別子には、数字コード0の文字を除く任意の文字を含めることができます。
二重引用符を含めるには、二重引用符を二重に使用します。これにより、他の方法では使用できないテーブル名や列名(空白やアンパサンドを含むものなど)を作成することができます。長さの制限は依然として適用されます。
識別子をクォートすると、大文字と小文字が区別されますが、引用されていない名前は常に小文字に変換されます。たとえば、識別子 FOOfoo 、および"foo"は、 Advanced Serverでは同じと見なされますが、 "Foo""FOO"はこれらの3つのものと異なります。引用符のない名前を小文字に変換することは、Oracleデータベースと互換性がありません。 Oracleの構文では、引用符で囲まれていない名前は大文字変換されます。たとえば、 foo"foo" ではなく" FOO"に相当します 。ポータブルアプリケーションを作成する場合は、常に特定の名前を引用するか、引用しないことをお勧めします。
 
2.1.3 定数
Advanced Server の暗黙的に型指定された定数の種類は、 文字列数値です。明示的な型で定数を指定することもできます。これにより、より正確な表現とシステムによる効率的な処理が可能になります。これらの選択肢については、次のサブセクションで説明します。
2.1.3.1 文字列定数
SQL 文字列定数は、一重引用符( ' )で囲まれた文字の任意のシーケンスです(たとえば、 ' This is a string ') 。文字列定数の中に一重引用符を含めるには、二つの隣接する一重引用符(例えば、 'Dianne'の馬 ' )を書いてください。これは二重引用符( ")と同じではないことに注意してください。
2.1.3.2 数値定数
数値定数は、次の一般的な形式で受け入れられます。
digits
digits .[ digits ][e[+-] digits ]
[ digits ]. digits [e[+-] digits ]
digits e[+-] digits
ここで、 数字は、一つ以上の桁(0〜9)です。少なくとも1桁は、小数点が使用されている場合は、小数点の前または後にする必要があります。指数マーカー( e )が存在する場合は、少なくとも1桁は指数マーカーに従わなければなりません。定数にはスペースやその他の文字が埋め込まれていないことがあります。先頭のプラス記号またはマイナス記号は、実際には定数の一部とはみなされないことに注意してください。定数に適用される演算子です。
有効な数値定数の例をいくつか示します。
42
3.5
4.
.001
5e2
1.925e-3
小数点も指数も含まない数値定数は 、その値がINTEGER型(32ビット)に収まる場合は、最初は INTEGER 型であると推定されます 。そうでない場合は、その値が型BIGINT(64ビット)に収まる場合にタイプBIGINTであると推定されます。それ以外の場合はNUMBER型になります。小数点および/または指数を含む定数は、常に最初はNUMBER型とみなされます。
最初に割り当てられた数値定数のデータ型は、型解決アルゴリズムの出発点にすぎません。ほとんどの場合、定数はコンテキストに応じて自動的に最適な型に強制的に変換されます。必要に応じて、次のセクションで説明するように、数値をキャストして特定のデータ型として解釈させることができます。
2.1.3.3 他の型の定数
任意の型の定数は、次の表記法を使用して入力できます。
CAST(' string ' AS type )
文字列定数のテキストは、typeと呼ばれる 型の 入力変換ルーチンに渡されます 。結果は示された型の定数です。明示的な型キャストは、定数が(たとえば、それが直接的に表の列に割り当てられる)型でなければならない場合に、あいまいさがなければ省略できます。この場合、自動的に強制的に強制されます。
CASTは、任意の式の実行時の型変換を指定するためにも使用できます。
 
2.1.4 コメント
コメントは二重ダッシュで始まり、行の終わりまで続く文字の任意のシーケンスです。例:
-- This is a standard SQL comment
あるいは、 Cスタイルのブロックコメントを使用することもできます。
/* multiline comment
* block
*/
ここで、コメントは / *で 始まり* /の一致する出現に及ぶ。
 
2.2 データ型
次の表は、組み込みの汎用データ型を示しています。
表2-1データ型
LONG RAW, RAW( n ), BYTEA
CHAR [ ( n ) ]
NUMBER( p [, s ])
DEC(p [, s ]),
DECIMAL( p [, s ]),
NUMERIC( p [, s ])
TIMESTAMP [ ( p ) ] WITH TIME ZONE
VARCHAR2( n )
CHAR VARYING( n ), CHARACTER VARYING( n ), VARCHAR( n )
 
2.2.1 数値型
数値型は、4バイトの整数、4バイトと8バイトの浮動小数点数、および固定小数点の小数で構成されます。次の表に、使用可能なタイプを示します。
表2-2数値タイプ
NUMBER( p [, s ] )
次のセクションでは、型の詳細について説明します。
2.2.1.1 整数型
タイプ INTEGERは 、-2,147,483,648と+2,147,483,647の値の間に(小数成分なしの)整数を格納します。許容範囲外の値を格納しようとすると、エラーが発生します。
ROWID型の列は、レコードの物理アドレスを記述する固定長バイナリ・データを保持します。 ROWIDは、0と4,294,967,295の値の間に(小数成分なしの)整数を格納する、符号なしの4バイトのINTEGERです。許容範囲外の値を格納しようとすると、エラーが発生します。
2.2.1.2 任意精度の数値
タイプ NUMBERは 、実質的に無制限の精度の桁数を格納し、正確に計算を実行できます。金額や正確さが必要な場合は他の数量を保管する場合に特にお勧めします。ただし、 NUMBER型は、次のセクションで説明する浮動小数点型に比べて非常に遅いです。
以下では、これらの用語を使用します 。NUMBER 位取りは、小数点以下の小数点以下の小数点以下の桁数です。 NUMBER精度は、整数の有効数字の合計数、つまり小数点の両側の桁数です。したがって、23.5141の数値は6の精度と4のスケールを持ちます。整数は0のスケールを持つとみなすことができます。
NUMBERタイプの精度と位取りの両方を設定できます。 NUMBER型の列を宣言するには、構文を使用します
NUMBER( precision , scale )
精度は正でなければならず、スケールはゼロまたは正でなければなりません。あるいは、
NUMBER( precision )
スケール0を選択し ます。精度または位取りを 指定し ないで NUMBER 指定 すると、任意の精度および位取りの数値を精度の実装限界まで格納できる列が作成されます。このような列は入力値を特定のスケールに強制しません が、宣言されたスケールの NUMBER 列は入力値をそのスケールに強制します。 ( SQL標準では、デフォルトスケール0、すなわち整数精度への強制が必要です。移植性を最大限に高めるには、精度と位取りを明示的に指定することをお勧めします)。
値の精度または位取りが列の宣言された精度または位取りより大きい場合、システムは値を丸めようとします。宣言された制限を満たすように値を四捨五入することができない場合は、エラーが発生します。
2.2.1.3 浮動小数点型
データ型 REAL DOUBLE PRECISION は、 不正確 で可変長の数値型です。実際には、これらのタイプは、通常 、基底のプロセッサ、オペレーティングシステム、およびコンパイラがサポートする範囲で、バイナリ浮動小数点演算(それぞれ単精度および倍精度) IEEE 標準754の 実装です
不正確とは、一部の値を内部形式に正確に変換できず、値を保存して印刷する際にわずかな不一致が生じるように、近似値として格納されることを意味します。これらのエラーを管理し、計算をどのように伝播させるかは、数学とコンピュータサイエンスの全分野の主題であり、次の点を除いてここではこれ以上説明しません。
正確な保管と計算(金額など)が必要な場合は、代わりにNUMBERタイプを使用してください
これらの型を持つ複雑な計算を何か重要なものにする場合は、特に境界ケース(無限大、アンダーフロー)の特定の動作に頼っている場合は、実装を慎重に評価する必要があります。
平等のために2つの浮動小数点値を比較すると、期待どおりに動作する場合と動作しない場合があります。
ほとんどのプラットフォームでは、 REAL型は少なくとも1E-37〜1E + 37の範囲を持ち、精度は少なくとも6桁です。 DOUBLE PRECISIONタイプは通常、1E-307〜1E + 308の範囲で、少なくとも15桁の精度を持ちます。値が大きすぎたり小さすぎたりすると、エラーが発生します。入力番号の精度が高すぎる場合は、丸めが行われることがあります。 0に近い数値は、ゼロとは区別されて表現できないため、アンダーフローエラーが発生します。
Advanced Server は、 不正確な数値型を指定するため SQL 標準表記 FLOAT および FLOAT( p もサポートしてい ます 。ここで、 p は最小許容精度を2進数で指定します。 Advanced Server REAL タイプ を選択する場合 FLOAT(1) から FLOAT(24) を、 DOUBLE PRECISION を選択する場合は FLOAT(25) から FLOAT(53) 受け入れ ます 許容範囲外 pの 値は エラーを引き起こします。 精度が指定されていない FLOAT は、 DOUBLE PRECISION を意味し ます。
2.2.2 文字の種類
次の表に、 Advanced Serverで使用可能な汎用文字の種類を示します
表2-3文字の種類
CHAR[( n )]
NVARCHAR( n )
VARCHAR2 Alias for .
VARCHAR( n )
VARCHAR2( n )
ここで、 n は正の整数です。これらの型は 長さ n 文字までの文字列を格納できます 余分な文字がすべて空白でない限り、 n の長さを超える値を代入 するとエラーになります。この場合、文字列は最大長に切り捨てられます。
これらのタイプのデータの格納要件は、文字列が127バイト未満の場合は1バイト、文字列が127バイト以上の場合は4バイトです。 CHAR の場合 、パディングにも格納が必要です。長い文字列はシステムによって自動的に圧縮されるため、ディスク上の物理的な要件が少なくなる可能性があります。長い値は、短い列値への高速アクセスを妨げないように、バックグラウンド表に保管されます。
データベースの文字セットは、テキスト値を格納するために使用される文字セットを決定します。
CHAR
値を指定しない場合 n n はデフォルトで 1に なります 。割り当てられる文字列が n よりも短い場合 CHAR 型の値は指定された幅( n )にスペースが埋め込まれ、そのように格納されて表示されます。
パディングスペースは、意味的に重要でないものとして扱われます。つまり、末尾のスペースは、 CHAR 型の2つの値を比較するときは無視され、 CHAR値を他の文字列型のいずれかに変換するときには削除されます。
オーバー長さの値を CHAR( n 型に明示的にキャストすると、 SQL標準で指定されているように)エラーを発生させずに値がn文字に切り捨てられます
VARCHAR、VARCHAR2、NVARCHARおよびNVARCHAR2
割り当てられる文字列が n より短い場合 VARCHAR VARCHAR2NVARCHARおよびNVARCHAR2 型の値は パディングなしで短い文字列を格納します。
末尾のスペース VARCHAR値で意味的に重要であることに注意してください
VARCHAR型に明示的に値をキャストするとSQL標準で指定されているように、エラーを発生させることなく長さの値がn文字に切り捨てられます
CLOB
CLOBで大きな文字列を格納できます。長さの制限が指定されていないことを除いて、 CLOBVARCHAR2と意味的に同等です。通常、最大文字列長がわからない場合は、 CLOB型を使用する必要があります。
CLOB型に格納できる最長文字列は約1 GBです。
注意: CLOBデータ型は、実際にはPostgreSQLのTEXTデータ型に基づくDOMAINです。 DOMAINの詳細については、PostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-createdomain.html
したがって、 CLOBタイプの使用は、約1GBの最大サイズなどのTEXTに対して実行できる処理によって制限されます。
大量のデータを使用する場合は、 CLOBデータ型を使用する代わりに、 pg_largeobjectシステムカタログに依存するPostgreSQL ラージオブジェクト機能を使用してください。ラージオブジェクトの詳細については、PostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/largeobjects.html
 
2.2.3 バイナリデータ
次のデータ型では、バイナリ文字列を格納できます。
表2-4バイナリラージオブジェクト
Variable-length binary string, with a length betw een 1 and 8300.
バイナリ文字列は、オクテット(またはバイト)のシーケンスです。バイナリ文字列は、2つの特性によって文字列と区別されます。まず、バイナリ文字列は、値ゼロのオクテットと他の "印刷不可能" オクテット(32〜126の範囲外のオクテットとして定義)を 格納することを特に許可し ます。第2に、バイナリ文字列の操作は実際のバイトを処理しますが、文字列のエンコーディングと処理はロケール設定に依存します。
 
 
2.2.4 日付/時刻タイプ
次の日付/時刻タイプの説明では 、表が作成または変更されるたびに、構成パラメーター edb_redwood_datetrueに設定されていることを前提としています
Advanced Server は、次の表に示す日付/時刻タイプをサポートしています。
表2-5日付/時刻タイプ
[( p )]
TIMESTAMP [( p )] WITH TIME ZONE
場合 DATEは、 データ定義言語(DDL)コマンドの列のデータ・タイプとして表示され、 表を作成する 表を ALTER、それは、テーブル定義はデータベースに格納された時点でタイムスタンプ に変換されます 。したがって、時間成分も日付とともに列に格納されます。
とき DATEは、SPL宣言セクション、またはSPLプロシージャの仮パラメータまたはSPL関数のデータ型、またはSPL関数の戻り値の型で変数のデータ型として表示され、それは常にTIMESTAMPに変換されるので、存在する場合、時間成分を扱うことができる。
TIMESTAMP 、秒フィールドに保持される小数点以下桁数を指定 するオプションの精度値 p 受け入れ ます。 p の許容範囲は 0〜6で、デフォルトは6です。
場合 TIMESTAMP値は、倍精度浮動小数点数(現在のデフォルト)として保存され、精度の有効限界未満6 TIMESTAMP値は真夜中2000-01-01前または後秒として保存されてもよいです。マイクロ秒の精度は、2000年1月1日から数年以内の日付で達成されますが、日付の精度が低下します。 TIMESTAMP値が8バイト整数(コンパイル時のオプション)として格納される場合、マイクロ秒の精度がすべての値域にわたって使用可能です。ただし、8バイト整数のタイムスタンプの日付範囲は上記のものよりも限られています。紀元前4713年から294276年までです。
TIMESTAMP p )WITH TIME ZONETIMESTAMP p )に似ていますが、タイムゾーンも含みます。
2.2.4.1 インターバルタイプ
INTERVAL値は期間を指定します。 INTERVAL型の値は、データの値を記述するフィールドで構成されます。次の表は、 INTERVAL型で許可されるフィールドの一覧です。
表2-6間隔タイプ
DAY
0 through 59.9( p ) where 9( p ) is the precision of fractional seconds
フィールドは、 YEARSからMONTHSへDAYSからHOURSMINUTESSECONDSの 順に降順で表示する必要があります
Advanced Serverは 、Oracleデータベースと互換性のある2つの INTERVALタイプをサポートしています。
Advanced Serverでサポートされる最初のバリエーションは、 INTERVAL DAY TO SECOND [( p )]です。 INTERVAL DAY TO SECOND [( p )]は、時間間隔を日、時間、分、秒で格納します。
p 2番目の フィールドの 精度を指定し ます。
Advanced Serverは次の値を解釈します。
INTERVAL '1 2:34:5.678'第2日まで(3)
1日、2時間、34分、5秒、および678分の1秒のように表示されます。
Advanced Serverは次の値を解釈します。
INTERVAL '1 23時間まで
1日23時間とします。
Advanced Serverは次の値を解釈します。
インターバル '2:34'時間
2時間34分とする。
Advanced Serverは次の値を解釈します。
INTERVAL '2:34:56.129'時間まで(2)
2時間34分56秒13000分の1秒とします。小数第2は、指定された精度のために13に切り上げられることに注意してください。
Oracleデータベースと互換性のあるAdvanced Serverでサポートされている2番目のバリエーションは、 INTERVAL YEAR TO MONTHです。このバリエーションは、時間間隔を年数および月単位で格納します。
Advanced Serverは次の値を解釈します。
月から12月までの間に'12 -3 '
12年3ヶ月として。
Advanced Serverは次の値を解釈します。
インターバル'456年(2)
12年3ヶ月として。
Advanced Serverは次の値を解釈します。
インターバル「300」月
25年として
2.2.4.2 日付/時刻入力
日付と時刻の入力は、ISO 8601の SQL 互換形式、 Oracleの デフォルトのdd-MON-yy形式、その他の形式 で受け入れられ ます。ただし、年、月、日のいずれのコンポーネントがあいまいでないかは不明です。ただし、あいまいさを避けるために、 TO_DATE関数の使用を強くお勧めします。
任意の日付または時刻のリテラル入力は、テキスト文字列のように単一引用符で囲む必要があります。次の SQL標準構文も使用できます。
type ' value '
type DATE または TIMESTAMPの いずれか です。
value は日付/時刻テキスト文字列です。
2.2.4.2.1 日付
次の表は、日付の可能な入力形式の一部を示しています。これらはすべて1999年1月8日に相当します。
表2-7日付入力
日付値は、 DATE または TIMESTAMP 列または変数に 割り当てることができ ます。日付値に時間値が付加されていない場合、時、分、および秒フィールドはゼロに設定されます。
2.2.4.2.2 時間
次の表に、日付またはタイムスタンプの時間コンポーネントのいくつかの例を示します。
表2-8時間入力
2.2.4.2.3 タイムスタンプ
タイムスタンプの有効な入力は、日付と時刻の連結で構成されます。タイムスタンプの日付部分は、 表2-7に 示すいずれかの例に従ってフォーマットすることができます 。タイムスタンプの時間部分は、 表2-8に 示す例のいずれかに従ってフォーマットすることができます
次は、 Oracleのデフォルト形式に従うタイムスタンプの例です。
08-JAN-99 04:05:06
以下は、 ISO 8601規格に 従ったタイムスタンプの例です
1999-01-08 04:05:06
2.2.4.3 日付/時刻出力
日付/時刻タイプのデフォルトの出力形式は、 Oracleデータベースと互換性の ある Redwood日付スタイル と呼ばれる(dd-MON-yy) か、ISO 8601フォーマットと呼ばれる(yyyy-mm-dd) データベース のアプリケーションインターフェイス上で実行さ ます。 SQL Interactive などのJDBCを使用するアプリケーションでは 、常に日付がISO 8601形式で表示されます。 PSQL などの他のアプリケーションでは、Redwood形式で日付が表示されます。
次の表は、RedwoodとISO 8601の2つのスタイルの出力形式の例を示しています。
表2-9日付/時刻出力スタイル
2.2.4.4 内部
Advanced Server では、すべての日付/時刻の計算にユリウス日付が使用されます。ユリウス暦の日付は、年の長さが365.2425日であるという前提に基づいて、4713年以降の任意の日付を正しく予測または計算します。
 
2.2.5 ブール型
Advanced Server は、標準 SQL タイプ BOOLEANを 提供し ます BOOLEAN は、 TRUE または FALSEの 2つの状態のうちの1つを持つことができ ます 。第3の状態 UNKNOWN は、 SQL NULL 値。
表2-10ブール型
真の状態を表す有効なリテラル値は TRUE です。偽の状態を表す有効なリテラルは FALSE です。
 
2.2.6 XMLタイプ
XMLType データ型は、XMLデータを格納するために使用されます。 XMLデータを文字フィールドに格納することの利点は、整形式の入力値をチェックして、タイプセーフな操作を実行するためのサポート関数があることです。
XMLタイプでは、XML標準で定義されているように整形式の「ドキュメント」と、本番 XMLDeclで 定義されている「コンテンツ」フラグメントを 格納できますか? XML標準の コンテンツ 大雑把に言えば、これは、コンテンツフラグメントが複数のトップレベル要素または文字ノードを持つことができることを意味します。
注意: Oracleでは、 XMLTYPE 列の コンテンツ・フラグメントの格納はサポートされていません
次の例は、 XMLTYPE を持つ表に行を作成して挿入する方法を示してい ます。
CREATE TABLE books (
content XMLTYPE
);
 
INSERT INTO books VALUES (XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>'));
 
SELECT * FROM books;
 
content
----------------------------------------------------------
<book><title>Manual</title><chapter>...</chapter></book>
(1 row)
 
2.3 SQLコマンド
この節では、 Advanced ServerでサポートされているOracleデータベースと互換性のある SQLコマンドの概要を示し ます 。このセクションのSQLコマンドは、 OracleデータベースとAdvanced Serverデータベースの両方で動作します。
次の点に注意してください。
Advanced Serverは、ここに記載されていない他のコマンドもサポートしています。これらのコマンドには、 Oracleと同等の機能がないか、 Oracle SQLコマンドと同様の機能を提供する可能性がありますが、構文は異なります。
このセクション SQLコマンドは、各コマンドで使用できる完全な構文、オプション、および機能を必ずしも表すものではありません。ほとんどの場合、 Oracleデータベースと互換性のない構文、オプション、および機能は、コマンドの説明および構文から省略されています。
Advanced Serverのマニュアルセットのドキュメントには、Oracleデータベースと互換性がない可能性が機能を命じます。
 
2.3.1 ALTER INDEX
ALTER INDEX - 既存の索引を変更します。
シノプシス
Advanced Serverは 、Oracleデータベースと互換性のある ALTER INDEXコマンドの2つのバリエーションをサポートしています。インデックスの名前を変更するには、最初のバリエーションを使用します。
ALTER INDEX name RENAME TO new_name
ALTER INDEXコマンドの2番目のバリエーションを使用して 、インデックスを再構築します。
ALTER INDEX name REBUILD
説明
ALTER INDEXは、既存の索引の定義を変更します。 RENAME句は、索引の名前を変更します。 REBUILD句は、索引の古いコピーを索引の表に基づく更新版に置き換えて、索引を再構成します。
REBUILD句はPostgreSQLのREINDEXコマンドを起動します。 REBUILD句の使用の詳細については、PostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-reindex.html
ALTER INDEXは、格納されたデータには影響しません。
パラメーター
既存の索引の名前(おそらくスキーマ修飾名)。
新しい名前
インデックスの新しい名前。
 
 
インデックスの名前name_idx から empname_idx変更するには
ALTER INDEX name_idx RENAME TO empname_idx;
empname_idx という名前のインデックスを再構築するには
ALTER INDEX empname_idx REBUILD;
関連項目
CREATE INDEX DROP INDEX
 
2.3.2変更手順
変更手順  
シノプシス
ALTER PROCEDURE procedure _ name options [RESTRICT]
説明
ALTERを 使用する プロシージャーが セキュリティーである ことを指定する PROCEDURE ステートメント 招待者 または セキュリティ DEFINER
パラメーター
プロシージャ名
procedure_nameは、ストアド・プロシージャの名前(スキーマ修飾名)を指定します。
オプション 多分:
[外部]セキュリティディフェンダー
SECURITY DEFINER指定して 、プロシージャーを作成したユーザーの特権でプロシージャーを実行するようにサーバーに指示します。 EXTERNALキーワードは互換性のために受け入れられますが、無視されます。
[外部]セキュリティ・インボーカ
SECURITY INVOKER指定して 、プロシージャーを呼び出すユーザーの特権でプロシージャーを実行するようにサーバーに指示します。 EXTERNALキーワードは互換性のために受け入れられますが、無視されます。
RESTRICT キーワードは、互換性のために受け入れたが、無視されます。
次のコマンドは、 update _ balanceプロシージャを、プロシージャを呼び出すユーザーの権限で実行するように指定します。
ALTER PROCEDURE update_balance SECURITY INVOKER;
 
2.3.3 ALTER PROFILE
ALTER PROFILE - 既存のプロファイルを変更する
シノプシス
ALTER PROFILE profile_name RENAME TO new_name ;
 
ALTER PROFILE profile_name
LIMIT {
parameter value }[...];
説明
ユーザー定義プロファイルを変更するには、 ALTER PROFILEコマンドを使用します。 Advanced Serverは、次の2つの形式のコマンドをサポートしています。
ALTER PROFILE ... RENAME TO使用して 、プロファイルの名前を変更します。
ALTER PROFILE ... LIMIT使用して、プロファイルに関連付けられた制限を変更します。
Advanced Serverによって実行されるルールを指定するには LIMIT 句と1つ以上のスペース区切り パラメータ / 値の ペアを 含める か、 ALTER PROFILE ... RENAME TOを使用してプロファイルの名前を変更します。
パラメーター
プロファイル名
プロファイルの名前。
新しい名前
new_nameは、プロファイルの新しい名前を指定します。
パラメータ
パラメータ は、プロファイルによって制限される属性を指定します。
value はパラメータの制限を指定します。
Advanced Serverは、 パラメータ について以下 値を サポートしてい ます
FAILED_LOGIN_ATTEMPTSは、サーバーがPASSWORD_LOCK_TIMEで指定された時間、アカウントからユーザーをロックする前に、ユーザーが失敗したログイン試行の回数を指定します。サポートされる値は次のとおりです。
0 以上 の整数
DEFAULT - DEFAULT プロファイルで 指定された FAILED_LOGIN_ATTEMPTS の値
無制限 - 接続しているユーザーは、失敗したログイン試行回数を無制限にすることがあります。
PASSWORD_LOCK_TIME は、サーバーが FAILED_LOGIN_ATTEMPTSの ためにロックされたアカウントのロックを解除するまでの時間を指定します サポートされる値は次のとおりです。
0以上 数値 。 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULTプロファイルで指定されたPASSWORD_LOCK_TIMEの値。
無制限 -アカウントはデータベーススーパーユーザーによって手動でロック解除されるまでロックされます。
PASSWORD_LIFE_TIMEは、ユーザーに新しいパスワードを入力する前に現在のパスワードを使用する日数を指定します。 PASSWORD _ LIFE _ TIME句を使用する場合は、 PASSWORD _ GRACE _ TIME句を含めて、ロールによる接続が拒否されるまでにパスワードが期限切れになってから経過する日数を指定します。 PASSWORD _ GRACE _ TIMEが指定されていない場合、パスワードはPASSWORD _ GRACE _ TIMEのデフォルト値で指定された日に期限切れになり、ユーザーは新しいパスワードが提供されるまでコマンドを実行できなくなります。サポートされる値は次のとおりです。
0 以上 数値 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_LIFE_TIME の値
無制限 - パスワードの有効期限はありません。
PASSWORD_GRACE_TIME パスワードが期限切れになった後、ユーザがパスワードを変更するまでの猶予期間の長さを示します。猶予期間が切れると、ユーザーは接続を許可されますが、期限切れのパスワードを更新するまでコマンドを実行することはできません 。サポートされる値は次のとおりです。
0 以上 数値 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_GRACE_TIME の値
無制限 - 猶予期間は無限です。
PASSWORD_REUSE_TIME、ユーザーがパスワードを使用するまで待機する日数を指定ます。 PASSWORD _ REUSE _ TIMEPASSWORD _ REUSE _ MAXパラメーターは、一緒に使用するためのものです。これらのパラメータの1つに有限値を指定し、他のパラメータを無制限に指定すると 、古いパスワードを決して再利用することはできません。両方のパラメータがUNLIMITEDに設定されている場合は、パスワードの再利用に制限はありません。サポートされる値は次のとおりです。
0 以上 数値 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_REUSE_TIME の値
無制限 - パスワードは制限なしで再利用できます。
PASSWORD_REUSE_MAX、パスワードを再利用できるようにするために必要なパスワードの変更回数を指定します。 PASSWORD _ REUSE _ TIMEPASSWORD _ REUSE _ MAXパラメーターは、一緒に使用するためのものです。これらのパラメータの1つに有限値を指定し、他のパラメータを無制限に指定すると 、古いパスワードを決して再利用することはできません。両方のパラメータがUNLIMITEDに設定されている場合は、パスワードの再利用に制限はありません。サポートされる値は次のとおりです。
0 以上 INTEGER
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_REUSE_MAX の値
無制限 - パスワードは制限なしで再利用できます。
PASSWORD_VERIFY_FUNCTIONはパスワードの複雑さを指定します。サポートされる値は次のとおりです。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_VERIFY_FUNCTION の値
次の例では、 acctg_profile という名前のプロファイルを変更します
ALTER PROFILE acctg_profile
LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1;
 
ログインロールがサーバへの接続を試みると、 acctg_profileは失敗した接続試行回数をカウントします。このプロファイルでは、ユーザーが3回の試行で正しいパスワードで認証されなかった場合、そのアカウントは1日ロックされるように指定されています。
次の例では、名前の変更 payables_profileacctg_profileを
ALTER PROFILE acctg_profile RENAME TO payables_profile;
 
 
 
2.3.4 ALTER QUEUE
Advanced Serverには、Oracleによって提供されていない追加の構文が ALTER QUEUE SQL コマンド。この構文は、 DBMS _ AQADMパッケージに関連して使用できます。
ALTER QUEUE - スーパーユーザーまたは aq _ administrator _ ロール 特権を 持つユーザーが キューの属性を変更できるようにします。
シノプシス
このコマンドは、4つの形式で使用できます。このコマンドの最初の形式は、キューの名前を変更します。
ALTER QUEUE queue_name RENAME TO new _ name
パラメーター
キュー名
名前(オプションとして スキーマ修飾された)
リネーム
RENAMEを 含める TO 句と、キューの名前を変更するキューの新しい名前。
新しい名前
キューの新しい名前。
2番目の形式の ALTER QUEUEコマンドは、キューの属性を変更します。
ALTER QUEUE キュー _ SET [({ オプション _ オプション _ } [、 SET オプション _ 名前
パラメーター
キュー名
名前(オプションとして スキーマ修飾された)
SET句とオプション _ name / option _ valueのペアを含めて 、キューの属性を変更します。
オプション _ 名前option_value
新しいキューに関連付けるオプションの名前および対応するオプションの値。重複するオプション名を指定すると、サーバーはエラーを返します。
場合は オプション _ 名です 再試行では、デキューを試行できる回数を表す整数を提供します。
オプション _ nameretrydelayの 場合 、秒単位の遅延を表す倍精度値を指定します。
場合は オプション _ 名が 保持され秒単位で保持時間を表し、倍精度値を提供します。
ALTER QUEUEコマンドの3番目の形式を使用して、特定のキューでエンキューおよび/またはデキューを有効または無効にします。
ALTER QUEUE キュー _ ACCESS {START | STOP} [FOR {エンキュー|デキュー}] [NOWAIT]
パラメーター
キュー名
名前(オプションとして スキーマ修飾された)
アクセス
特定のキューでエンキューおよび/またはデキューを有効または無効にするには、 ACCESSキーワードを含めます。
スタート|やめる
STARTおよびSTOPキーワードを使用して 、キューの希望の状態を示します。
FORエンキュー|デキュー
FOR句を使用して、指定されたキューのエンキューまたはデキューの状態を指定するかどうかを指定します。
NOWAIT
キューの状態を変更する前に、未処理のトランザクションの完了をサーバーが待たないように指定するに は、 NOWAIT キーワードを 組み込み ます。 STOP アクセス 指定するときに NOWAIT キーワード にのみ使用することができます NOWAIT ACCESS STARTで 指定されている 場合、サーバーはエラーを戻します
4番目のフォームを使用して 、特定のキューのコールバック詳細 ADDまたはDROPします。
ALTER QUEUE キュー _ {ADD | DROP} CALL TO location _ name [WITH コールバック _ オプション ]
パラメーター
キュー名
名前(オプションとして スキーマ修飾された)
追加|ドロップ
キューのコールバックの詳細を追加または削除するには、 ADDキーワードまたはDROPキーワードを含めます。
場所の名前
location _ nameは、コールバックプロシージャの名前を指定します。
コールバック _ オプション
コールバック _ オプション コンテキストとすることができます。この句を含めるときはRAW値を指定してください。
次の例では、キューの名前 work_queue_east から work_order 変更し ます。
ALTER QUEUE work_queue_east RENAME TO work_order;
次の例では、再試行回数を100回、再試行間の遅延を2秒、キューからデキューされたメッセージを10秒間に保持する時間を設定して、 work_order という名前のキューを変更します
ALTER QUEUE work_order SET (retries 100, retrydelay 2, retention 10);
次のコマンドは、という名前のキューにエンキューとデキューを有効 work_order:
ALTER QUEUE work_order ACCESS START;
ALTER QUEUE work_order ACCESS START FOR enqueue;
ALTER QUEUE work_order ACCESS START FOR dequeue;
次のコマンドは、というキューにエンキューとデキューを無効にする 作業 _
ALTER QUEUE work_order ACCESS STOP NOWAIT;
ALTER QUEUE work_order ACCESS STOP FOR enqueue;
ALTER QUEUE work_order ACCESS STOP FOR dequeue;
関連項目
CREATE QUEUE DROP QUEUE
 
2.3.5 ALTER QUEUE TABLE
Advanced Serverには、 ALTER QUEUE SQL コマンドで 追加の構文(Oracleでは提供されていません)が含まれています 。この構文はDBMS_AQADMパッケージに関連し使用できます。
ALTER QUEUE TABLE - 既存のキュー表を変更します。
シノプシス
ALTER QUEUE TABLE使用して 、既存のキュー表の名前を変更します。
ALTER QUEUE TABLE name RENAME TO new _ name
説明
ALTER TABLE QUEUEは、 スーパーユーザーまたは 水溶液 _ _ 管理者の 役割の 権限 を持つユーザーは 、既存のキュー表の名前を変更する こと できます
パラメーター
名前(オプションとして スキーマ修飾された)既存のキュー表を削除します。
新しい名前
キュー表の新しい名前。
キュー表の名前を wo _ table _east から work_order_tableに 変更するには、 次の ようにし ます
ALTER QUEUE TABLE wo_queue_east RENAME TO work_order_table;
関連項目
CREATE QUEUE TABLE DROP QUEUE TABLE
 
 
 
2.3.6 ALTER ROLE ...によって識別される
ALTER ROLE - データベースロールに関連付けられたパスワードを変更する
シノプシス
ALTER ROLE role_name IDENTIFIED BY password
[REPLACE prev_password ]
説明
CREATEROLE権限のないロールは、このコマンドを使用して自分のパスワードを変更できます。特権のないロールには、 PASSWORD _ VERIFY _ FUNCTIONがそのプロファイルでNULL でなければREPLACE句と以前のパスワードを含める必要がありますREPLACE句を非スーパーユーザーが使用すると、サーバーは既存のパスワードと比較し、パスワードが一致しない場合はエラーを発生させます。
データベースのスーパーユーザーは、このコマンドを使用して、任意のロールに関連付けられたパスワードを変更できます。スーパーユーザーが REPLACE句を含む場合 、その句は無視されます。前のパスワードの値が一致していてもエラーは発生しません。
パスワードが変更される ロールにSUPERUSER属性がある場合、スーパーユーザーはこのコマンドを発行する必要があります。 CREATEROLE属性を持つロールは、このコマンドを使用して、スーパーユーザーではないロールに関連付けられたパスワードを変更できます。
パラメーター
ロール名
パスワードを変更する役割の名前。
パスワード
ロールの新しいパスワード。
prev_password
ロールの以前のパスワード。
役割のパスワードを変更するには:
ALTER ROLE john IDENTIFIED BY xyRP35z REPLACE 23PJ74a;
 
2.3.7 ALTER ROLE - データベース・リンクおよびDBMS_RLS権限の管理
Advanced Serverには、 ALTER ROLEコマンド用の追加構文(Oracleでは提供されていません)が含まれています 。この構文は、Oracleデータベースと互換性のあるデータベース・リンクの作成および削除、および細かいアクセス制御( DBMS_RLSを使用)に関連する権限を割り当てる場合に役立ちます。
CREATE DATABASE LINK
保持しているユーザー CREATE DATABASE LINK 権限は、プライベート・データベース・リンクを作成することができます。次のALTER ROLEコマンドは、指定されたロールがプライベート・データベース・リンクを作成できるようにAdvanced Serverロールに権限を付与します。
ALTER ROLE role _ name
WITH [CREATEDBLINK | CREATE DATABASE LINK]をクリックします。
このコマンドは、次の機能と同等です。
ロール _ へのデータベースリンクの作成を許可する
特権を取り消すには、次のコマンドを使用します。
ALTER ROLE role _ name
WITH [NOCREATEDBLINK | NO CREATE DATABASE LINK]
ご注意: CREATEDBLINKNOCREATEDBLINKキーワードは廃止予定の構文と考えるべきです。 CREATE DATABASE LINKおよびNO CREATE DATABASE LINK構文オプションを使用することをお勧めします。
パブリックデータベースリンクを作成する
保持しているユーザー CREATE PUBLIC DATABASE LINK 権限は、パブリック・データベース・リンクを作成することができます。次のALTER ROLEコマンドは、指定されたロールがパブリック・データベース・リンクを作成できるようにするAdvanced Serverロールに権限を付与します。
ALTER ROLE role _ name
WITH [CREATEPUBLICDBLINK |パブリックデータベースリンクの作成]
このコマンドは、次の機能と同等です。
ロール _ へのパブリックデータベースリンクの作成を許可する
特権を取り消すには、次のコマンドを使用します。
ALTER ROLE role _ name
WITH
[NOCREATEPUBLICDBLINK | NO PUBLIC DATABASEの リンクを 作成しません ]
ご注意: CREATEPUBLICDBLINKNOCREATEPUBLICDBLINKキーワードは廃止予定の構文と考えるべきです。私たちは、PUBLIC DATABASE LINKの構文オプションをCREATE PUBLIC DATABASEの リンクを 作成、NO使用をお勧めします。
公衆データベースリンクを抹消する
保持しているユーザー DROP PUBLIC DATABASE LINK 権限は、パブリック・データベース・リンクをドロップすることがあります。次のALTER ROLEコマンドは、指定されたロールがパブリック・データベース・リンクを削除できるようにするAdvanced Serverロールに権限を付与します。
ALTER ROLE role _ name
WITH [DROPPUBLICDBLINK
| DROP PUBLIC DATABASE LINK]
このコマンドは、次の機能と同等です。
ロール _ 名に PUBLIC DATABASE LINKを付与する
特権を取り消すには、次のコマンドを使用します。
ALTER ROLE role _ name
WITH
[NODROPPUBLICDBLINK | NO DROP PUBLIC DATABASEの LINKません]
ご注意: DROPPUBLICDBLINKNODROPPUBLICDBLINKキーワードは廃止予定の構文と考えるべきです。私たちは、DROP PUBLIC DATABASEの LINKNO DROP PUBLIC DATABASE LINKの構文オプションを使用することをお勧めします。
退出のためのアクセスポリシー
保持しているユーザー EXEMPT ACCESS POLICY 権限は、ファイングレイン・アクセス・コントロール(DBMS_RLS)ポリシーを免除されています。これらの権限を持つユーザーは、 DBMS_RLSポリシーで制約された表の行をすべて表示または変更できます。次のALTER ROLEコマンドは、指定されたDBMS_RLSポリシーから指定されたロールを除外する Advanced Serverロールに権限を付与します。
ALTER ROLE role_name
WITH [POLICYEXEMPT |免除ポリシーを守る]
このコマンドは、次の機能と同等です。
ロール名へのアクセス許可の付与
特権を取り消すには、次のコマンドを使用します。
ALTER ROLE role_name
WITH [NOPOLICYEXEMPT |退出時のアクセスポリシーなし]
ご注意: POLICYEXEMPTNOPOLICYEXEMPTキーワードは廃止予定の構文と考えるべきです。我々はEXEMPTアクセスポリシーNO EXEMPTアクセスポリシーの構文オプションを使用することをお勧めします。
関連項目
CREATE ROLE DROP ROLE GRANT REVOKE SET ROLE
 
2.3.8 ALTER SEQUENCE
ALTER SEQUENCE - シーケンスジェネレータの定義を変更する
シノプシス
ALTER SEQUENCE name [ INCREMENT BY increment ]
[ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
[ CACHE cache | NOCACHE ] [ CYCLE ]
説明
ALTER SEQUENCEは、既存のシーケンスジェネレータのパラメータを変更します。 ALTER SEQUENCEコマンドで特に設定されていないパラメータは、その前の設定を保持します。
パラメーター
変更されるシーケンスの名前(スキーマ修飾名も可)
インクリメント
句の 増分 BY INCREMENTはオプションです。正の値は昇順のシーケンスを、負の値は降順のシーケンスを作成します。指定されていない場合は、古い増分値が維持されます。
最小値
オプションの節 MINVALUE minvalue は、シーケンスが生成できる最小値を決定します。指定しない場合、現在の最小値は維持されます。キーワード NO MINVALUEを 使用して、この動作を それぞれ昇順および降順 のデフォルトの1および-2 63 -1に 戻すこと ができ ます が、この用語は Oracleデータベースと互換性 がありません
マックスバリュー
オプション節 MAXVALUE maxvalue は、シーケンスの最大値を決定します。指定しない場合、現在の最大値は維持されます。キーワード NO MAXVALUEを 使用して 、昇順および降順のそれぞれに対して この動作をデフォルトの2 63 -1および-1に 戻すこと ができ ます が、この用語は Oracleデータベースと互換性 がありません
キャッシュ
オプションの CACHE キャッシュ は、より早くアクセスできるように、事前割り当てされ、メモリに格納されるシーケンス番号の数を指定します。最小値は1です(一度に生成できる値は1つのみ、つまり NOCACHE )。未指定の場合、古いキャッシュ値が維持されます。
サイクル
MAXVALUE または MINVALUEが 昇順で到達したか、それぞれ降順された 際に CYCLE オプションは、シーケンスがラップアラウンドすることができます 限界に達した場合、生成された次の番号は、それぞれ、MINVALUE または MAXVALUE であろう 。指定しなかった場合、古いサイクルの動作は維持されます。キーワードNO CYCLEを使用してシーケンスを変更してリサイクルしないようにすることもできますが、この用語はOracleデータベースと互換性がありません。
ノート
同じシーケンスから数値を取得する同時トランザクションのブロッキングを回避するために、 ALTER SEQUENCEはロールバックされません。変更はすぐに有効になり、元に戻すことはできません。
ALTER SEQUENCEは、事前割り振り済み(キャッシュされた)順序値を持つバックエンド(現行のもの以外)のNEXTVAL結果に直ちに影響を与えません。変更されたシーケンスパラメータに気づく前に、すべてのキャッシュされた値を使い切ります。現在のバックエンドはすぐに影響を受けます。
シーケンス serial のインクリメントとキャッシュの値を変更します
ALTER SEQUENCE serial INCREMENT BY 2 CACHE 5;
関連項目
CREATE SEQUENCE DROP SEQUENCE
 
2.3.9 ALTER SESSION
ALTER SESSION - 実行時パラメータを変更する
シノプシス
ALTER SESSION SET name = value
説明
ALTER SESSIONコマンドは実行時設定パラメータを変更します。 ALTER SESSIONは、現在のセッションで使用されている値にのみ影響します。これらのパラメータの一部は、 Oracle構文との互換性のためにのみ提供されており、 Advanced Serverのランタイム動作には何の影響も与えません。他のユーザーは、対応するAdvanced Serverデータベース・サーバーのランタイム構成パラメーターを変更します。
パラメーター
設定可能なランタイムパラメータの名前。使用可能なパラメータは以下のとおりです。
パラメータの新しい値。
構成パラメータ
次の構成パラメータは、 ALTER SESSIONコマンドを使用して変更できます
NLS_DATE_FORMAT(文字列)
あいまいな日付入力値を解釈するための規則と同様に、日付と時刻の値の表示形式を設定します。 Advanced Server datestyleランタイム構成パラメーターの設定と同じ効果があります。
NLS_LANGUAGE(文字列)
メッセージが表示される言語を設定します。 Advanced Serverの lc_messagesランタイム構成パラメーターの設定と同じ効果があります。
NLS_LENGTH_SEMANTICS(文字列)
有効な値は BYTEおよびCHARです。デフォルトはBYTEです。このパラメータは、構文の互換性のためにのみ提供され、Advanced Serverでは無効です。
OPTIMIZER_MODE(文字列)
クエリのデフォルト最適化モードを設定します。有効な値は、 ALL_ROWSCHOOSEFIRST_ROWSFIRST_ROWS_10FIRST_ROWS_100 、およびFIRST_ROWS_1000です。デフォルトはCHOOSEです。このパラメータは、 Advanced Serverで実装されています
QUERY_REWRITE_ENABLED(文字列)
有効な値は、 TRUEFALSE 、およびFORCEです。デフォルトはFALSEです。このパラメータは、構文の互換性のためにのみ提供され、 Advanced Serverでは無効です。
QUERY_REWRITE_INTEGRITY(文字列)
有効な値は ENFORCEDTRUSTED 、およびSTALE_TOLERATEDです。デフォルトはENFORCEDです。このパラメータは、構文の互換性のためにのみ提供され、 Advanced Serverでは無効です。
UTF-8エンコーディングで言語をUS Englishに設定します。この例では、値 en_US.UTF-8Advanced Serverに指定する必要がある形式であることに注意してください 。このフォームは、 Oracleデータベースと互換性がありません。
ALTER SESSION SET NLS_LANGUAGE = 'en_US.UTF-8';
日付表示形式を設定します。
ALTER SESSION SET NLS_DATE_FORMAT = 'dd/mm/yyyy';
 
2.3.10 ALTER TABLE
ALTER TABLE - テーブルの定義を変更する
シノプシス
ALTER TABLE name
action [, ...]
ALTER TABLE name
RENAME COLUMN column TO new_column
ALTER TABLE name
RENAME TO new_name
どこ アクションは、次のいずれかです。
ADD column type [ column_constraint [ ... ] ]
DROP COLUMN column
ADD table_constraint
DROP CONSTRAINT constraint_name [ CASCADE ]
説明
ALTER TABLEは、既存のテーブルの定義を変更します。いくつかのサブフォームがあります:
ADD タイプ
このフォームは、 CREATE TABLE と同じ構文を使用してテーブルに新しい列を追加します
DROP COLUMN
このフォームは、テーブルから列を削除します。列を含む索引および表の制約も自動的に削除されます。
ADD table_constraint
このフォームは、 CREATE TABLE と同じ構文を使用してテーブルに新しい制約を追加します
DROP CONSTRAINT
このフォームは、テーブルの制約を削除します。現在、テーブルの制約には一意の名前を付ける必要はないため、指定された名前に一致する制約が複数存在する可能性があります。すべての一致する制約は削除されます。
リネーム
RENAME形態は、テーブルの名前(またはインデックス、シーケンス、またはビュー)または表の個々の列の名前を変更します。保存されたデータには何の影響もありません。
ALTER TABLE を使用するには、表を所有している必要があります
パラメーター
変更する既存のテーブルの名前(おそらくスキーマ修飾名)。
カラム
新しい列または既存の列の名前。
new_column
既存の列の新しい名前。
新しい名前
テーブルの新しい名前。
タイプ
新しい列のデータ型。
table_constraint
テーブルの新しいテーブル制約。
constraint_name
削除する既存の制約の名前。
カスケード
ドロップされた制約に依存するオブジェクトを自動的にドロップします。
ノート
ADD COLUMN を呼び出すと、表の既存の行はすべて、列のデフォルト値( DEFAULT句が指定されていない場合はNULL)で初期化されます。 NULL以外の既定値を持つ列を追加するには、テーブル全体を書き換える必要があります。これは、大きなテーブルにはかなりの時間がかかることがあります。一時的に2倍のディスク容量が必要になります。 CHECKまたはNOT NULL制約を追加するには、既存の行が制約を満たしていることを確認するために表をスキャンする必要があります。
DROP COLUMNのフォームは、物理的に列を削除、単にSQL操作にそれが見えなくなりません。表の後続の挿入操作および更新操作では、その列にヌル値が保管されます。したがって、列を削除することは迅速ですが、削除された列が占有する領域が再利用されないため、表のディスク上のサイズはすぐには減少しません。スペースは、既存の行が更新されると時間の経過とともに再利用されます。
システムカタログ表の一部を変更することはできません。 CREATE TABLEを 参照して ください。 有効なパラメータの詳細については、
VARCHAR2 型の列を表に追加するには、次のようにします。
ALTER TABLE emp ADD address VARCHAR2(30);
テーブルから列を削除するには:
ALTER TABLE emp DROP COLUMN address;
既存の列の名前を変更するには:
ALTER TABLE emp RENAME COLUMN address TO city;
既存のテーブルの名前を変更するには:
ALTER TABLE emp RENAME TO employee;
テーブルにチェック制約を追加するには:
ALTER TABLE emp ADD CONSTRAINT sal_chk CHECK (sal > 500);
テーブルからチェック制約を削除するには:
ALTER TABLE emp DROP CONSTRAINT sal_chk;
関連項目
CREATE TABLE DROP TABLE
 
2.3.11 ALTER TABLESPACE
ALTER TABLESPACE - 表領域の定義を変更する
シノプシス
ALTER TABLESPACE name RENAME TO newname
説明
ALTER TABLESPACEは、表領域の定義を変更します。
パラメーター
既存の表領域の名前。
新しい名前
表スペースの新しい名前。この名前はシステム表スペース用に予約されているため、 新しい名前は pg_始めることはできません
表領域 empspaceの 名前employee_spaceに変更します。
ALTER TABLESPACE empspace RENAME TO employee_space;
関連項目
DROP TABLESPACE
 
2.3.12 ALTER USER ... IDENTIFIED BY
ALTER USER - データベースユーザーアカウントを変更する
シノプシス
ALTER USER role_name IDENTIFIED BY password REPLACE prev_password
説明
CREATEROLE権限のないロールは、このコマンドを使用して自分のパスワードを変更できます。特権のないロールには、 PASSWORD _ VERIFY _ FUNCTIONがそのプロファイルでNULL でなければREPLACE句と以前のパスワードを含める必要がありますREPLACE句を非スーパーユーザーが使用すると、サーバーは既存のパスワードと比較し、パスワードが一致しない場合はエラーを発生させます。
データベースのスーパーユーザーは、このコマンドを使用して、任意のロールに関連付けられたパスワードを変更できます。スーパーユーザーが REPLACE句を含む場合 、その句は無視されます。前のパスワードの値が一致していてもエラーは発生しません。
パスワードが変更される ロールにSUPERUSER属性がある場合、スーパーユーザーはこのコマンドを発行する必要があります。 CREATEROLE属性を持つロールは、このコマンドを使用して、スーパーユーザーではないロールに関連付けられたパスワードを変更できます。
パラメーター
ロール名
パスワードを変更する役割の名前。
パスワード
ロールの新しいパスワード。
prev_password
ロールの以前のパスワード。
ユーザーパスワードを変更する:
ALTER USER john IDENTIFIED BY xyRP35z REPLACE 23PJ74a;
関連項目
CREATE USER DROP USER
 
2.3.13 ALTER USER | ROLE ...プロファイル管理の規約
ALTER USER | ROLE
シノプシス
ALTER USER|ROLE name [[WITH] option[…]
どこ オプションは、 次の互換性の句を指定できます。
PROFILE profile_name
| ACCOUNT {LOCK|UNLOCK}
| PASSWORD EXPIRE [AT ' timestamp ']
または オプション は、次の互換性のない節に する ことができます。
| PASSWORD SET AT ' timestamp '
| LOCK TIME ' timestamp '
| STORE PRIOR PASSWORD { 'password' 'timestamp } [, ...]
Advanced ServerでサポートされているALTER USERコマンドまたはALTER ROLEコマンドの管理句については 、次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-commands.html
データベースのスーパーユーザーだけが ALTER を使用できます ユーザー | プロファイル管理を実施する ROLE この条項は、次のような行動を強制します。
事前定義されたプロファイルを役割に関連付ける、または事前定義されたプロファイルがユーザーに関連付けられていることを変更するには、 PROFILE句とprofile_name含めます。
ACCOUNT句とLOCKまたはUNLOCKキーワードを含めて、ユーザー・アカウントをロック状態またはロック解除状態にする必要があることを指定します。
インクルードこのロールに割り当てられたプロファイルのTIMEパラメータ _ _ LOCK指定した時刻に役割をロックするLOCK TIME「 タイムスタンプ 句と日付/時刻値を、およびPASSWORDで示される時点で役割のロックを解除します。 LOCK TIMEを ACCOUNT LOCK句とともに使用すると、ロールはACCOUNT UNLOCK句を使用してデータベースのスーパーユーザーのみがロックを解除できます
パスワードを 含める ATの EXPIRE ' timestamp ' キーワードを使用して、ロールに関連付けられたパスワードの有効期限が切れる日時を指定します。 AT を省略すると ' timestamp ' キーワードを入力すると、パスワードはすぐに期限切れになります。
パスワードを 含める セット AT ' timestamp ' キーワードを使用して、パスワード修正日を指定された時間に設定します。
ストアを 含める 先行 パスワード { 'パスワード' 'タイムスタンプ } [、...] 新しいパスワードとパスワードが設定された時刻を追加します。
各ログインロールは1つのプロファイルのみを持つことができます。現在ログイン・ロールに関連付けられているプロファイルを検出するには、 DBA_USERSビューのプロファイル列を問い合せます。
パラメーター
指定されたプロファイルが関連付けられるロールの名前。
パスワード
ロールに関連付けられたパスワード。
プロファイル名
ロールに関連付けられるプロファイルの名前。
タイムスタンプ
条項が適用される日時。 タイムスタンプの 値を指定する場合は 、値を一重引用符で囲みます。
ノート
ALTER USERコマンドまたはALTER ROLEコマンドのPostgres互換の節については、次のPostgreSQLコアのマニュアルを参照してください。
https://www.postgresql.org/docs/11/static/sql-alterrole.html
次のコマンドは、 ALTER USER ... PROFILEコマンドを使用して、 acctgという名前のプロファイルをjohnという名前のユーザーに関連付けます。
ALTER USER john PROFILE acctg_profile;
次のコマンドは、 ALTER ROLE ... PROFILEコマンドを使用して、 acctgという名前のプロファイルをjohnという名前のユーザーに関連付けます。
ALTER ROLE john PROFILE acctg_profile;
 
 
2.3.14 CALL
コール
シノプシス
CALL procedure_name '('[ argument _ list ]')'
説明
プロシージャーを呼び出すには CALLステートメントを使用します。 CALLステートメントを使用するには、 CALLステートメントが呼び出すプロシージャーに対してEXECUTE特権が必要です。
パラメーター
プロシージャ名
procedure_nameは、(オプションでスキーマ修飾された)プロシージャ名です。
argument_list
argument_listは、プロシージャーで必要な引数のカンマ区切りのリストを指定します。 argument_listの各メンバーは、プロシージャーが予期する仮引数に対応することに注意してください。各仮引数は、 INパラメーター、 OUTパラメーター、またはINOUTパラメーターです。
CALL文は、プロシージャによって必要な引数に応じて、いくつかのいずれかの形式を取ることがあります。
CALL update_balance();
CALL update_balance(1,2,3);
 
2.3.15 COMMENT
COMMENT - オブジェクトのコメントを定義または変更する
シノプシス
COMMENT ON
{
TABLE table_name |
COLUMN table_name . column_name
} IS ' text '
説明
COMMENTは、データベースオブジェクトに関するコメントを格納します。コメントを変更するには、同じオブジェクトに対して新しいCOMMENTコマンドを発行します。各オブジェクトには1つのコメント文字列しか格納されません。コメントを削除するには、 テキスト用に空の文字列(空白がない2つの連続した一重引用符)を指定します 。コメントは、オブジェクトがドロップされると自動的に削除されます。
パラメーター
テーブル名
コメントを付けるテーブルの名前。テーブル名はスキーマで修飾されていてもかまいません。
table_name列名
コメントを付ける table_name 内の列の名前 。テーブル名はスキーマで修飾されていてもかまいません。
テキスト
新しいコメント。
ノート
現在のところ、コメントのセキュリティメカニズムはありません。データベースに接続しているすべてのユーザーは、データベース内のオブジェクトのすべてのコメントを見ることができます(ただし、スーパーユーザーのみが所有していないオブジェクトのコメントを変更できます)。 セキュリティ上重要な情報をコメントに入れないでください。
empに コメントを添付します
COMMENT ON TABLE emp IS 'Current employee information';
emp表のempno列にコメントを添付します。
COMMENT ON COLUMN emp.empno IS 'Employee identification number';
これらのコメントを削除します。
COMMENT ON TABLE emp IS '';
COMMENT ON COLUMN emp.empno IS '';
 
2.3.16 COMMIT
COMMIT - 現在のトランザクションをコミットする
シノプシス
COMMIT [ WORK ]
説明
COMMITは現在のトランザクションをコミットします。トランザクションによって行われたすべての変更は、他の人にも見えるようになり、クラッシュが発生した場合でも耐久性が保証されます。
パラメーター
作業
オプションのキーワード - 効果はありません。
ノート
トランザクションを中止するには、ROLLBACKを使用します。トランザクション内でないときにCOMMITを 発行することは問題ありません。
注意: plpgsqlプロシージャでCOMMIT実行すると、ランタイム・スタックにOracleスタイルのSPLプロシージャがある場合はエラーが発生します。
現在のトランザクションをコミットし、すべての変更を永久にするには:
COMMIT;
関連項目
ロールバック ロール バック SAVEPOINT
 
2.3.17 CREATE DATABASE
CREATE DATABASE - 新しいデータベースを作成する
シノプシス
CREATE DATABASE name
説明
CREATE DATABASEは新しいデータベースを作成します。
データベースを作成するには、スーパーユーザーであるか、特別な CREATEDB特権を持っていなければなりません 。通常、作成者は新しいデータベースの所有者になります。 CREATEDB特権を持つ非スーパーユーザーは、所有しているデータベースのみを作成できます。
新しいデータベースは、標準システムデータベース template1を 複製することによって作成されます
パラメーター
作成するデータベースの名前。
ノート
CREATE DATABASEはトランザクションブロック内では実行できません。
データベースディレクトリを初期化 できませんでした」という行に沿ったエラーは、データディレクトリ、フルディスク、またはその他のファイルシステムの問題に対する不十分なアクセス許可に関連している可能性があります。
新しいデータベースを作成するには:
CREATE DATABASE employees;
 
2.3.18 [PUBLIC]データベースリンクの作成
CREATE [PUBLIC] DATABASE LINK - 新しいデータベースリンクを作成します。
シノプシス
CREATE [ PUBLIC ] DATABASE LINK name
CONNECT TO { CURRENT_USER |
username IDENTIFIED BY ' password '}
USING { postgres_fdw ' fdw_connection_string ' |
[ oci ] ' oracle _ connection _ string ' }
説明
CREATE DATABASE LINKは新しいデータベースリンクを作成します。データベース・リンクは、 DELETEINSERTSELECTまたはUPDATEコマンド内のリモート・データベース内の表またはビューへの参照を可能にするオブジェクトです。データベースリンクは、 SQLコマンドで参照されるテーブルまたはビュー名に@ dblinkを追加することによって参照されます。ここで、 dblinkはデータベースリンクの名前です。
データベースリンクは公開または非公開にすることができます。 パブリック・データベース・リンクは、任意のユーザーが使用することができるものです。 プライベート・データベース・リンクは、データベース・リンクの所有者のみが使用できます。 PUBLICオプションを指定すると、パブリックデータベースリンクが作成されます。省略すると、プライベートデータベースリンクが作成されます。
場合は 、CREATE DATABASE LINKコマンドは、データベース・リンク名を与えられ、与えられた接続属性はpg_catalog.edb_dblink、名前のAdvanced Serverのシステムテーブルに格納されています。特定のデータベースリンクを使用する場合、このデータベースリンクを定義するedb_dblinkエントリを含むデータベースをローカルデータベースと呼びます 。接続属性がedb_dblinkエントリ内で定義されているサーバーとデータベースは、 リモートデータベースと呼ばれます
ローカル・データベースに接続しながら、データベース・リンクへの参照を含むSQLコマンドを発行する必要があります。 SQLコマンドが実行されると、適切な認証と接続がリモートデータベースに対して行われ、 @ dblink参照が追加されたテーブルまたはビューにアクセスします。
注:データベース・リンクを使用して、スタンバイ・データベース・サーバー内のリモート・データベースにアクセスすることはできません。スタンバイデータベースサーバーは、高可用性、負荷分散、およびレプリケーションに使用されます。
PostgreSQLデータベースサーバの高可用性、ロードバランシング、およびレプリケーションについては、次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/high-availability.html
注意: Advanced Server 10では、 CREATE DATABASE LINKコマンドは、Oracleバージョン10gリリース2(10.2)、Oracleバージョン11gリリース2(11.2)、およびOracleバージョン12cリリース1(12.1)で使用するためにテストされ、認証されています。
パラメーター
パブリック
任意のユーザーが使用できる公開データベースリンクを作成します。省略された場合、データベースリンクはプライベートであり、データベースリンクの所有者のみが使用できます。
データベースリンクの名前。
ユーザー名
リモート・データベースへの接続に使用されるユーザー名。
現在の使用者
リモートサーバーへの接続を確立するときに、リンクを使用しているロールに関連付けられているユーザーマッピングをAdvanced Serverが使用するように指定するには、 CURRENT_USERインクルードします。
パスワード
username のパスワード
postgres_fdw
リモートのAdvanced Serverデータベースへの接続として外部データラッパー postgres_fdw指定します。 postgres_fdwがデータベースにインストールされていない場合は、 CREATE EXTENSIONコマンドを使用してpostgres_fdwをインストールします。詳細については、PostgreSQL CoreのドキュメントのCREATE EXTENSIONコマンドを参照してください。
https://www.postgresql.org/docs/11/static/sql-createextension.html
fdw_connection_string
postgres_fdw外部データラッパーの接続情報を指定します。
オシ
リモート Oracleデータベースへの接続を指定します。これは、Advanced Serverのデフォルト動作です。
oracle_connection_string
oci接続の接続情報を指定します。
ノート
非パブリック・データベース・リンクを作成するには、 CREATE DATABASE LINK権限が必要です。パブリック・データベース・リンクを作成するには、 CREATE PUBLIC DATABASE LINK権限が必要です。
oci-dblinkのためのOracle Instant Clientの設定
oci-dblinkを使用するには、データベース・リンクを作成するAdvanced Serverデータベースを実行しているホストに、Oracleインスタント・クライアントをダウンロードしてインストールする必要があります。
インスタントクライアントは、次のサイトからダウンロードできます。
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
Linux用Oracle Instant Client
次の手順は、Advanced Serverを実行するLinuxホストに適用されます。
Advanced Serverを実行しているLinuxホストにlibaioライブラリ(Linux固有の非同期I / O機能)がインストールされていることを確認してください
libaioのライブラリは、以下のコマンドでインストールすることができます。
yum install libaio
ダウンロードしたOracleインスタント・クライアントに 、バージョン番号サフィックスがないlibclntsh.so という名前のファイルが含まれていない場合は、ライブラリ・ファイルのダウンロード・バージョンを指すlibclntsh.soというシンボリック・リンクを作成する必要があります。インスタントクライアントディレクトリに移動し、次のコマンドを実行します。
ln -s libclntsh.so。 バージョン libclntsh.so
どこ バージョンは libclntsh.soライブラリのバージョン番号です。例えば:
ln -s libclntsh.so.12.1 libclntsh.so
リモートOracleデータベースへのデータベース・リンクを参照する SQLコマンドを実行する場合 、Advanced ServerはOracleインスタント・クライアント・ライブラリがAdvanced Serverホスト上のどこにあるかを知る必要があります。
LD _ _ LIBRARY PATH環境変数には、libclntsh.soファイルを含むOracleクライアントのインストールディレクトリへのパスを含める必要があります。たとえば、 libclntsh.soを含むインストールディレクトリが/ tmp / instantclientであると仮定します。
エクスポートLD_LIBRARY_PATH = / tmp / instantclient:$ LD_LIBRARY_PATH
注意:このLD _ _ LIBRARY にpg_ctlユーティリティは、Advanced Serverを起動または再起動するために実行されたときにPATH環境変数の設定が有効でなければなりません。
現在のセッションpg_ctlを直接起動してAdvanced Serverを起動または再起動するユーザーアカウント(たとえば enterprisedbとして実行している場合は、 pg_ctlを呼び出す前に必ずLD_LIBRARY_PATHを設定してください
LD_LIBRARY_PATHは、 enterprisedbユーザーアカウントのホームディレクトリの下の.bash_profileファイル内で設定できます(つまり、 file〜enterprisedb / .bash_profile内にLD_LIBRARY_PATHを設定します)。このようにして、 enterprisedbとしてログインすると、 LD_LIBRARY_PATHが設定されます。
ただし、 systemctlまたはserviceコマンドでLinuxサービス・スクリプトを使用して Advanced Serverを起動または再起動している場合は、サービススクリプト内でLD_LIBRARY_PATHを設定して、スクリプトがpg_ctlユーティリティーを呼び出すときに有効にする必要があります。
LD_LIBRARY_PATH設定を含むように変更する必要がある特定のスクリプトファイルは 、Advanced Serverのバージョン、インストールされているLinuxシステム、およびグラフィカルインストーラまたはRPMパッケージと共にインストールされたかどうかによって異なります。
スタートアップ環境に影響を与えるサービススクリプトを調べるには、適切なバージョンの EDB Postgres Advanced Serverインストールガイド参照してください 。インストールガイドは、次の場所にあります。
https://www.enterprisedb.com/resources/product-documentation
Windows用Oracle Instant Client
次の手順は、Advanced Serverを実行するWindowsホストに適用されます。
リモートOracleデータベースへのデータベース・リンクを参照する SQLコマンドを実行する場合 、Advanced ServerはOracleインスタント・クライアント・ライブラリがAdvanced Serverホスト上のどこにあるかを知る必要があります。
oci.dllファイルを含むOracleクライアントインストールディレクトリを含めるように、Windows PATHシステム環境変数を設定します。
代わりに、 postgresqlに oracle _ home構成パラメータの値を設定できます。 confファイル。 oracle _ home構成パラメータで指定された値は、Windows PATH環境変数よりも優先されます。
設定するには、 PostgreSQLのOracle _ ホーム設定パラメータを。 confファイルを編集し、次の行を追加してファイルを編集します。
oracle_home = ' lib_directory '
oci を含むWindowsディレクトリの名前に 置き換えてくださいlib_directoryのためのdll 。例えば:
oracle_home = 'C:/ tmp / instantclient_10_2'
設定後 PATH環境変数またはOracle _ 家庭の構成パラメータを、変更を有効にするには、サーバーを再起動する必要があります。 Windowsサービスコンソールからサーバーを再起動します。
注: tnsnames.oraがフェイルオーバー・モードで構成され、クライアント:サーバーの障害が発生すると、セカンダリ・サーバー(通常はバックアップ・サーバー)とのクライアント接続が確立されます。その後、プライマリサーバーが再開すると、クライアントは新しいセッションが確立されるまでセカンダリサーバーへの接続を保持します。新しいクライアント接続はプライマリサーバと自動的に確立されます。プライマリ・サーバとセカンダリ・サーバが同期していない場合、セカンダリ・サーバへの接続を確立したクライアントと、後でプライマリ・サーバに接続したクライアントが異なるデータベース・ビューを参照する可能性があります。
oci-dblinkデータベースリンクの作成
次の例は、 CREATE DATABASE LINKコマンドを使用して、Advanced Serverのインスタンスをoci-dblink接続を介してOracleサーバーに接続するデータベース・リンク( chicago )を作成する方法を示しています。接続情報はAdvanced Serverに対して、パスワードがmypasswordのユーザーadminとしてOracleにログインするように指示します。 ociオプションを含めると、これはoci-dblink接続であることがAdvanced Serverに伝えられます。接続文字列'//127.0.0.1/acctg'は、サーバーのアドレスとデータベースの名前を指定します。
CREATE DATABASE LINK chicago
CONNECT TO admin IDENTIFIED BY 'mypassword'
USING oci '//127.0.0.1/acctg';
注:接続文字列に(IPアドレスの代わりに)ホスト名を指定することができます。
postgres_fdwデータベースリンクの作成
次の例は、 CREATE DATABASE LINKコマンドを使用して、 postgres_fdw外部データラッパー接続を介してAdvanced Serverのインスタンスを別のAdvanced Serverインスタンスに接続するデータベースリンク( bedford )を作成する方法を示しています。接続情報はAdvanced Serverにパスワードがmypasswordのユーザーadminとしてログインするように指示します。 postgres_fdwオプションを含めると、これはpostgres_fdw接続であることがAdvanced Serverに伝えられます。接続文字列'host = 127.0.0.1 port = 5444 dbname = marketing'は、データベースのサーバーアドレスと名前を指定します。
CREATE DATABASE LINK bedford
CONNECT TO admin IDENTIFIED BY 'mypassword'
USING postgres_fdw 'host=127.0.0.1 port=5444 dbname=marketing';
注:接続文字列に(IPアドレスの代わりに)ホスト名を指定することができます。
データベースリンクの使用
次の例は、Advanced Serverでデータベース・リンクを使用してOracleデータベースに接続する方法を示しています。この例では、 Advanced Serverサンプル・アプリケーションのemp表のコピーが Oracleデータベースに作成され、サンプル・アプリケーションを含む2番目のAdvanced Serverデータベース・クラスタがポート5443で接続を受け入れていると想定しています。
ポート1521の127.0.0.1にあるxeというOracleデータベースにoralink という名前のパブリック・データベース・リンクを作成し ます 。ユーザー名、 edbおよびパスワード、 パスワードを使用してOracleデータベースに接続します
CREATE PUBLIC DATABASE LINK oralink CONNECT TO edb IDENTIFIED BY 'password' USING '//127.0.0.1:1521/xe';
データベースリンク、 oralinkを使用して、 Oracleデータベースのempテーブルに対して SELECTコマンドを発行します。
SELECT * FROM emp@oralink;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+--------------------+------+------+--------
7369 | SMITH | CLERK | 7902 | 17-DEC-80 00:00:00 | 800 | | 20
7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600 | 300 | 30
7521 | WARD | SALESMAN | 7698 | 22-FEB-81 00:00:00 | 1250 | 500 | 30
7566 | JONES | MANAGER | 7839 | 02-APR-81 00:00:00 | 2975 | | 20
7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1250 | 1400 | 30
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850 | | 30
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450 | | 10
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 00:00:00 | 3000 | | 20
7839 | KING | PRESIDENT | | 17-NOV-81 00:00:00 | 5000 | | 10
7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500 | 0 | 30
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 00:00:00 | 1100 | | 20
7900 | JAMES | CLERK | 7698 | 03-DEC-81 00:00:00 | 950 | | 30
7902 | FORD | ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000 | | 20
7934 | MILLER | CLERK | 7782 | 23-JAN-82 00:00:00 | 1300 | | 10
(14 rows)
ポート5444上で実行されているホスト192.168.2.22にあるedbという名前のAdvanced Serverデータベースに fdwlink というプライベート・データベース・リンクを作成します。username、 enterprisedbおよびpasswordというパスワードでAdvanced Serverデータベースに接続します
CREATE DATABASE LINK fdwlink CONNECT TO enterprisedb IDENTIFIED BY 'password' USING postgres_fdw 'host=192.168.2.22 port=5444 dbname=edb';
ローカルのedb_dblinkシステム・テーブルからデータベース・リンク oralinkおよびfdwlinkの 属性を表示します
SELECT lnkname, lnkuser, lnkconnstr FROM pg_catalog.edb_dblink;
 
lnkname | lnkuser | lnkconnstr
---------+--------------+----------------------------------------
oralink | edb | //127.0.0.1:1521/xe
fdwlink | enterprisedb |
(2 rows)
Advanced Serverデータベースのdeptテーブルを使用して、 Oracleデータベースのempテーブルの結合を実行します。
SELECT d.deptno, d.dname, e.empno, e.ename, e.job, e.sal, e.comm FROM emp@oralink e, dept@fdwlink d WHERE e.deptno = d.deptno ORDER BY 1, 3;
 
deptno | dname | empno | ename | job | sal | comm
--------+------------+-------+--------+-----------+------+------
10 | ACCOUNTING | 7782 | CLARK | MANAGER | 2450 |
10 | ACCOUNTING | 7839 | KING | PRESIDENT | 5000 |
10 | ACCOUNTING | 7934 | MILLER | CLERK | 1300 |
20 | RESEARCH | 7369 | SMITH | CLERK | 800 |
20 | RESEARCH | 7566 | JONES | MANAGER | 2975 |
20 | RESEARCH | 7788 | SCOTT | ANALYST | 3000 |
20 | RESEARCH | 7876 | ADAMS | CLERK | 1100 |
20 | RESEARCH | 7902 | FORD | ANALYST | 3000 |
30 | SALES | 7499 | ALLEN | SALESMAN | 1600 | 300
30 | SALES | 7521 | WARD | SALESMAN | 1250 | 500
30 | SALES | 7654 | MARTIN | SALESMAN | 1250 | 1400
30 | SALES | 7698 | BLAKE | MANAGER | 2850 |
30 | SALES | 7844 | TURNER | SALESMAN | 1500 | 0
30 | SALES | 7900 | JAMES | CLERK | 950 |
(14 rows)
ociデータベースリンクのプッシュダウン
oci-dblinkを使用してリモートOracleデータベースでSQL文を実行すると、処理のプッシュダウンが外部サーバで発生する特定の状況があります。
プッシュダウンとは、SQLステートメントが発行されたローカル・クライアントではなく、外部(すなわち、リモート)サーバーでの処理の発生を指します。プッシュダウンは、データがローカル・クライアントに戻される前にリモート・サーバーで処理されるため、パフォーマンスが向上します。
プッシュダウンは、標準のSQL結合操作(内部結合、左外部結合、右外部結合、および完全外部結合)を使用する文に適用されます。結果のデータセットにソートが指定されていてもプッシュダウンが発生します。
プッシュダウンが発生するには、特定の基本条件を満たす必要があります。結合操作に関係する表は、同じ外部サーバーに属し、外部サーバー(つまり、 CREATE DATABASE LINKコマンドで定義された同じデータベース・リンク)と同じ接続情報を使用する必要があります
SQL文でプッシュダウンを使用するかどうかを判断するには、 EXPLAINコマンドを使用して実行計画を表示します
詳細については 、EXPLAINコマンドにてPostgreSQLのコアのドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-explain.html
次の例では、作成されたデータベースリンクを次のように使用しています。
CREATE PUBLIC DATABASE LINK oralink CONNECT TO edb IDENTIFIED BY 'password' USING '//192.168.2.23:1521/xe';
次の例は、内部結合の実行計画を示しています。
EXPLAIN (verbose,costs off) SELECT d.deptno, d.dname, e.empno, e.ename FROM dept@oralink d, emp@oralink e WHERE d.deptno = e.deptno ORDER BY 1, 3;
 
QUERY PLAN
--------------------------------------------------------------------------------
Foreign Scan
Output: d.deptno, d.dname, e.empno, e.ename
Relations: (_dblink_dept_1 d) INNER JOIN (_dblink_emp_2 e)
Remote Query: SELECT r1.deptno, r1.dname, r2.empno, r2.ename FROM (dept r1 INNER JOIN emp r2 ON ((r1.deptno = r2.deptno))) ORDER BY r1.deptno ASC NULLS LAST, r2.empno ASC NULLS LAST
(4 rows)
INNER JOIN操作は、外部スキャンセクションで行われることに注意してください 。この結合の出力は次のとおりです。
deptno | dname | empno | ename
--------+------------+-------+--------
10 | ACCOUNTING | 7782 | CLARK
10 | ACCOUNTING | 7839 | KING
10 | ACCOUNTING | 7934 | MILLER
20 | RESEARCH | 7369 | SMITH
20 | RESEARCH | 7566 | JONES
20 | RESEARCH | 7788 | SCOTT
20 | RESEARCH | 7876 | ADAMS
20 | RESEARCH | 7902 | FORD
30 | SALES | 7499 | ALLEN
30 | SALES | 7521 | WARD
30 | SALES | 7654 | MARTIN
30 | SALES | 7698 | BLAKE
30 | SALES | 7844 | TURNER
30 | SALES | 7900 | JAMES
(14 rows)
左外部結合の実行計画を以下に示します。
EXPLAIN (verbose,costs off) SELECT d.deptno, d.dname, e.empno, e.ename FROM dept@oralink d LEFT OUTER JOIN emp@oralink e ON d.deptno = e.deptno ORDER BY 1, 3;
 
QUERY PLAN
--------------------------------------------------------------------------------
Foreign Scan
Output: d.deptno, d.dname, e.empno, e.ename
Relations: (_dblink_dept_1 d) LEFT JOIN (_dblink_emp_2 e)
Remote Query: SELECT r1.deptno, r1.dname, r2.empno, r2.ename FROM (dept r1 LEFT JOIN emp r2 ON ((r1.deptno = r2.deptno))) ORDER BY r1.deptno ASC NULLS LAST, r2.empno ASC NULLS LAST
(4 rows)
この結合の出力は次のとおりです。
deptno | dname | empno | ename
--------+------------+-------+--------
10 | ACCOUNTING | 7782 | CLARK
10 | ACCOUNTING | 7839 | KING
10 | ACCOUNTING | 7934 | MILLER
20 | RESEARCH | 7369 | SMITH
20 | RESEARCH | 7566 | JONES
20 | RESEARCH | 7788 | SCOTT
20 | RESEARCH | 7876 | ADAMS
20 | RESEARCH | 7902 | FORD
30 | SALES | 7499 | ALLEN
30 | SALES | 7521 | WARD
30 | SALES | 7654 | MARTIN
30 | SALES | 7698 | BLAKE
30 | SALES | 7844 | TURNER
30 | SALES | 7900 | JAMES
40 | OPERATIONS | |
(15 rows)
次の例は、 emp joinedテーブルが同じ外部サーバではなくローカルに存在するため、処理全体がプッシュダウンされない場合を示しています。
EXPLAIN (verbose,costs off) SELECT d.deptno, d.dname, e.empno, e.ename FROM dept@oralink d LEFT OUTER JOIN emp e ON d.deptno = e.deptno ORDER BY 1, 3;
 
QUERY PLAN
------------------------------------------------------------------
Sort
Output: d.deptno, d.dname, e.empno, e.ename
Sort Key: d.deptno, e.empno
-> Hash Left Join
Output: d.deptno, d.dname, e.empno, e.ename
Hash Cond: (d.deptno = e.deptno)
-> Foreign Scan on _dblink_dept_1 d
Output: d.deptno, d.dname, d.loc
Remote Query: SELECT deptno, dname, NULL FROM dept
-> Hash
Output: e.empno, e.ename, e.deptno
-> Seq Scan on public.emp e
Output: e.empno, e.ename, e.deptno
(13 rows)
この結合の出力は、前の左外部結合の例と同じです。
データベースリンクから外部テーブルを作成する
注意:この項で説明する手順は、Oracleデータベースと互換性がありません。
データベース・リンクを作成した後、このデータベース・リンクに基づいて外部表を作成できます。外部テーブルを使用して、データベースリンク構文を使用する代わりに外部テーブル名を参照するリモートテーブルにアクセスすることができます。データベースリンクを使用するには、 SQLコマンドで参照されるテーブルまたはビュー名に@ dblink追加する必要があります。ここで、 dblinkはデータベースリンクの名前です。
このテクニックは、リモートOracleアクセス用のoci-dblink接続、またはリモートPostgresアクセス用のpostgres_fdw接続のいずれかに使用できます。
次の例は、リモートOracle表にアクセスするための外部表の作成を示しています。
まず、前述のようにデータベースリンクを作成します。次に 、Oracleデータベースに接続するためのoralink というデータベース・リンクを作成します。
CREATE PUBLIC DATABASE LINK oralink CONNECT TO edb IDENTIFIED BY 'password' USING '//127.0.0.1:1521/xe';
次のクエリは、データベースリンクを示しています。
SELECT lnkname, lnkuser, lnkconnstr FROM pg_catalog.edb_dblink;
 
lnkname | lnkuser | lnkconnstr
---------+---------+---------------------
oralink | edb | //127.0.0.1:1521/xe
(1 row)
データベースリンクを作成すると、Advanced Serverは対応する外部サーバーを作成します。次のクエリは、外部サーバを表示します。
SELECT srvname, srvowner, srvfdw, srvtype, srvoptions FROM pg_foreign_server;
 
srvname | srvowner | srvfdw | srvtype | srvoptions
---------+----------+--------+---------+-------------------------------
oralink | 10 | 14005 | | {connstr=//127.0.0.1:1521/xe}
(1 row)
外部サーバの詳細については 、PostgreSQL CoreドキュメントのCREATE SERVERコマンドを参照してください
https://www.postgresql.org/docs/11/static/sql-createserver.html
次のように外部表を作成します。
CREATE FOREIGN TABLE emp_ora (
empno NUMERIC(4),
ename VARCHAR(10),
job VARCHAR(9),
mgr NUMERIC(4),
hiredate TIMESTAMP WITHOUT TIME ZONE,
sal NUMERIC(7,2),
comm NUMERIC(7,2),
deptno NUMERIC(2)
)
SERVER oralink
OPTIONS (table_name 'emp', schema_name 'edb'
);
CREATE FOREIGN TABLEコマンドでは次の点に注意してください
で指定した名前 CREATE FOREIGN TABLEコマンドの最後にサーバー句はpg_foreign_server上のクエリからSRVNAME列に表示されているように、この例でoralinkされる外部サーバの名前です。
テーブル名とスキーマ名は、 OPTIONS句にtableオプションとschemaオプションで指定します。
CREATE FOREIGN TABLEコマンドで指定された列名は、リモート表の列名と一致する必要があります。
一般に、 CONSTRAINT節は、リモート表で定義されていると見なされるため、外部表で受け入れられたり強制されたりしないことがあります。
詳細については FOREIGN CREATE TABLEコマンドを、でPostgreSQLのコアのドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-createforeigntable.html
次は外部テーブルのクエリです。
SELECT * FROM emp_ora;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+--------------------+---------+---------+--------
7369 | SMITH | CLERK | 7902 | 17-DEC-80 00:00:00 | 800.00 | | 20
7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600.00 | 300.00 | 30
7521 | WARD | SALESMAN | 7698 | 22-FEB-81 00:00:00 | 1250.00 | 500.00 | 30
7566 | JONES | MANAGER | 7839 | 02-APR-81 00:00:00 | 2975.00 | | 20
7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1250.00 | 1400.00 | 30
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850.00 | | 30
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450.00 | | 10
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 00:00:00 | 3000.00 | | 20
7839 | KING | PRESIDENT | | 17-NOV-81 00:00:00 | 5000.00 | | 10
7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500.00 | 0.00 | 30
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 00:00:00 | 1100.00 | | 20
7900 | JAMES | CLERK | 7698 | 03-DEC-81 00:00:00 | 950.00 | | 30
7902 | FORD | ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000.00 | | 20
7934 | MILLER | CLERK | 7782 | 23-JAN-82 00:00:00 | 1300.00 | | 10
(14 rows)
これとは対照的に、以下は外部テーブルの代わりにデータベースリンクを使用して、同じリモートテーブルに対するクエリです。
SELECT * FROM emp@oralink;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+--------------------+------+------+--------
7369 | SMITH | CLERK | 7902 | 17-DEC-80 00:00:00 | 800 | | 20
7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600 | 300 | 30
7521 | WARD | SALESMAN | 7698 | 22-FEB-81 00:00:00 | 1250 | 500 | 30
7566 | JONES | MANAGER | 7839 | 02-APR-81 00:00:00 | 2975 | | 20
7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1250 | 1400 | 30
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850 | | 30
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450 | | 10
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 00:00:00 | 3000 | | 20
7839 | KING | PRESIDENT | | 17-NOV-81 00:00:00 | 5000 | | 10
7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500 | 0 | 30
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 00:00:00 | 1100 | | 20
7900 | JAMES | CLERK | 7698 | 03-DEC-81 00:00:00 | 950 | | 30
7902 | FORD | ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000 | | 20
7934 | MILLER | CLERK | 7782 | 23-JAN-82 00:00:00 | 1300 | | 10
(14 rows)
注意:下位互換性の理由から、 USING postgres_fdwではなく、 USING libpqを書くことは可能です。しかし、 libpqコネクタには、 postgres_fdwコネクタに存在する多くの重要な最適化がありません。したがって、 postgres_fdwコネクタは可能な限り使用する必要があります。 libpqオプションは廃止され、将来のAdvanced Serverリリースでは完全に削除される可能性があります。
関連項目
DROP DATABASE LINK
2.3.19 CREATE DIRECTORY
CREATE DIRECTORY - ファイルシステムディレクトリパスのエイリアスを作成する
シノプシス
CREATE DIRECTORY name AS ' pathname '
説明
CREATE DIRECTORYコマンドは、ファイルシステムディレクトリのパス名のエイリアスを作成します。このコマンドを使用するには、データベースのスーパーユーザーでなければなりません。
エイリアスが UTL_FILEパッケージのプログラムへの適切なパラメータとして指定されると、オペレーティング・システム・ファイルは、指定されたエイリアスに対応するディレクトリに作成されるか、またはそこからアクセスされます
パラメーター
ディレクトリエイリアス名。
パス名
エイリアス名で表される完全修飾ディレクトリパス。 CREATE DIRECTORYコマンドは、オペレーティングシステムのディレクトリを作成しません。物理ディレクトリは、適切なオペレーティングシステムコマンドを使用して個別に作成する必要があります。
ノート
ディレクトリを使用してファイルを作成および/または読み取るためにUTL_FILEパッケージを使用する場合は、 オペレーティング・システムのユーザーID enterprisedbに、ディレクトリに対する適切な読取り権限および/または書込み権限が必要です。
ディレクトリエイリアスは、 pg_catalog.edb_dirシステムカタログテーブルに格納されてい ますedb_dirはOracleデータベースと互換性のある表ではありません。
ディレクトリ・エイリアスは 、Oracleデータベースと互換性のあるSYS.ALL_DIRECTORIESおよびSYS.DBA_DIRECTORIES というOracleカタログ・ビューからも参照できます。
ディレクトリエイリアスを削除するには DROP DIRECTORYコマンドを使用します。ディレクトリエイリアスが削除されると、対応する物理ファイルシステムディレクトリは影響を受けません。ファイルシステムディレクトリは、適切なオペレーティングシステムコマンドを使用して削除する必要があります。
Linuxシステムでは、ディレクトリ名の区切り文字はスラッシュ( / )です。
Windowsシステムでは、ディレクトリ名の区切り文字をスラッシュ( / )または2つの連続する円記号( ¥¥として指定できます
Linuxの場合 、ディレクトリ/ tmp / empdirの empdir というエイリアスを作成します
CREATE DIRECTORY empdir AS '/tmp/empdir';
Windowsでは、 C:¥TEMP¥EMPDIRディレクトリの別名 empdir作成します。
CREATE DIRECTORY empdir AS 'C:/TEMP/EMPDIR';
すべてのディレクトリエイリアスを表示します。
SELECT * FROM pg_catalog.edb_dir;
 
dirname | dirowner | dirpath | diracl
---------+----------+----------------+--------
empdir | 10 | C:/TEMP/EMPDIR |
(1 row)
Oracleデータベースと互換性のあるビューを使用して、ディレクトリ別名を表示します。
SELECT * FROM SYS.ALL_DIRECTORIES;
 
owner | directory_name | directory_path
--------------+----------------+----------------
ENTERPRISEDB | EMPDIR | C:/TEMP/EMPDIR
(1 row)
関連項目
DROP DIRECTORY
 
2.3.20 CREATE FUNCTION
CREATE FUNCTION - 新しい関数を定義する
シノプシス
CREATE [ OR REPLACE ] FUNCTION name [ ( parameters ) ]
RETURN data_type
[
不変
|安定
|揮発性
|決定的
| [NOT] LEAKPROOF
| NULL入力で呼び出される
|ヌル入力でNULLを返す
| STRICT
| [外部]セキュリティ・インボーカ
| [外部]セキュリティディフェンダー
| AUTHID DEFINER
| AUTHID CURRENT_USER
|パラレル{UNSAFE |制限された|安全 }
| COSTの 実行 _ コスト
| ROWSは _ 行の 結果
| SET
構成 _ パラメーター
{TO
| = | FROM CURRENT}
...]
{IS | AS}
[PRAGMA AUTONOMOUS_TRANSACTION; ]
[ declarations ]
BEGIN
statements
END [ name ];
 
説明
CREATE FUNCTIONは新しい関数を定義します。 CREATE OR REPLACE FUNCTIONは、新しい関数を作成するか、既存の定義を置き換えます。
スキーマ名が含まれる場合、関数は指定されたスキーマに作成されます。それ以外の場合は、現在のスキーマに作成されます。新しい関数の名前は、同じスキーマ内の同じ入力引数型を持つ既存の関数と一致していてはなりません。しかし、異なる入力引数型の関数は名前を共有することがあります(これは オーバーロード と呼ばれます )。 (関数のオーバーロードはAdvanced Serverの機能です。格納されたスタンドアロン関数のオーバーロードはOracleデータベースと互換性がありません。
既存の関数の定義を更新するには、 CREATE OR REPLACE FUNCTIONを 使用します 。この方法で関数の名前や引数の型を変更することはできません(試した場合は、実際には別個の関数を作成することになります)。また、 CREATE OR REPLACE FUNCTIONでは、既存の関数の戻り値の型を変更することはできません。これを行うには、関数を削除して再作成する必要があります。また、 OUTパラメーターを使用する場合は、その関数をドロップすることを除いて、 OUTパラメーターのタイプを変更することはできません。
関数を作成するユーザーは、関数の所有者になります。
パラメーター
name 関数の識別子です
パラメーター
parameters は仮パラメータのリストです。
データ・タイプ
data_typeは、関数のRETURNステートメントによって返された値のデータ型です。
宣言
宣言 は、変数、カーソル、型、または副プログラムの宣言です。サブプログラム宣言が含まれている場合は、他のすべての変数宣言、カーソル宣言、および型宣言の後に宣言する必要があります。
ステートメント
ステートメント SPL プログラムステートメントです( BEGIN - END ブロックには EXCEPTIONセクションが含まれる場合があります )。
不変
安定
揮発性
これらの属性は、クエリオプティマイザに関数の動作を通知します 。 1つの選択肢しか指定できません。 VOLATILE はデフォルトの動作です。
IMMUTABLE は、関数がデータベースを変更できず、同じ引数値が与えられたときに常に同じ結果に達することを示します。データベース参照を行わず、引数リストに直接存在しない情報を使用しません。この句を含める と、すべて定数の引数を持つ関数の呼び出しを すぐに関数の に置き換えることができ ます。
STABLE は、関数がデータベースを変更できない ことを示し 、単一の表スキャン内では、同じ引き数値に対して同じ結果を一貫して戻しますが、結果はSQLステートメント全体で変更される可能性があることを示します。これは、 データベースルックアップ、パラメータ変数(現在のタイムゾーンなど)に依存する関数の適切な選択です
VOLATILE 、単一のテーブル・スキャン内でも関数値が変更できることを 示している ため、最適化は行えません。副作用のある関数は、呼び出しが最適化されないように、結果がかなり予測可能であっても、揮発性に分類されなければならないことに注意してください。
決定的
DETERMINISTICIMMUTABLEの同義語です。 DETERMINISTIC関数はデータベースを変更することはできず、同じ引き数を指定すると常に同じ結果になります。データベース参照を行わず、引数リストに直接存在しない情報を使用しません。この句を含めると、すべて定数の引数を持つ関数の呼び出しをすぐに関数の値に置き換えることができます。
[NOT] LEAKPROOF
漏れ止め 関数には副作用がなく、関数の呼び出しに使用された値に関する情報は表示されません
NULL入力で呼び出される
ヌル入力でNULLを返す
STRICT
呼び出される ヌル INPUT (デフォルト)は、引数の一部が NULLの 場合にプロシージャが正常に呼び出されることを示し ます 必要に応じ NULL をチェックし、 適切に応答するの は作者の責任 です。
戻り値 ヌル ヌル INPUT または STRICT 、その引数のいずれか NULL の場合は必ずプロシージャが NULL を返すことを示し ます 。これらの句が指定されている場合、 NULL 引数 がある場合はプロシージャは実行されません 。代わりに NULL という結果が自動的想定されます。
[外部]セキュリティディフェンダー
セキュリティ DEFINER は、関数を作成したユーザーの権限で関数が実行されることを指定します。これがデフォルトです。キーワード EXTERNAL はSQL準拠には使用できますが、オプションです。
[外部]セキュリティ・インボーカ
SECURITY INVOKER 句は、関数を呼び出すユーザーの権限で関数が実行されることを示します。キーワード EXTERNAL はSQL準拠には使用できますが、オプションです。
AUTHID DEFINER
AUTHID CURRENT_USER
AUTHID DEFINER 句は、 [EXTERNAL]の 同義語です セキュリティ DEFINER AUTHID が省略された 場合 、または AUTHID 場合 DEFINER が指定されている場合、関数所有者の権限を使用してデータベース・オブジェクトへのアクセス権限が決定されます。
AUTHID CURRENT_USER 句は、 [EXTERNAL]の 同義語です セキュリティ INVOKER AUTHIDの 場合 CURRENT_USER が指定されている場合、その関数を実行している現行ユーザーの権限を使用してアクセス特権が判別されます。
パラレル{UNSAFE |制限された|安全 }
PARALLEL 句は、並列逐次走査(パラレルモード)の使用を可能にします。 並列逐次スキャンは、逐次逐次スキャンとは対照的に、クエリ中に複数のワーカーを使用してリレーションを並行してスキャンします。
UNSAFE 設定すると 、パラレルモードでは実行できません。このような関数がSQL文に存在すると、実行計画が強制的に実行されます。これは、 PARALLEL 句が省略された 場合のデフォルト設定です
RESTRICTED 設定すると 、この関数はパラレルモードで実行できますが、実行はパラレルグループリーダーに制限されます。特定の関係の資格に並行制限があるものがあれば、その関係は並列性のために選択されません。
SAFE 設定すると 、パラレルモードで機能を制限なく実行できます。
COSTの 実行 _ コスト
実行 _ コスト は、 CPUの _ 演算子 _ コストの 単位で 関数の推定実行コストを示す正の数 です。機能の場合 セットを返します。返される行あたりのコストです。値を大きくすると、プランナは関数の評価を回避しようとします 必要以上に頻繁に。
ROWSは _ 行の 結果
result _ rows は、プランナが関数を予想する行の推定数を示す正の数です。 復帰する。これは、関数 セットを返すように宣言されています。デフォルトの仮定は1000行です。
SET 設定 _ パラメータ {TO | = | FROM CURRENT}
SET は、場合関数指定された構成パラメータが指定された値に設定させます 関数が入力されると、その値に戻されます 終了します。 セット から CURRENT は、セッションの現在のパラメータ値を、関数の実行時に適用される値として保存します 入力されます。
場合は SET は、関数、SETの後、効果 に取り付けられています。 関数内で実行される LOCAL コマンド 同じ変数に対しては関数に制限されています。構成パラメータの以前の値が関数で復元される 出口。 (LOCALなし 通常の SET コマンド 、前の SET のために行うだろう限り、SET句 上書きします 現在のトランザクションがロールバックされない限り、プロシージャの終了後にそのようなコマンドの効果が持続する LOCAL コマンド。
PRAGMA AUTONOMOUS_TRANSACTION
PRAGMA AUTONOMOUS_TRANSACTIONは、この関数を自律型トランザクションとして設定するディレクティブです。
注: STRICTLEAKPROOFPARALLELCOSTROWSおよびSETキーワードはAdvanced Serverの拡張機能を提供し、Oracleではサポートされていません。
ノート
Advanced Serverでは、関数のオーバーロードが可能です。つまり、異なる入力関数( ININ OUT )引数データ型を持つ限り、同じ名前を複数の異なる関数に使用できます。
関数 emp_compは、2つの数値を入力として取り、計算値を返します。 SELECTコマンドは、関数の使用方法を示します。
CREATE OR REPLACE FUNCTION emp_comp (
p_sal NUMBER,
p_comm NUMBER
) RETURN NUMBER
IS
BEGIN
RETURN (p_sal + NVL(p_comm, 0)) * 24;
END;
 
SELECT ename "Name", sal "Salary", comm "Commission", emp_comp(sal, comm)
"Total Compensation" FROM emp;
 
Name | Salary | Commission | Total Compensation
--------+---------+------------+--------------------
SMITH | 800.00 | | 19200.00
ALLEN | 1600.00 | 300.00 | 45600.00
WARD | 1250.00 | 500.00 | 42000.00
JONES | 2975.00 | | 71400.00
MARTIN | 1250.00 | 1400.00 | 63600.00
BLAKE | 2850.00 | | 68400.00
CLARK | 2450.00 | | 58800.00
SCOTT | 3000.00 | | 72000.00
KING | 5000.00 | | 120000.00
TURNER | 1500.00 | 0.00 | 36000.00
ADAMS | 1100.00 | | 26400.00
JAMES | 950.00 | | 22800.00
FORD | 3000.00 | | 72000.00
MILLER | 1300.00 | | 31200.00
(14 rows)
関数 sal_rangeは、給与が指定された範囲内にある従業員の数のカウントを返します。次の無名ブロックは、引数の最初の2つの呼び出しのデフォルト値を使用して関数を何度も呼び出します。
CREATE OR REPLACE FUNCTION sal_range (
p_sal_min NUMBER DEFAULT 0,
p_sal_max NUMBER DEFAULT 10000
) RETURN INTEGER
IS
v_count INTEGER;
BEGIN
SELECT COUNT(*) INTO v_count FROM emp
WHERE sal BETWEEN p_sal_min AND p_sal_max;
RETURN v_count;
END;
 
BEGIN
DBMS_OUTPUT.PUT_LINE('Number of employees with a salary: ' ||
sal_range);
DBMS_OUTPUT.PUT_LINE('Number of employees with a salary of at least '
|| '$2000.00: ' || sal_range(2000.00));
DBMS_OUTPUT.PUT_LINE('Number of employees with a salary between '
|| '$2000.00 and $3000.00: ' || sal_range(2000.00, 3000.00));
 
END;
 
Number of employees with a salary: 14
Number of employees with a salary of at least $2000.00: 6
Number of employees with a salary between $2000.00 and $3000.00: 5
次の例は、関数宣言でAUTHID CURRENT_USER句とSTRICTキーワードを使用する方法を示しています。
CREATE OR REPLACE FUNCTION dept_salaries(dept_id int) RETURN NUMBER
STRICT
AUTHID CURRENT_USER
BEGIN
RETURN QUERY (SELECT sum(salary) FROM emp WHERE deptno = id);
END;
渡された入力パラメーターが NULLの 場合 、サーバーに NULL を戻すように指示 する STRICT キーワードを 組み込み ます NULL が渡された 場合 、この関数は実行されません。
DEPT _ 給与の 関数は、関数を呼び出している役割の権限で実行されます。 現在のユーザーに (従業員の給与を表示 するために) emp 表を 照会する SELECT ステートメント を実行するための十分な特権がない場合、 関数はエラーを報告します。関数を定義したロールに関連付けられた権限を使用するようにサーバーに指示するには、 AUTHID AUTHIDを 持つ CURRENT _ USER DEFINER 句。
その他のプラグマ(パッケージ仕様内で宣言されている)
PRAGMA RESTRICT_REFERENCES
Advanced Serverは受け入れますが、構文参照無視 プラグマは _ の参照を 制限します
関連項目 DROP FUNCTION
 
2.3.21 CREATE INDEX
CREATE INDEX - 新しいインデックスを定義する
シノプシス
CREATE [ UNIQUE ] INDEX name ON table
( { column | ( expression ) } )
[ TABLESPACE tablespace ]
説明
CREATE INDEXは、指定された表の索引nameを構成します。索引は主にデータベースのパフォーマンスを向上させるために使用されます(不適切な使用はパフォーマンスが低下します)。
索引のキー・フィールドは、列名、あるいはかっこで書かれた式として指定されます。複数のフィールドを指定すると、複数の列のインデックスを作成できます。
インデックスフィールドは、テーブル行の1つ以上の列の値から計算された式です。この機能を使用して、基本データの一部の変換に基づいてデータへの高速アクセスを取得できます。たとえば、 UPPER(col)で 計算されたインデックスは、 WHERE UPPER(col)= 'JIM'という句でインデックスを使用できます。
Advanced Serverは、Bツリーのインデックス方法を提供します 。 Bツリーインデックスメソッドは、Lehman-Yaoの高並列Bツリーの実装です。
索引は 、デフォルト IS NULL句には使用されません
インデックス定義で使用されるすべての関数と演算子は、「不変」でなければなりません。つまり、結果は引数にのみ依存し、外部の影響(他のテーブルの内容や現在の時刻など)には依存しません。この制限により、索引の動作が適切に定義されます。インデックス式でユーザー定義関数を使用するには、関数を作成するときにその関数を不変にすることを忘れないでください。
パーティション表に索引を作成すると、 CREATE INDEXコマンドは索引を表のサブパーティションに伝播します。
パラメーター
ユニーク
索引が作成されたとき(データがすでに存在する場合)およびデータが追加されるたびに、システムが表内の重複値を検査するようにします。重複した結果となるデータを挿入または更新しようとすると、エラーが発生します。
作成する索引の名前。ここにはスキーマ名は含まれません。索引は常に親表と同じスキーマに作成されます。
索引付けする表の名前(スキーマ修飾名)。
カラム
表内の列の名前。
表現
表の1つ以上の列に基づく式。式は通常、構文で示されているように、囲む括弧で書かれていなければなりません。ただし、式に関数呼び出しの形式がある場合は、かっこは省略することができます。
表スペース
索引を作成する表領域。指定されていない場合は、 DEFAULT_TABLESPACEは空の文字列である場合DEFAULT_TABLESPACEを使用、またはデータベースのデフォルトの表領域です。
ノート
複数列の索引では、最大32のフィールドを指定できます。
列にB-treeインデックスを作成するには、 ENAME、テーブルで、EMP:
CREATE INDEX name_idx ON emp (ename);
上記と同じインデックスを作成しますが、 index_tblspcテーブルスペースに存在させるには
CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;
関連項目
DROP INDEX ALTER INDEX
 
2.3.22 MATERIALIZED VIEWの作成
CREATE MATERIALIZED VIEW - 新しいマテリアライズド・ビューを定義する
シノプシス
CREATE MATERIALIZED VIEW name
[ build _ clause ][ create _ mv _ refresh ] AS subquery
どこ ビルド _ 句は 次のとおりです。
ビルド{IMMEDIATE | DEFERRED}
作成 _ _ MV リフレッシュ のように なります。
リフレッシュ[完了] [オンデマンド]
説明
CREATE MATERIALIZED VIEWは、クエリでビューが参照されるたびに更新されないクエリのビューを定義します。デフォルトでは、ビューが作成されるとビューに値が設定されます。 BUILD DEFERREDキーワードを含めると、ビューの作成を遅らせることができます。
マテリアライズド・ビューはスキーマで修飾されている場合があります。 CREATE MATERIALIZED VIEWコマンドを呼び出すときにスキーマ名を指定すると、指定したスキーマにビューが作成されます。ビュー名は、同じスキーマ内の他のビュー、テーブル、シーケンス、またはインデックスの名前とは異なるものでなければなりません。
パラメーター
作成されるビューの名前(スキーマ修飾名も可)
サブクエリ
ビューの内容を指定する SELECTステートメント。有効な照会の詳細については、 SELECTを参照してください。
build_clause
含めるビューを移入する必要があるときに指定するbuild_clauseをBUILD IMMEDIATEまたはBUILD DEFERREDを指定する:
BUILD IMMEDIATEは、ビューに直ちにデータを設定するようにサーバーに指示します。これがデフォルト動作です。
BUILD DEFERREDは、後で( REFRESH操作中に)ビューを移入するようにサーバーに指示します。
create_mv_refresh
マテリアライズド・ビューの内容をいつ更新するかを指定するには create_mv_refresh句を含めます 。この節には、 REFRESHキーワードの後にCOMPLETEおよび/またはON DEMANDが続きます。
COMPLETEは、現行のコンテンツを破棄し、マテリアライズド・ビューをリフレッシュするときにビューの定義問合せを実行して、マテリアライズド・ビューをリロードするようにサーバーに指示します。
ON DEMANDは、 DBMS _ MVIEWパッケージを呼び出すか、Postgres REFRESH MATERIALIZED VIEW文を呼び出すことによって、オンデマンドでマテリアライズド・ビューをリフレッシュするようサーバーに指示します。これがデフォルト動作です。
ノート
マテリアライズド・ビューは読取り専用です。サーバーはビューに対して INSERTUPDATEまたはDELETE許可しません
ビューで参照されるテーブルへのアクセスは、ビュー所有者の権限によって決定されます。 ビューのユーザーは、ビューで使用されるすべての関数を呼び出すための権限を持っている必要があります。
Postgres REFRESH MATERIALIZED VIEW コマンドの詳細については、以下のPostgreSQLコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-refreshmaterializedview.html
次の文は、 dept_30 というマテリアライズド・ビューを作成します
CREATE MATERIALIZED VIEW dept_30 BUILD IMMEDIATE AS SELECT * FROM emp WHERE deptno = 30;
このビューには 、部門 30 で働く従業員に関する emp テーブル から取得された情報が含まれています
 
2.3.23 パッケージの作成
CREATE PACKAGE - 新しいパッケージ仕様を定義する
シノプシス
CREATE [ OR REPLACE ] PACKAGE name
[ AUTHID { DEFINER | CURRENT_USER } ]
{ IS | AS }
[ declaration ; ] [, ...]
[ { PROCEDURE proc_name
[ ( argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
[, ...]) ];
[ PRAGMA RESTRICT_REFERENCES( name ,
{ RNDS | RNPS | TRUST | WNDS | WNPS } [, ... ] ); ]
|
FUNCTION func_name
[ ( argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
[, ...]) ]
RETURN rettype [ DETERMINISTIC ];
[ PRAGMA RESTRICT_REFERENCES( name ,
{ RNDS | RNPS | TRUST | WNDS | WNPS } [, ... ] ); ]
}
] [, ...]
END [ name ]
説明
CREATE PACKAGEは新しいパッケージ仕様を定義します。 CREATE OR REPLACE PACKAGEは新しいパッケージ仕様を作成するか、既存の仕様を置き換えます。
スキーマ名が含まれている場合、パッケージは指定されたスキーマに作成されます。それ以外の場合は、現在のスキーマに作成されます。新しいパッケージの名前は、既存のパッケージの定義を更新する場合を除き、同じスキーマ内の既存のパッケージと一致していてはなりません(その場合は CREATE OR REPLACE PACKAGEを 使用します)
プロシージャを作成するユーザーは、パッケージの所有者になります。
パラメーター
作成するパッケージの名前(スキーマ修飾名でも可)。
DEFINER |現在の使用者
パッケージ所有者( DEFINER )の権限またはパッケージ内のプログラムを実行している現行ユーザーの権限( CURRENT_USER )を使用して、パッケージで参照されるデータベース・オブジェクトへのアクセスが許可されているかどうかを指定します。 DEFINERがデフォルトです。
宣言
パブリック変数、型、カーソル、または REF CURSOR宣言。
proc_name
パブリックプロシージャーの名前。
argname
引数の名前。
IN | IN OUT |でる
引数モード。
argtype
プログラムの引数のデータ型。
DEFAULT
入力引数のデフォルト値。
func_name
パブリック関数の名前。
rettype
戻り値のデータ型。
決定的
DETERMINISTICIMMUTABLEの同義語です DETERMINISTIC プロシージャーはデータベースを変更することはできず、同じ引き数値が与えられたときに常に同じ結果になります。データベース参照を行わず、引数リストに直接存在しない情報を使用しません。この句をインクルードすると、すべて定数の引数を持つプロシージャの呼び出しをすぐにプロシージャの値に置き換えることができます。
RNDS | RNPS |トラスト| WNDS | WNPS
キーワードは互換性のために受け入れられ、無視されます。
パッケージの仕様 empinfoには、パブリック変数、パブリック・プロシージャ、パブリック関数の3つのパブリック・コンポーネントが含まれています。
CREATE OR REPLACE PACKAGE empinfo
IS
emp_name VARCHAR2(10);
PROCEDURE get_name (
p_empno NUMBER
);
FUNCTION display_counter
RETURN INTEGER;
END;
関連項目
パッケージを削除する
 
2.3.24 パッケージの作成
CREATE BODY PACKAGE - 新しいパッケージ本体を定義する
シノプシス
CREATE [ OR REPLACE ] PACKAGE BODY name
{ IS | AS }
[ declaration ; ] [, ...]
[ { PROCEDURE proc_name
[ ( argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
[, ...]) ]
[ STRICT ]
[ LEAKPROOF ]
[ PARALLEL { UNSAFE | RESTRICTED | SAFE } ]
[ COST execution_cost ]
[ ROWS result_rows ]
[ SET config_param { TO value | = value | FROM CURRENT } ]
{ IS | AS }
program_body
END [ proc_name ];
|
FUNCTION func_name
[ ( argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
[, ...]) ]
RETURN rettype [ DETERMINISTIC ]
[ STRICT ]
[ LEAKPROOF ]
[ PARALLEL { UNSAFE | RESTRICTED | SAFE } ]
[ COST execution_cost ]
[ ROWS result_rows ]
[ SET config_param { TO value | = value | FROM CURRENT } ]
{ IS | AS }
program_body
END [ func_name ];
}
] [, ...]
[ BEGIN
statement ; [, ...] ]
END [ name ]
説明
CREATE PACKAGE BODYは新しいパッケージ本体を定義します。 CREATE OR REPLACE PACKAGE BODYは、新しいパッケージ本体を作成するか、既存の本体を置き換えます。
スキーマ名が含まれている場合、指定されたスキーマにパッケージ本体が作成されます。それ以外の場合は、現在のスキーマに作成されます。新しいパッケージ本体の名前は、同じスキーマ内の既存のパッケージ仕様と一致する必要があります。新しいパッケージの本体名は、既存のパッケージ本体の定義を更新する場合を除いて、同じスキーマ内の既存のパッケージ本体と一致していてはなりませんその場合は CREATE OR REPLACE PACKAGE BODYを使用してください
パラメーター
作成するパッケージ本体の名前(スキーマ修飾名でも可)。
宣言
専用変数、型、カーソル、または REF CURSOR宣言。
proc_name
公開または非公開のプロシージャーの名前。 proc_nameが同一のシグネチャを持つパッケージ仕様に存在する場合 、それはパブリックです。それ以外の場合はプライベートです。
argname
引数の名前。
IN | IN OUT |でる
引数モード。
argtype
プログラムの引数のデータ型。
DEFAULT
入力引数のデフォルト値。
STRICT
STRICTキーワードは、NULL引数で呼び出された場合、関数が実行されないことを指定します 代わりに関数は NULL を返し ます
漏れ防止
漏れ防止のキーワードは、関数が戻り値を介する以外の引数、についての情報を明らかにしないことを指定します。
パラレル{UNSAFE |制限された|安全 }
PARALLEL 句は、並列逐次走査(パラレルモード)の使用を可能にします。 並列逐次スキャンは、逐次逐次スキャンとは対照的に、クエリ中に複数のワーカーを使用してリレーションを並行してスキャンします。
UNSAFE 設定する と、プロシージャまたはファンクションをパラレルモードで実行できません。このようなプロシージャまたはファンクションが存在すると、連続した実行計画が強制されます。これは、 PARALLEL 句が省略された 場合のデフォルト設定です
RESTRICTED 設定する と、プロシージャまたはファンクションはパラレル・モードで実行できますが、実行はパラレル・グループ・リーダに制限されます。特定の関係の資格に並行制限があるものがあれば、その関係は並列性のために選択されません。
SAFE 設定されている場合 、手続きまたは関数は制限なしでパラレルモードで実行できます。
execution_cost
execution_costは、 cpu_operator_costの単位で関数の推定実行コストを示す正の数を指定します。関数がセットを返す場合、これは返される行あたりのコストです。デフォルトは0.0025です。
result_rows
result_rowsは、クエリプランナが関数が返すと予想する行の推定数です。デフォルトは1000です。
セット
関数の持続時間のパラメータを指定するには、 SET句を使用します
config_param は、パラメータ名を指定します。
value はパラメータ 値を 指定します。
FROM CURRENT は、関数の終了時にパラメーター値が復元されることを保証します。
program_body
関数またはプロシージャーの本体を構成するプラグマ、宣言、および SPLステートメント。
PRAGMA AUTONOMOUS_TRANSACTIONは、機能またはプロシージャを自律型トランザクションとして設定するためのプラグマです。
宣言には、変数、型、 REF CURSOR 、またはサブプログラムの宣言が含まれますサブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の 後に宣言する必要があり ます
func_name
パブリック関数またはプライベート関数の名前。 func_nameが同一のシグネチャを持つパッケージ仕様に存在する場合 、それはパブリックです。それ以外の場合はプライベートです。
rettype
戻り値のデータ型。
決定的
DETERMINISTICインクルードして 、同じ引数値が指定されたときに関数が常に同じ結果を返すように指定します。 DETERMINISTIC関数は、データベースを変更してはいけません。
注: DETERMINISTICキーワードは、PostgreSQLのIMMUTABLEオプションと同等です。
注:パッケージ本体のパブリック関数にDETERMINISTICが指定されている場合は、パッケージ仕様の関数宣言にも指定する必要があります。プライベート関数の場合、パッケージ仕様に関数宣言はありません。
ステートメント
SPLプログラム文です。パッケージ初期化セクションのステートメントは、パッケージが初めて参照されたときにセッションごとに1回実行されます。
注: STRICTLEAKPROOFPARALLELCOSTROWSおよびSETキーワードはAdvanced Serverの拡張機能を提供し、Oracleではサポートされていません。
以下は、 empinfoパッケージのパッケージ本体です
CREATE OR REPLACE PACKAGE BODY empinfo
IS
v_counter INTEGER;
PROCEDURE get_name (
p_empno NUMBER
)
IS
BEGIN
SELECT ename INTO emp_name FROM emp WHERE empno = p_empno;
v_counter := v_counter + 1;
END;
FUNCTION display_counter
RETURN INTEGER
IS
BEGIN
RETURN v_counter;
END;
BEGIN
v_counter := 0;
DBMS_OUTPUT.PUT_LINE('Initialized counter');
END;
次の2つの無名ブロックは、 empinfoパッケージのプロシージャと関数を実行し 、パブリック変数を表示します。
BEGIN
empinfo.get_name(7369);
DBMS_OUTPUT.PUT_LINE('Employee Name : ' || empinfo.emp_name);
DBMS_OUTPUT.PUT_LINE('Number of queries: ' || empinfo.display_counter);
END;
 
Initialized counter
Employee Name : SMITH
Number of queries: 1
 
BEGIN
empinfo.get_name(7900);
DBMS_OUTPUT.PUT_LINE('Employee Name : ' || empinfo.emp_name);
DBMS_OUTPUT.PUT_LINE('Number of queries: ' || empinfo.display_counter);
END;
 
Employee Name : JAMES
Number of queries: 2
関連項目
パッケージの作成 パッケージの削除
2.3.25作成手順
CREATE PROCEDURE - 新しいストアドプロシージャを定義する
シノプシス
CREATE [ OR REPLACE ] PROCEDURE name [ ( parameters ) ]
[
不変
|安定
|揮発性
|決定的
| [NOT] LEAKPROOF
| NULL入力で呼び出される
|ヌル入力でNULLを返す
| STRICT
| [外部]セキュリティ・インボーカ
| [外部]セキュリティディフェンダー
| AUTHID DEFINER
| AUTHID CURRENT_USER
|パラレル{UNSAFE |制限された|安全 }
| COSTの 実行 _ コスト
| ROWSは _ 行の 結果
| SET
構成 _ パラメーター
{TO
| = | FROM CURRENT}
...]
{IS | AS}
[PRAGMA AUTONOMOUS_TRANSACTION; ]
[ declarations ]
BEGIN
statements
END [ name ];
説明
CREATE PROCEDUREは、新しいストアド・プロシージャーを定義します。 CREATE OR REPLACE PROCEDUREは、新しいプロシージャを作成するか、既存の定義を置き換えます。
スキーマ名が含まれている場合、プロシージャーは指定されたスキーマに作成されます。それ以外の場合は、現在のスキーマに作成されます。新しいプロシージャの名前は、同じスキーマ内の同じ入力引数型を持つ既存のプロシージャと一致していてはなりません。しかし、異なる入力引数型のプロシージャは名前を共有することがあります(これは オーバーロード と呼ばれます )。 (プロシージャのオーバーロードはAdvanced Serverの機能であり、ストアド・スタンドアロン・プロシージャのオーバーロードはOracleデータベースと互換性がありません)。
既存のプロシージャーの定義を更新するには、 CREATE OR REPLACE PROCEDUREを 使用します 。このようにプロシージャの名前または引数の型を変更することはできません(試した場合は、実際には新しいプロシージャを作成することになります)。 OUTパラメーターを使用する場合は、プロシージャーをドロップすることを除いて、 OUTパラメーターのタイプを変更することはできません。
パラメーター
name はプロシージャの識別子です。
パラメーター
parameters は仮パラメータのリストです。
宣言
宣言 は、変数、カーソル、型、または副プログラムの宣言です。サブプログラム宣言が含まれている場合は、他のすべての変数宣言、カーソル宣言、および型宣言の後に宣言する必要があります。
ステートメント
ステートメント SPL プログラムステートメントです( BEGIN - END ブロックには EXCEPTIONセクションが含まれる場合があります )。
不変
安定
揮発性
これらの属性は、問合せオプティマイザにプロシージャの動作を通知します。 1つの選択肢しか指定できません。 VOLATILE はデフォルトの動作です。
IMMUTABLE は、プロシージャーがデータベースを変更できず、同じ引き数値が与えられたときに常に同じ結果に達することを示します。データベース参照を行わず、引数リストに直接存在しない情報を使用しません。この句をインクルードすると、すべて定数の引数を持つプロシージャの呼び出しをすぐにプロシージャの値に置き換えることができます。
STABLE は、プロシージャーがデータベースを変更できず、単一の表スキャン内で、同じ引き数値に対して同じ結果を一貫して戻しますが、結果がSQLステートメントで変更される可能性があることを示します。これは、データベースルックアップ、パラメータ変数(現在のタイムゾーンなど)に依存するプロシージャの適切な選択です。
VOLATILE は、単一の表スキャン内でもプロシージャ値が変更可能であるため、最適化を実行できないことを示します。副作用のある関数は、呼び出しが最適化されないように、結果がかなり予測可能であっても、揮発性に分類されなければならないことに注意してください。
決定的
DETERMINISTICIMMUTABLEの同義語です DETERMINISTIC プロシージャーはデータベースを変更することはできず、同じ引き数値が与えられたときに常に同じ結果になります。データベース参照を行わず、引数リストに直接存在しない情報を使用しません。この句をインクルードすると、すべて定数の引数を持つプロシージャの呼び出しをすぐにプロシージャの値に置き換えることができます。
[NOT] LEAKPROOF
漏れ防止の 手順は、副作用がなく、プロシージャを呼び出すために使用される値に関する情報を明らかにしません。
NULL入力で呼び出される
ヌル入力でNULLを返す
STRICT
呼び出される ヌル INPUT (デフォルト)は、引数の一部が NULLの 場合にプロシージャが正常に呼び出されることを示し ます 必要に応じ NULL をチェックし、 適切に応答するの は作者の責任 です。
戻り値 ヌル ヌル INPUT または STRICT 、その引数のいずれか NULL の場合は必ずプロシージャが NULL を返すことを示し ます 。これらの句が指定されている場合、 NULL 引数 がある場合はプロシージャは実行されません 。代わりに NULL という結果が自動的想定されます。
[外部]セキュリティディフェンダー
セキュリティ DEFINER は、プロシージャを作成したユーザーの権限でプロシージャを実行するように指定します。これがデフォルトです。キーワード EXTERNAL はSQL準拠には使用できますが、オプションです。
[外部]セキュリティ・インボーカ
SECURITY INVOKER 句は、プロシージャがそれを呼び出すユーザの権限で実行されることを示します。キーワード EXTERNAL はSQL準拠には使用できますが、オプションです。
AUTHID DEFINER
AUTHID CURRENT_USER
AUTHID DEFINER 句は、 [EXTERNAL]の 同義語です セキュリティ DEFINER AUTHID が省略された 場合 、または AUTHID 場合 DEFINER が指定されている場合は、プロシージャ所有者の権限を使用してデータベース・オブジェクトへのアクセス権限が決定されます。
AUTHID CURRENT_USER 句は、 [EXTERNAL]の 同義語です セキュリティ INVOKER AUTHIDの 場合 CURRENT_USER が指定されている場合、プロシージャを実行している現行ユーザーの権限を使用してアクセス権限が決定されます。
パラレル{UNSAFE |制限された|安全 }
PARALLEL 句は、並列逐次走査(パラレルモード)の使用を可能にします。 並列逐次スキャンは、逐次逐次スキャンとは対照的に、クエリ中に複数のワーカーを使用してリレーションを並行してスキャンします。
UNSAFE 設定すると 、パラレルモードでは実行できません。このようなプロシージャが存在すると、シリアル実行プランが強制されます。これは、 PARALLEL 句が省略された 場合のデフォルト設定です
RESTRICTED 設定する と、プロシージャはパラレルモードで実行できますが、実行はパラレルグループリーダーに制限されます。特定の関係の資格に並行制限があるものがあれば、その関係は並列性のために選択されません。
SAFE 設定されている場合 、プロシージャは制限なしでパラレルモードで実行できます。
COSTの 実行 _ コスト
実行 _ コストは、CPU _ オペレータ _ コスト の単位で手順の推定実行コストを与える正の数です 。プロシージャーがセットを戻す場合、これは戻された行あたりのコストです。値を大きくすると、プランナは必要以上に機能を評価しないようにします。
ROWSは _ 行の 結果
result _ rows は、プランナがプロシージャが返すと予想する行の推定数を示す正の数です。これは、プロシージャがセットを返すと宣言されている場合にのみ許可されます。デフォルトの仮定は1000行です。
SET 設定 _ パラメータ {TO | = | FROM CURRENT}
SET は、指定された設定パラメータは、手順が入力されると、指定された値に設定され、その前の値場合の処理手順が終了に復帰させます。 セット から CURRENT は、プロシージャーに入ったときに適用される値として、セッションの現行のパラメーター値を 保管 します。
場合 SET SET は、プロシージャに装着され、その後、効果 同じ変数のプロシージャー内で実行される LOCAL コマンドは、プロシージャーに限定されています。プロシージャ出口で構成パラメータの事前値がリストアされます。 (LOCALなし 通常の SET コマンド 、前の SET のために行うだろう限り、SET句 上書きします 現在のトランザクションがロールバックされない限り、プロシージャの終了後にそのようなコマンドの効果が持続する LOCAL コマンド。
PRAGMA AUTONOMOUS_TRANSACTION
PRAGMA AUTONOMOUS_TRANSACTIONは、プロシージャを自律型トランザクションとして設定するディレクティブです。
注: STRICTLEAKPROOFPARALLELCOSTROWSおよびSETキーワードはAdvanced Serverの拡張機能を提供し、Oracleではサポートされていません。
注: IMMUTABLE、STABLE、STRICT、 漏れ防止コスト 、ROWSおよびPARALLEL {UNSAFE |制限された| SAFE}属性は、EDB SPLプロシージャーでのみサポートされています。
注意:デフォルトでは、ストアドプロシージャはセキュリティディレクタとして作成されます。 plpgsqlで定義されたストアド・プロシージャは、 SECURITY INVOKERSとして作成されます。
次の手順では、 empテーブルの従業員を一覧表示します。
CREATE OR REPLACE PROCEDURE list_emp
IS
v_empno NUMBER(4);
v_ename VARCHAR2(10);
CURSOR emp_cur IS
SELECT empno, ename FROM emp ORDER BY empno;
BEGIN
OPEN emp_cur;
DBMS_OUTPUT.PUT_LINE('EMPNO ENAME');
DBMS_OUTPUT.PUT_LINE('----- -------');
LOOP
FETCH emp_cur INTO v_empno, v_ename;
EXIT WHEN emp_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_empno || ' ' || v_ename);
END LOOP;
CLOSE emp_cur;
END;
 
EXEC list_emp;
 
EMPNO ENAME
----- -------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
次のプロシージャは、 IN OUTおよびOUT引数を使用して、最初に指定した従業員番号を使用した検索に基づいて従業員の番号、名前、およびジョブを戻し、見つからない場合は指定された名前を使用します。無名ブロックが手続きを呼び出します。
CREATE OR REPLACE PROCEDURE emp_job (
p_empno IN OUT emp.empno%TYPE,
p_ename IN OUT emp.ename%TYPE,
p_job OUT emp.job%TYPE
)
IS
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_job emp.job%TYPE;
BEGIN
SELECT ename, job INTO v_ename, v_job FROM emp WHERE empno = p_empno;
p_ename := v_ename;
p_job := v_job;
DBMS_OUTPUT.PUT_LINE('Found employee # ' || p_empno);
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
SELECT empno, job INTO v_empno, v_job FROM emp
WHERE ename = p_ename;
p_empno := v_empno;
p_job := v_job;
DBMS_OUTPUT.PUT_LINE('Found employee ' || p_ename);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Could not find an employee with ' ||
'number, ' || p_empno || ' nor name, ' || p_ename);
p_empno := NULL;
p_ename := NULL;
p_job := NULL;
END;
END;
 
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_job emp.job%TYPE;
BEGIN
v_empno := 0;
v_ename := 'CLARK';
emp_job(v_empno, v_ename, v_job);
DBMS_OUTPUT.PUT_LINE('Employee No: ' || v_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || v_job);
END;
 
Found employee CLARK
Employee No: 7782
Name : CLARK
Job : MANAGER
次の例は、プロシージャ宣言でAUTHID DEFINERおよびSETを使用する方法を示しています。 更新 _ 給与の 手順は(手順の実行中)プロシージャを呼び出している役割に手順を定義したロールの権限を伝えます
CREATE OR REPLACE PROCEDURE update_salary(id INT, new_salary NUMBER)
SET SEARCH_PATH = 'public' SET WORK_MEM = '1MB'
AUTHID DEFINER IS
BEGIN
UPDATE emp SET salary = new_salary WHERE emp_id = id;
END;
プロシージャの検索パスを public に、ワークメモリを 1MB に設定するに は、 SET 句を 含めます 。他のプロシージャ、関数、およびオブジェクトは、これらの設定の影響を受けません。
この例では、 AUTHID DEFINER 句は、プロシージャ内の文の実行を許可されないロールに一時的に権限を付与します。プロシージャを呼び出すロールに関連付けられた権限を使用するようにサーバーに指示するには、 AUTHID AUTHIDを 持つ DEFINER CURRENT _ USER 節。
関連項目
除外手順
 
2.3.26 PROFILEのCREATE
CREATE PROFILE - 新しいプロファイルを作成する
シノプシス
CREATE PROFILE profile_name
[LIMIT { parameter value } ... ];
説明
CREATE PROFILE は新しいプロファイルを作成します。 Advanced Serverによって実行されるルールを指定するには LIMIT 句と1つ以上のスペース区切り パラメータ / 値の ペアを 含め ます。
Advanced Serverは DEFAULT という名前のデフォルトプロファイルを作成しますCREATE ROLEコマンドを使用して新しいロールを作成すると、新しいロールは自動的にDEFAULTプロファイルに関連付けられます。 以前のバージョンのAdvanced ServerからAdvanced Server 10にアップグレードすると、アップグレードプロセスによって、アップグレードされたバージョンのロールが DEFAULT プロファイルに 自動的に作成され ます。
CREATE を使用するには、スーパーユーザーでなければなりません プロフィール
Advanced Serverによって実行されるルールを指定するには LIMIT 句と1つ以上のスペース区切り パラメータ / 値の ペアを 含め ます。
パラメーター
プロファイル名
プロファイルの名前。
パラメータ
ルールによって監視されるパスワード属性。
パラメータは、 アクションの前に到達しなければならない 値は、 サーバーで使用されています。
Advanced Serverは、 パラメータ について以下 値を サポートしてい ます
FAILED_LOGIN_ATTEMPTSは、サーバーがPASSWORD_LOCK_TIMEで指定された時間、アカウントからユーザーをロックする前に、ユーザーが失敗したログイン試行の回数を指定します。サポートされる値は次のとおりです。
0 以上 の整数
DEFAULT - DEFAULT プロファイルで 指定された FAILED_LOGIN_ATTEMPTS の値
無制限 - 接続しているユーザーは、失敗したログイン試行回数を無制限にすることがあります。
PASSWORD_LOCK_TIME は、サーバーが FAILED_LOGIN_ATTEMPTSの ためにロックされたアカウントのロックを解除するまでの時間を指定します サポートされる値は次のとおりです。
0以上 数値 。 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULTプロファイルで指定されたPASSWORD_LOCK_TIMEの値。
無制限 -アカウントはデータベーススーパーユーザーによって手動でロック解除されるまでロックされます。
PASSWORD_LIFE_TIMEは、ユーザーに新しいパスワードを入力する前に現在のパスワードを使用する日数を指定します。 PASSWORD _ LIFE _ TIME句を使用する場合は、 PASSWORD _ GRACE _ TIME句を含めて、ロールによる接続が拒否されるまでにパスワードが期限切れになってから経過する日数を指定します。 PASSWORD _ GRACE _ TIMEが指定されていない場合、パスワードはPASSWORD _ GRACE _ TIMEのデフォルト値で指定された日に期限切れになり、ユーザーは新しいパスワードが提供されるまでコマンドを実行できなくなります。サポートされる値は次のとおりです。
0 以上 数値 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_LIFE_TIME の値
無制限 - パスワードの有効期限はありません。
PASSWORD_GRACE_TIME パスワードが期限切れになった後、ユーザがパスワードを変更するまでの猶予期間の長さを示します。猶予期間が切れると、ユーザーは接続を許可されますが、期限切れのパスワードを更新するまでコマンドを実行することはできません 。サポートされる値は次のとおりです。
0 以上 数値 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_GRACE_TIME の値
無制限 - 猶予期間は無限です。
PASSWORD_REUSE_TIME、ユーザーがパスワードを使用するまで待機する日数を指定ます。 PASSWORD _ REUSE _ TIMEPASSWORD _ REUSE _ MAXパラメーターは、一緒に使用するためのものです。これらのパラメータの1つに有限値を指定し、他のパラメータを無制限に指定すると 、古いパスワードを決して再利用することはできません。両方のパラメータがUNLIMITEDに設定されている場合は、パスワードの再利用に制限はありません。サポートされる値は次のとおりです。
0 以上 数値 1日の小数部分を指定するには、小数値を指定します。たとえば、値4.5を使用して412時間を指定します。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_REUSE_TIME の値
無制限 - パスワードは制限なしで再利用できます。
PASSWORD_REUSE_MAX、パスワードを再利用できるようにするために必要なパスワードの変更回数を指定します。 PASSWORD _ REUSE _ TIMEPASSWORD _ REUSE _ MAXパラメーターは、一緒に使用するためのものです。これらのパラメータの1つに有限値を指定し、他のパラメータを無制限に指定すると 、古いパスワードを決して再利用することはできません。両方のパラメータがUNLIMITEDに設定されている場合は、パスワードの再利用に制限はありません。サポートされる値は次のとおりです。
0 以上 INTEGER
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_REUSE_MAX の値
無制限 - パスワードは制限なしで再利用できます。
PASSWORD_VERIFY_FUNCTIONはパスワードの複雑さを指定します。サポートされる値は次のとおりです。
DEFAULT - DEFAULT プロファイルで 指定された PASSWORD_VERIFY_FUNCTION の値
ノート
プロファイルを削除するには、 DROP PROFILEコマンドを使用します。
次のコマンドは、 acctg という名前のプロファイルを作成します 。このプロファイルでは、ユーザーが5回の試行で正しいパスワードで認証されなかった場合、そのアカウントは1日ロックされます。
CREATE PROFILE acctg LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1;
次のコマンドは、 sales という名前のプロファイルを作成します 。プロファイルでは、90日ごとにパスワードを変更する必要があることを指定しています。
CREATE PROFILE sales LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 3;
プロファイルで指定された90日が経過する前にユーザーがパスワードを変更していない場合は、ログイン時に警告が表示されます。 3日間の猶予期間が経過すると、パスワードを変更するまでアカウントのコマンドを呼び出すことができなくなります。
次のコマンドは、 accts という名前のプロファイルを作成します 。このプロファイルでは、パスワードを最後に使用してから180日以内にユーザーがパスワードを再使用できないように指定しています。パスワードを再使用する前に少なくとも5回パスワードを変更する必要があります。
CREATE PROFILE accts LIMIT
PASSWORD_REUSE_TIME 180
PASSWORD_REUSE_MAX 5;
次のコマンドは、 resources という名前のプロファイルを作成します 。プロファイルは、指定されたパスワードが複雑さの基準を満たしていることを確認するpassword_rulesという名前のユーザー定義関数を呼び出します。
CREATE PROFILE resources LIMIT
PASSWORD_VERIFY_FUNCTION password_rules;
 
2.3.27 CREATE QUEUE
Advanced Serverには CREATE QUEUE SQL コマンドで 追加の構文(Oracleでは提供されていません)が含まれています 。この構文は、 DBMS_AQADM に関連して使用でき ます
CREATE QUEUE - キューを作成します。
シノプシス
CREATEを 使用 新しいキューを定義するための QUEUE
CREATE QUEUE name QUEUE TABLE キュー _ テーブル _ 名前 [({ オプション _ 名前 オプション _ } [、...])]
どこ オプション _ と対応する option_valueを することができます:
TYPE [normal_queue | exception_queue]
戻り値[INTEGER]
再試行[ダブルプレシジョン]
留意事項[ダブルプレシジョン]
説明
CREATE QUEUEコマンドは、データベースのスーパーユーザまたはシステム定義の水溶液現在のデータベースに新しいキューを作成するには、 管理者 _ _ 役割権限を持つすべてのユーザーに許可します。
キューの名前がスキーマで修飾されている場合、キューは指定されたスキーマに作成されます。スキーマが CREATE QUEUEコマンドに含まれていない場合、キューは現在のスキーマに作成されます。キューは、そのキュー・テーブルが存在するスキーマ内にのみ作成できます。キューの名前は、同じスキーマ内の他のキューの名前と一意でなければなりません。
キューを削除するには、 DROP QUEUE使用します。
パラメーター
作成されるキューの名前(スキーマ修飾名でも可)。
queue_table_name
このキューが関連付けられているキューテーブルの名前。
option_name option_value
新しいキューに関連付けられるオプションの名前と、オプションに対応する値。 CREATE QUEUE の呼び出しに重複したオプション名が含まれていると、サーバーはエラーを返します。次の値がサポートされています。
Specify normal _ queue to indicate that the queue is a normal queue, or exception _ queue to indicate that the queue is an exception queue. An exception queue will only accept dequeue operations.
value that specifies the maximum number of attempts to remove a message from a queue. An INTEGER value that specifies the maximum number of attempts to remove a message from a queue.
A DOUBLE that the server will wait before retrying a message. value that specifies the number of seconds after a ROLLBACK value that specifies the number of seconds after a PRECISION value that specifies the number of seconds after a that the server will wait before retrying a message.
A DOUBLE value that specifies the number of seconds that a message will be saved in the queue table after dequeueing. PRECISION value that specifies the number of seconds that a message will be saved in the queue table after dequeueing.
 
次のコマンドは、キューの名前を作成 work_order_table という名前のキュー表に関連付けられている work_orderを
CREATE QUEUE work_order QUEUE TABLE work_order_table (RETRIES 5, RETRYDELAY 2);
サーバーは、キューからメッセージを削除する5回の試行を許可し、試行の間に2秒の再試行遅延を強制します。
関連項目
ALTER QUEUE DROP QUEUE
 
2.3.28 CREATE QUEUE TABLE
Advanced Serverには、 CREATE QUEUE TABLE SQL コマンドで 追加の構文(Oracleでは提供されていません)が含まれています 。この構文は、 DBMS_AQADM に関連して使用でき ます
CREATE QUEUE TABLE - 新しいキュー表を作成します。
シノプシス
CREATE QUEUEを 使用する 新しいキューテーブルを定義する TABLE
CREATE QUEUE TABLE name of タイプ _ name [({ option _ name オプション _ } [、...])]
どこで option _ nameおよび対応するoption_value は次のいずれかです。
TABLESPACE tablespace _ name , PCTFREE integer, PCTUSED integer, INITRANS integer, MAXTRANS integer, STORAGE storage_option
Where storage _ option is one or more of the following:
MINEXTENTS integer, MAXEXTENTS integer, PCTINCREASE integer, INITIAL size _ clause , NEXT, FREELISTS integer, OPTIMAL size _ clause , BUFFER_POOL {KEEP|RECYCLE|DEFAULT}.

TABLESPACE option is enforced; all others are accepted for compatibility and ignored. Use the Please note that only the option is enforced; all others are accepted for compatibility and ignored. Use the Please note that only the option is enforced; all others are accepted for compatibility and ignored. Use the TABLESPACE clause to specify the name of a tablespace in which the table will be created. option is enforced; all others are accepted for compatibility and ignored. Use the clause to specify the name of a tablespace in which the table will be created.
説明
QUEUE表を作成する スーパーユーザーまたは 水溶液 を持つユーザ _ _ 管理者の 役割の 権限が新しいキュー表を作成する ことができます
CREATE QUEUE TABLE への呼び出しにスキーマ名が含まれている場合は 、指定されたスキーマにキュー表が作成されます。スキーマ名が指定されていない場合は、新しいキュー表が現行スキーマに作成されます。
キュー表の名前は、同じスキーマ内の他のキュー表の名前と一意でなければなりません。
パラメーター
新しいキュー表の名前(スキーマ修飾名も可)。
タイプ名
キュー・テーブルの各エントリのペイロードを記述する既存のタイプの名前。型の定義については、「 CREATE TYPE 」を参照してください
option_name option_value
新しいキュー表に関連付けられるオプションの名前と、オプションに対応する値。 CREATE QUEUE TABLEの 呼び出しに重複するオプション名が含まれていると、サーバーはエラーを返します。受け入れられる値は次のとおりです。
option to control the dequeueing order of the queue; specify the names of the column(s) that will be used to sort the queue (in ascending order). The currently accepted values are the following combinations of Use the SORT _ LIST option to control the dequeueing order of the queue; specify the names of the column(s) that will be used to sort the queue (in ascending order). The currently accepted values are the following combinations of Use the option to control the dequeueing order of the queue; specify the names of the column(s) that will be used to sort the queue (in ascending order). The currently accepted values are the following combinations of enq _ time and priority :
enq _ time . priority
priority . enq _ time
enq _ time
A BOOLEAN value that indicates if a message can have more than one consumer ( TRUE ), or are limited to one consumer per message ( FALSE ).
MESSAGE _ GROUPING
to indicate that each message should be dequeued individually, or none to indicate that each message should be dequeued individually, or Specify to indicate that each message should be dequeued individually, or transactional to indicate that messages that are added to the queue as a result of one transaction should be dequeued as a group. transactional to indicate that messages that are added to the queue as a result of one transaction should be dequeued as a group.
STORAGE _ CLAUSE to specify table attributes. Use to specify table attributes. STORAGE _ CLAUSE may be TABLESPACE tablespace _ name , PCTFREE integer, PCTUSED integer, INITRANS integer, MAXTRANS integer, STORAGE storage_option
Where storage _ option is one or more of the following:
MINEXTENTS integer, MAXEXTENTS integer, PCTINCREASE integer, INITIAL size _ clause , NEXT, FREELISTS integer, OPTIMAL size _ clause , BUFFER_POOL {KEEP|RECYCLE|DEFAULT}.

TABLESPACE option is enforced; all others are accepted for compatibility and ignored. Use the Please note that only the option is enforced; all others are accepted for compatibility and ignored. Use the Please note that only the option is enforced; all others are accepted for compatibility and ignored. Use the TABLESPACE clause to specify the name of a tablespace in which the table will be created. option is enforced; all others are accepted for compatibility and ignored. Use the clause to specify the name of a tablespace in which the table will be created.
 
 
キュー表を作成する前に、ユーザー定義型を作成する必要があります。この型は、表内の列とデータ型を記述します。次のコマンドは、 work _ order という名前の型を作成します
CREATE TYPE work_order AS (name VARCHAR2, project TEXT, completed BOOLEAN);
次のコマンドは、使用しています work_order_table という名前のキュー表を作成するために、 作業 _ オーダータイプ
CREATE QUEUE TABLE work_order_table OF work_order (sort_list (enq_time, priority));
関連項目
ALTER QUEUE TABLE DROP QUEUE TABLE
 
 
2.3.29 CREATE ROLE
CREATE ROLE - 新しいデータベースロールを定義する
シノプシス
CREATE ROLE name [IDENTIFIED BY password [REPLACE old_password ] ]
説明
CREATE ROLEは、 Advanced Serverデータベース・クラスタに新しいロールを追加します。ロールは、データベースオブジェクトを所有し、データベース権限を持つことができるエンティティです。役割は、その使用方法に応じて、「ユーザー」、「グループ」、またはその両方とみなすことができます。新しく作成されたロールはLOGIN属性を持たないため、セッションを開始するために使用することはできません。役割のログイン権を付与するには、 ALTER ROLEコマンドを使用します。 CREATE ROLEコマンドを使用するには、 CREATEROLE特権が必要です
場合 IDENTIFIED BY指定されている、CREATE ROLEコマンドもが所有するスキーマを作成し、新しく作成された役割と同じ名前を持ちます。
ロールはデータベースクラスタレベルで定義されるため、クラスタ内のすべてのデータベースで有効です。
パラメーター
新しいロールの名前。
パスワードで 識別
役割のパスワードを設定します。 (パスワードは、 LOGIN属性を持つロールに対してのみ使用されますが、パスワードなしでロールにもパスワードを定義できます)。パスワード認証を使用しない場合は、このオプションを省略できます。
ノート
ロールの属性を変更するには ALTER ROLE使用しロールを削除するにはDROP ROLEを使用します。 CREATE ROLEで指定された属性は、後のALTER ROLEコマンドで変更できます。
使用 GRANTを追加およびグループとして使用されている役割のメンバーを削除するREVOKE。
ロール名とパスワードの最大長制限は63文字です。
admins という名前のロール(およびスキーマ)をパスワードとともに作成します。
CREATE ROLE admins IDENTIFIED BY Rt498zb;
関連項目
ALTER ROLE DROP ROLE GRANT REVOKE SET ROLE
 
2.3.30 CREATE SCHEMA
CREATE SCHEMA - 新しいスキーマを定義する
シノプシス
CREATE SCHEMA AUTHORIZATION username schema_element [ ... ]
説明
CREATE SCHEMAコマンドのこのバリエーションは、 usernameが所有する新しいスキーマを作成し、1つ以上のオブジェクトで作成されます。スキーマとオブジェクトの作成は、単一のトランザクション内で行われるため、すべてのオブジェクトが作成されるか、スキーマを含めて作成されません。 ( ご注意 :Oracleデータベースを使用している場合は、新しいスキーマが作成されていない- ユーザ名 、およびそのためのスキーマを、事前に存在している必要があります。)
スキーマは本質的に名前空間です。名前は、他のスキーマに存在する他のオブジェクトの名前と重複する名前のオブジェクト(テーブル、ビューなど)を含みます。名前付きオブジェクトは、スキーマ名を接頭辞として名前を「修飾」するか、目的のスキーマを含む検索パスを設定することによってアクセスされます。非修飾オブジェクトは、現在のスキーマ(検索パスの前にあるもの、 CURRENT_SCHEMA 関数を使用して判別できます )に作成されます。 (検索パスの概念とCURRENT_SCHEMA関数はOracleデータベースと互換性がありません)。
CREATE SCHEMAには、スキーマ内にオブジェクトを作成するためのサブコマンドが含まれています。サブコマンドは、スキーマの作成後に発行される別々のコマンドと本質的に同じように扱われます。作成されたすべてのオブジェクトは、指定されたユーザーが所有します。
パラメーター
ユーザー名
新しいスキーマを所有するユーザーの名前。スキーマの名前は username と同じになり ます 。スーパーユーザーだけが自分以外のユーザーが所有するスキーマを作成することができます。 ( ご注意 :Advanced Serverには役割は、 ユーザー名は 、すでに存在している必要がありますが、スキーマが存在してはならないオラクルでは、ユーザが(同等に、スキーマ)が存在している必要があります。)
schema_element
スキーマ内で作成されるオブジェクトを定義する SQLステートメント。 CREATE TABLECREATE VIEW 、およびGRANTは、 CREATE SCHEMA内の句として受け入れられます。スキーマの作成後、別の種類のオブジェクトが別々のコマンドで作成されることがあります。
ノート
スキーマを作成するには、起動するユーザーが現行データベースのCREATE特権を持っている必要があります。 (もちろん、スーパーユーザはこのチェックをバイパスします。)
Advanced Server、Oracle データベースとの互換性はありませんCREATE SCHEMAコマンドの他の形式があります。
CREATE SCHEMA AUTHORIZATION enterprisedb
CREATE TABLE empjobs (ename VARCHAR2(10), job VARCHAR2(9))
CREATE VIEW managers AS SELECT ename FROM empjobs WHERE job = 'MANAGER'
GRANT SELECT ON managers TO PUBLIC;
 
2.3.31 CREATE SEQUENCE
CREATE SEQUENCE - 新しいシーケンスジェネレータを定義する
シノプシス
CREATE SEQUENCE name [ INCREMENT BY increment ]
[ { NOMINVALUE | MINVALUE minvalue } ]
[ { NOMAXVALUE | MAXVALUE maxvalue } ]
[ START WITH start ] [ CACHE cache | NOCACHE ] [ CYCLE ]
説明
CREATE SEQUENCE は新しいシーケンス番号ジェネレータを作成します。これには、名前、 名前の 新しい特別な単一行テーブルの作成と初期化が含まれます 。ジェネレータは、コマンドを発行したユーザが所有します。
スキーマ名が指定されている場合は、指定されたスキーマにシーケンスが作成されます。そうでない場合は、現在のスキーマに作成されます。シーケンス名は、同じスキーマ内の他のシーケンス、表、索引、またはビューの名前とは異なるものでなければなりません。
シーケンスが作成された後、 NEXTVALおよびCURRVAL ファンクションを使用してシーケンスを操作します。これらの関数については、 2.4.9
パラメーター
作成するシーケンスの名前(スキーマ修飾名も可)
インクリメント
オプションの節 INCREMENT によって increment は、現在のシーケンス値に追加する値を指定して新しい値を作成します。正の値は昇順のシーケンスを、負の値は降順のシーケンスを作成します。デフォルト値は1です。
NOMINVALUE | MINVALUEの最小
オプションの節 MINVALUE minvalue は、シーケンスが生成できる最小値を決定します。この節が指定されていない場合、デフォルトが使用されます。 昇順と降順のそれぞれ のデフォルトは1と-2 63 -1です。キーワード NOMINVALUEを 使用して、この動作をデフォルトに設定することができます。
NOMAXVALUE | MAXVALUE maxvalue
オプション節 MAXVALUE maxvalue は、シーケンスの最大値を決定します。この句を指定しないと、デフォルト値が使用されます。 昇順および降順のそれぞれ のデフォルトは2 63 -1および-1です。キーワード NOMAXVALUEを 使用して、この動作をデフォルトに設定できます。
開始
オプション節 START WITH start は、シーケンスがどこからでも 開始 できるようにします。デフォルトの開始値は 、昇順シーケンスと ものを降順ため MAXVALUE ため MINVALUE です
キャッシュ
オプションの CACHE キャッシュ は、より早くアクセスできるように、事前割り当てされ、メモリに格納されるシーケンス番号の数を指定します。最小値は1です(一度に生成できる値は NOCACHEのみです )。これもデフォルトです。
サイクル
MAXVALUE または MINVALUEが 昇順で到達したか、それぞれ降順された 際に CYCLE オプションは、シーケンスがラップアラウンドすることができます 限界に達した場合、生成された次の番号は、それぞれ、MINVALUE または MAXVALUE であろう
場合 CYCLEは (デフォルト)省略され、シーケンスの後NEXTVALへの呼び出しは、その最大値はエラーを返します達しています。キーワードNO CYCLEを使用してデフォルトの動作を得ることができますが、この用語はOracleデータベースと互換性がありません。
ノート
シーケンスは大きな整数演算に基づいているため、範囲は8バイト整数(-9223372036854775808〜9223372036854775807)の範囲を超えることはできません。いくつかの古いプラットフォームでは、8バイト整数に対するコンパイラのサポートがない場合があります。この場合、シーケンスでは通常の INTEGER演算(-2147483648〜+ 2147483647の範囲)が使用されます。
複数のセッションで同時に使用されるシーケンスオブジェクトに1より大きいキャッシュ設定を使用すると、 予期しない結果が得られることがあります。各セッションは、シーケンスオブジェクトへの1回のアクセス中に連続したシーケンス値を割り当ててキャッシュし、それに応じてシーケンスオブジェクトの最終値を増加させます。次に、そのセッション内の次のキャッシュ -1のNEXTVALの使用は、シーケンスオブジェクトに触れることなく、事前に割り当てられた値を単に返すだけです。したがって、セッション内で割り当てられているが使用されていない番号は、そのセッションが終了すると失われ、その結果、シーケンス内に「穴」が生じます。
さらに、複数のセッションが別個のシーケンス値を割り当てることが保証されているが、すべてのセッションが考慮されるときに値が順序どおりに生成されないことがある。たとえば、 キャッシュ設定が10の場合、セッションAは値1..10を予約してNEXTVAL = 1を返し、セッションBは値11..20を予約し、セッションAがNEXTVAL = 2を生成する前にNEXTVAL = 11を戻します 。したがって、 キャッシュ設定が1の場合、 NEXTVAL値が順次生成されると仮定することは安全です。 キャッシュ設定が1より大きい場合、 NEXTVAL値はすべて純粋に連続して生成されるのではなく、すべてが異なると仮定するだけですみます。また、最後の値は、 NEXTVALによってまだ戻されているかどうかに関係なく、どのセッションでも予約されている最新の値を反映します
シリアル 番号 101から始まる 昇順シーケンスを作成します
CREATE SEQUENCE serial START WITH 101;
このシーケンスから次の番号を選択します。
SELECT serial.NEXTVAL FROM DUAL;
 
nextval
---------
101
(1 row)
NOCACHE オプションを指定 して supplier_seq というシーケンスを作成し ます。
CREATE SEQUENCE supplier_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
NOCACHE;
このシーケンスから次の番号を選択します。
SELECT supplier_seq.NEXTVAL FROM DUAL;
 
nextval
---------
1
(1 row)
関連項目
ALTER SEQUENCE DROP SEQUENCE
 
2.3.32 シノニムを作成
CREATE SYNONYM - 新しいシノニムを定義する
シノプシス
CREATE [OR REPLACE] [PUBLIC] SYNONYM [ スキーマ 。] syn _ name
FOR
オブジェクト _ スキーマ オブジェクト _ 名前 [ @dblink_name ];
説明
CREATE SYNONYM は、特定のタイプのデータベース・オブジェクトの同義語を定義します。 Advanced Serverは以下の同義語をサポートしています。
パラメーター:
syn_name
syn_name は同義語の名前です。シノニム名は、スキーマ内で一意でなければなりません。
スキーマ
schema は、シノニムが存在するスキーマの名前を指定します。スキーマ名を指定しない場合、シノニムは検索パスの最初の既存スキーマに作成されます。
オブジェクト名
object_name は、オブジェクトの名前を指定します。
object_schema
object_schema は、参照オブジェクトが存在するスキーマの名前を指定します。
dblink_name
dblink_name は、オブジェクトがアクセスされるデータベース・リンクの名前を指定します。
既存の同義語定義を新しい同義語定義に置き換えるには REPLACE 句を 含めます
パブリック・スキーマにシノニムを作成するには PUBLIC句を含めます。 CREATE PUBLIC SYNONYMコマンドは、Oracleデータベースと互換性があり、 パブリック・スキーマに存在するシノニムを作成します。
CREATE [OR REPLACE] PUBLIC SYNONYMの OBJECT_SCHEMA FOR シン _ object_name ;
これはちょっと書いた簡単な方法です:
CREATE [OR REPLACE] SYNONYM publicを作成します。 syn _ name FOR object_schema object_name ;
ノート
シノニムによって参照されるオブジェクトへのアクセスは、シノニムの現在のユーザの許可によって決定される。シノニム・ユーザーは、基礎となるデータベース・オブジェクトに対して適切な権限を持っていなければなりません。
enterprisedbという名前のスキーマ内 emp表のシノニムを作成します
CREATE SYNONYM personnel FOR enterprisedb.emp;
関連項目
シノニムを捨てる
 
2.3.33 CREATE TABLE
CREATE TABLE - 新しいテーブルを定義する
シノプシス
CREATE [ GLOBAL TEMPORARY ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ]
[ column_constraint [ ... ] ] | table_constraint } [, ...]
)
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
[ TABLESPACE tablespace ]
ここで、 column_constraintは次のとおりです。
[ CONSTRAINT constraint_name ]
{ NOT NULL |
NULL |
UNIQUE [ USING INDEX TABLESPACE tablespace ] |
PRIMARY KEY [ USING INDEX TABLESPACE tablespace ] |
CHECK ( expression ) |
REFERENCES reftable [ ( refcolumn ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED |
INITIALLY IMMEDIATE ]
そして table_constraintは以下とおりです。
[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ] |
PRIMARY KEY ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ] |
CHECK ( expression ) |
FOREIGN KEY ( column_name [, ...] )
REFERENCES reftable [ ( refcolumn [, ...] ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
説明
CREATE TABLEは、現在のデータベースに最初に空の新しいテーブルを作成します。テーブルは、コマンドを発行したユーザーが所有します。
スキーマ名が付けられている場合(例えば、 MYSCHEMAを 作成します 。mytableは ...)、テーブルは指定されたスキーマで作成されています。それ以外の場合は、現在のスキーマに作成されます。テンポラリ・テーブルは特別なスキーマに存在するため、テンポラリ・テーブルを作成するときにスキーマ名が与えられないことがあります。表名は、同じスキーマ内の他の表、順序、索引、またはビューの名前とは異なるものでなければなりません。
CREATE TABLEは、テーブルの1つの行に対応する複合型を表すデータ型も自動的に作成します。したがって、同じスキーマ内の既存のデータ型と同じ名前を持つ表はできません。
表は1600を超える列を持つことはできません。 (実際には、タプル長さの制約のために有効な制限がより低くなります)。
オプションの制約節は、挿入操作または更新操作が成功するために新規または更新された行が満たす必要がある制約(またはテスト)を指定します。制約は、さまざまな方法でテーブル内の有効な値のセットを定義するのに役立つSQLオブジェクトです。
制約を定義するには、テーブル制約と列制約の2つの方法があります。列制約は、列定義の一部として定義されます。表制約の定義は特定の列に限定されず、複数の列を含むことができます。すべての列制約は、表制約としても記述できます。制約が1つの列にしか影響しない場合、列制約は表記上の便宜のためにのみ使用されます。
パラメーター
グローバル暫定
指定すると、テーブルは一時テーブルとして作成されます。テンポラリテーブルは、セッションの終了時、またはオプションで現在のトランザクションの終了時に自動的に削除されます(下記の ON COMMITを参照)。同じ名前を持つ既存の永続表は、スキーマ修飾名で参照されていない限り、一時表が存在する間は現行セッションでは表示されません。さらに、テンポラリ・テーブルは、作成されたセッション外では表示されません。 (グローバル・テンポラリ・テーブルのこの側面は、Oracleデータベースと互換性がありません)。テンポラリ・テーブルで作成されたインデックスは、自動的に一時的にも作成されます。
テーブル名
作成するテーブルの名前(スキーマ修飾名でも可)。
列名
新しいテーブルに作成される列の名前。
データ・タイプ
列のデータ型。これには配列指定子が含まれます。 Advanced Server含まれているデータ型の 詳細については、第2.2節を参照してください。
DEFAULT default_expr
DEFAULT句は、列の定義、それは内に現れる列のデフォルトデータ値を割り当てます。値は任意の変数のない式です(サブクエリおよび現行表の他の列への相互参照は許可されていません)。デフォルトの式のデータ型は、列のデータ型と一致する必要があります。
デフォルトの式は、列の値を指定しない挿入操作で使用されます。列のデフォルト値がない場合、デフォルトはnullです。
CONSTRAINT CONSTRAINT_NAME
列または表の制約のオプションの名前。指定されていない場合、システムは名前を生成します。
NOT NULL
列にNULL値を含めることはできません。
ヌル
列にはNULL値を含めることができます。これがデフォルトです。
この句は、非標準 SQLデータベースとの互換性のためにのみ使用できます。新しいアプリケーションではその使用は推奨されません。
UNIQUE - 列制約
UNIQUE( column_name [、...]) - テーブル制約
UNIQUE制約は、表の1つの以上の別個の列のグループが一意の値だけを含むことができることを指定します。ユニークなテーブル制約の動作は、カラム制約の動作と同じで、複数のカラムにまたがる機能が追加されています。
ユニーク制約の目的では、NULL値は等価とはみなされません。
それぞれのユニークなテーブル制約は、そのテーブルに対して定義された他の一意キー制約またはプライマリキー制約によって指定された列のセットとは異なる列のセットに名前を付ける必要があります。 (それ以外の場合は、同じ制約が2回表示されます)。
PRIMARY KEY - 列制約
PRIMARY KEYcolumn_name [、...]) - テーブル制約
主キー制約は、テーブルの1つまたは複数の列に、一意の(重複しない)非NULL値のみが含まれることを指定します。技術的には、 PRIMARY KEYUNIQUENOT NULLの組み合わせにすぎませんが、主キーとして列のセットを識別すると、スキーマの設計に関するメタデータも提供されます。主キーとは、他のテーブルがこの列のセットを行の一意の識別子。
列制約または表制約のいずれであっても、表に対して指定できる主キーは1つのみです。
主キー制約は、同じテーブルに対して定義された一意制約によって指定された他の列セットとは異なる列セットに名前を付ける必要があります。
CHECK(
CHECK句は、新規または更新された行が成功するには、挿入または更新操作のために満たさなければならないBoolean型の結果を生成する式を指定します。 TRUEまたは "unknown"と評価される式は成功します。挿入操作または更新操作のいずれかの行がFALSE結果を生成すると、エラー例外が発生し、挿入または更新によってデータベースが変更されません。列制約として指定された検査制約は、その列の値のみを参照する必要がありますが、表制約に現れる式は複数の列を参照することがあります。
現在、 CHECK式にはサブクエリを含めることも、現在の行の列以外の変数を参照することもできません。
REFERENCES reftable [( refcolumn )] [ ON DELETE アクション ] - 列制約
FOREIGN KEY [、...]) REFERENCES reftable [( refcolumn [、...])] [ ON DELETE アクション ] - テーブル制約
これらの句は、外部キー制約を指定します。このため、新しいテーブルの1つ以上の列のグループには、参照先テーブルの一部の行の参照された列の値と一致する値のみが含まれている必要があります。場合 refcolumnが省略され、reftableのプライマリキーが使用されています。参照先の列は、参照先の表の一意キーまたは主キー制約の列でなければなりません。
さらに、参照列のデータが変更されると、この表の列のデータに対して特定のアクションが実行されます。 ON句DELETE参照表の参照行が削除されているときに実行するアクションを指定します。制約が遅延可能であっても、参照アクションを延期することはできません。各句には次のようなアクションがあります。
 
カスケード
削除された行を参照する行を削除するか、または参照元列の値を参照先列の新しい値にそれぞれ更新します。
SET NULL
参照する列を NULLに 設定し ます
参照される列が頻繁に変更される場合は、外部キー列に関連付けられた参照アクションをより効率的に実行できるように、外部キー列にインデックスを追加することをお勧めします。
DEFERRABLE
耐えられない
これは、制約を延期できるかどうかを制御します。遅延可能でない制約は、すべてのコマンドの直後にチェックされます。遅延可能な制約のチェックは、トランザクションの終了時まで( SET CONSTRAINTSコマンドを使用して延期される場合がありますNOT DEFERRABLEがデフォルトです。現在、この句は外部キー制約のみで受け入れられます。他のすべての制約タイプは遅延可能ではありません。
初回即時
初期にはデフォルメされた
制約が遅延可能な場合、この句は制約をチェックするデフォルトの時間を指定します。制約が INITIALLY IMMEDIATEの 場合は、各文の後にチェックされます。これがデフォルトです。制約がINITIALLY DEFERREDの場合、トランザクションの終了時にのみチェックされます。制約チェック時間は、 SET CONSTRAINTSコマンドで変更できます。
ON COMMIT
トランザクションブロックの終わりにある一時テーブルの動作は、 ON COMMIT を使用して制御できます 。次の2つのオプションがあります。
行を保存する
取引終了時に特別な措置はとられません。これがデフォルト動作です。 (このアスペクトは Oracleデータベースと互換性 がありません .OracleのデフォルトはDELETE ROWSです)。
 
 
行を削除する
テンポラリテーブルのすべての行は、各トランザクションブロックの最後に削除されます。本質的に、自動的な TRUNCATEは各コミットで行われます。
TABLESPACE 表スペース
表領域には、新しいテーブルが作成される表領域の名前です。指定されていない場合、 default_tablespaceが空の文字列の場合はデフォルト 表領域が使用され、データベースのデフォルト表領域が使用されます。
USING INDEX TABLESPACE 表領域
この句を使用すると、 UNIQUEまたはPRIMARY KEY制約に関連付けられた索引が作成される表領域を選択できます 。指定されていない場合、 default_tablespaceが空の文字列の場合はデフォルト 表領域が使用され、データベースのデフォルト表領域が使用されます。
ノート
Advanced Serverは、一意性を強制するために、各一意制約と一次キー制約のインデックスを自動的に作成します。したがって、主キー列の明示的な索引を作成する必要はありません。詳細については、 CREATE INDEXを参照してください。
テーブル deptとテーブルempを 作成します
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
表の deptの 一意の表制約を定義します 。ユニークなテーブル制約は、テーブルの1つ以上のカラムに定義することができます。
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
loc VARCHAR2(13)
);
チェック列の制約を定義します。
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
チェック・テーブルの制約を定義します。
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno),
CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);
テーブルの ジョブヒストリの 主キーテーブル制約を定義します 。主キー・テーブル制約は、表の1つ以上の列に定義できます。
CREATE TABLE jobhist (
empno NUMBER(4) NOT NULL,
startdate DATE NOT NULL,
enddate DATE,
job VARCHAR2(9),
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
chgdesc VARCHAR2(80),
CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);
これは、列、 ジョブに リテラル定数のデフォルト値を割り当て、 hiredateのデフォルト値を行が挿入された日付にします。
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9) DEFAULT 'SALESMAN',
mgr NUMBER(4),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
表領域diskvol1に dept作成します
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
) TABLESPACE diskvol1;
関連項目
ALTER TABLE DROP TABLE
 
2.3.34 CREATE TABLE AS
CREATE TABLE AS - クエリの結果から新しいテーブルを定義する
シノプシス
CREATE [ GLOBAL TEMPORARY ] TABLE table_name
[ ( column_name [, ...] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
[ TABLESPACE tablespace ]
AS query
説明
CREATE TABLE ASは、テーブルを作成し、 SELECTコマンドによって計算されたデータでそのテーブルを埋めます。表の列には、 SELECTの出力列に関連付けられた名前とデータ型があります(ただし、新しい列名の明示的なリストを指定して列名を変更できます)。
CREATE TABLE ASはビューを作成するのと似ていますが、実際には全く異なります。新しいテーブルを作成し、初めて新しいテーブルを満たすためにクエリを1回評価します。新しいテーブルは、クエリのソーステーブルへのその後の変更を追跡しません。対照的に、ビューはクエリされるたびに定義されたSELECT文を再評価します。
パラメーター
グローバル暫定
指定すると、テーブルは一時テーブルとして作成されます。詳細については CREATE TABLEを参照してください。
テーブル名
作成するテーブルの名前(スキーマ修飾名でも可)。
列名
新しい表の列の名前。列名が指定されていない場合、列名はクエリの出力列名から取得されます。
 
クエリ
照会ステートメント( SELECTコマンド)。許可される構文の説明については、 SELECTを参照してください。
 
2.3.35 CREATE TRIGGERを
CREATE TRIGGER - 新しいトリガーを定義する
シノプシス
CREATE [ OR REPLACE ] TRIGGER name
{ BEFORE | AFTER | INSTEAD OF }
{ INSERT | UPDATE | DELETE }
[ OR { INSERT | UPDATE | DELETE } ] [, ...]
ON table
[ REFERENCING { OLD AS old | NEW AS new } ...]
[ FOR EACH ROW ]
[ WHEN condition ]
[ DECLARE
[ PRAGMA AUTONOMOUS_TRANSACTION; ]
declaration ; [, ...] ]
BEGIN
statement ; [, ...]
[ EXCEPTION
{ WHEN exception [ OR exception ] [...] THEN
statement ; [, ...] } [, ...]
]
END
説明
CREATE TRIGGERは新しいトリガーを定義します。 CREATE OR REPLACE TRIGGERは新しいトリガーを作成するか、既存の定義を置き換えます。
あなたが使用している場合、新しいトリガを作成するには、CREATE TRIGGERのキーワードを、新しいトリガの名前が同じテーブルに定義されている既存のトリガーと一致してはいけません。新しいトリガーは、トリガー・イベントが定義されている表と同じスキーマに作成されます。
既存のトリガーの定義を更新する場合は、 CREATE OR REPLACE TRIGGERキーワードを使用します。
Oracleと互換性のある構文を使用してトリガーを作成すると、トリガーは SECURITY として実行されます DEFINER 機能。
パラメーター
作成するトリガーの名前。
前に|アフター
トリガーがトリガーイベントの前または後に発生するかどうかを決定します。
INSERT |更新|削除
トリガーイベントを定義します。
トリガイベントが発生するテーブルの名前。
調子
conditionはトリガーが実際に実行されるかどうかを決定するブール式です。 conditionTRUEと評価された場合、トリガが起動します。
トリガ定義に FOR EACH ROWキーワードが含まれている場合、 WHEN句はOLDを記述して古い行および/または新しい行の値の列を参照できます。 _ 名前またはNEW _ 名をそれぞれ指定します。 INSERTトリガーはOLDを参照できず、 DELETEトリガーはNEWを参照できません。
トリガーに INSTEAD OFキーワードが含まれている場合は、 WHEN句が含まれていない可能性があります。 WHEN句にサブクエリを含めることはできません。
古いものとして古いものを 参照する | NEW AS 新しいです } ...
REFERENCING節は古い行と新しい行を参照しますが、 oldoldやそれ以外のすべての小文字で保存された識別子で置き換えられます(たとえば、 REFERENCING OLD AS oldREFERENCING OLD AS OLDREFERENCING OLD AS "古い" )。また、 新しいだけ (例えば、NEW AS NEWを参照する新しいAS NEWを参照する、「新しい」としてNEWを参照新しい名前付き識別子またはすべて小文字に保存されている任意の等価に置き換えることができます。
OLD AS oldおよびNEW AS newの いずれか、または両方を REFERENCING節に指定することができます(たとえば、 REFERENCING NEW AS OLD AS NEWと同様にREFERENCING )。
それ以外の識別子でこの句は、Oracleデータベースと互換性がありません 新旧使用することはできません。
行ごとに
トリガイベントの影響を受けるすべての行に対してトリガを1回実行するか、 SQLごとに1回だけトリガするかを決定し ます 。指定すると、トリガーは影響を受けた各行(行レベルのトリガー)ごとに1回起動されます。それ以外の場合は、トリガーはステートメントレベルのトリガーです。
PRAGMA AUTONOMOUS_TRANSACTION
PRAGMA AUTONOMOUS_TRANSACTIONは、トリガーを自律型トランザクションとして設定するディレクティブです。
宣言
変数、型、 REF CURSOR 、またはサブプログラムの宣言。 サブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の 後に宣言する必要があり ます
ステートメント
SPLプログラム文です。 DECLARE-BEGIN-ENDブロックはSPLステートメントとみなされます。したがって、トリガー本体にネストされたブロックが含まれることがあります。
例外
NO_DATA_FOUNDOTHERS などの例外条件名
以下は、トリガー・ステートメント(表 empの 挿入、更新、または削除 )が実行された後に起動するステートメント・レベルのトリガーです
CREATE OR REPLACE TRIGGER user_audit_trig
AFTER INSERT OR UPDATE OR DELETE ON emp
DECLARE
v_action VARCHAR2(24);
BEGIN
IF INSERTING THEN
v_action := ' added employee(s) on ';
ELSIF UPDATING THEN
v_action := ' updated employee(s) on ';
ELSIF DELETING THEN
v_action := ' deleted employee(s) on ';
END IF;
DBMS_OUTPUT.PUT_LINE('User ' || USER || v_action ||
TO_CHAR(SYSDATE,'YYYY-MM-DD'));
END;
以下は、各行が表 empで 挿入、更新、または削除される前に起動する行レベルのトリガーです
CREATE OR REPLACE TRIGGER emp_sal_trig
BEFORE DELETE OR INSERT OR UPDATE ON emp
FOR EACH ROW
DECLARE
sal_diff NUMBER;
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Inserting employee ' || :NEW.empno);
DBMS_OUTPUT.PUT_LINE('..New salary: ' || :NEW.sal);
END IF;
IF UPDATING THEN
sal_diff := :NEW.sal - :OLD.sal;
DBMS_OUTPUT.PUT_LINE('Updating employee ' || :OLD.empno);
DBMS_OUTPUT.PUT_LINE('..Old salary: ' || :OLD.sal);
DBMS_OUTPUT.PUT_LINE('..New salary: ' || :NEW.sal);
DBMS_OUTPUT.PUT_LINE('..Raise : ' || sal_diff);
END IF;
IF DELETING THEN
DBMS_OUTPUT.PUT_LINE('Deleting employee ' || :OLD.empno);
DBMS_OUTPUT.PUT_LINE('..Old salary: ' || :OLD.sal);
END IF;
END;
関連項目
DROP TRIGGER
 
2.3.36 CREATE TYPE
CREATE TYPE - 新しいユーザー定義タイプを定義します。これは、オブジェクト・タイプ、コレクション・タイプ(ネストした表タイプまたはVARRAYタイプ)、または複合タイプとすることができます。
シノプシス
オブジェクトタイプ
CREATE [ OR REPLACE ] TYPE name
[ AUTHID { DEFINER | CURRENT_USER } ]
{ IS | AS } OBJECT
( { attribute { datatype | objtype | collecttype } }
[, ...]
[ method_spec ] [, ...]
) [ [ NOT ] { FINAL | INSTANTIABLE } ] ...
ここで、 method_specは:
[ [ NOT ] { FINAL | INSTANTIABLE } ] ...
[ OVERRIDING ]
subprogram_spec
そして subprogram_specは以下とおりです。
{ MEMBER | STATIC }
{ PROCEDURE proc_name
[ ( [ SELF [ IN | IN OUT ] name ]
[, argname [ IN | IN OUT | OUT ] argtype
[ DEFAULT value ]
] ...)
]
|
FUNCTION func_name
[ ( [ SELF [ IN | IN OUT ] name ]
[, argname [ IN | IN OUT | OUT ] argtype
[ DEFAULT value ]
] ...)
]
RETURN rettype
}
 
ネストした表の型
CREATE [ OR REPLACE ] TYPE name { IS | AS } TABLE OF
{ datatype | objtype | collecttype }
 
バレータイプ
CREATE [ OR REPLACE ] TYPE name { IS | AS }
{ VARRAY | VARYING ARRAY } ( maxsize ) OF { datatype | objtype }
 
コンポジットタイプ
CREATE [ OR REPLACE ] TYPE name { IS | AS }
( [ attribute datatype ][, ...]
)
説明
CREATE TYPEは、新しいユーザー定義データ型を定義します。作成できる型は、オブジェクト型、ネストした表の型、VARRAY型、または複合型です。ネストした表およびVARRAY型は、 コレクションと呼ばれる型のカテゴリに属します。
複合型はOracleデータベースと互換性がありません。ただし、このセクションで説明する他のタイプと同様に、SPLプログラムによって複合タイプにアクセスすることができます。
注:パッケージのみの場合、パッケージ仕様またはパッケージ本体内のTYPE IS RECORDステートメントで宣言されたユーザー定義レコード・タイプに複合タイプを組み込むことができます。このような入れ子構造は、関数、プロシージャ、トリガなどの他のSPLプログラムでは許可されていません。
スキーマ名が含まれている場合、TYPEコマンド作成し、型がそれ以外の場合は現在のスキーマで作成され、指定されたスキーマで作成されています。新しいタイプの名前は、既存のタイプの定義を更新する意図がないかぎり、同じスキーマ内の既存のタイプと一致していてはなりません。その場合はCREATE OR REPLACE TYPEを使用します。
注:現在、 OR REPLACEオプションを使用して、既存のオブジェクト型の属性を追加、削除、または変更することはできません。既存のオブジェクトタイプを最初に削除するには、 DROP TYPEコマンドを使用します。 OR REPLACEオプションを使用すると、既存のオブジェクト型のメソッドを追加、削除、または変更できます。
注: PostgreSQL形式のALTER TYPE ALTER ATTRIBUTEコマンドを使用すると、既存のオブジェクト型の属性のデータ型を変更できます。ただし、 ALTER TYPEコマンドはオブジェクト型の属性を追加または削除できません。
型を作成するユーザーが型の所有者になります。
パラメーター
作成する型の名前(スキーマ修飾名でも可)。
DEFINER |現在の使用者
オブジェクト型所有者( DEFINER )の権限またはオブジェクト型( CURRENT_USER )でメソッドを実行している現行ユーザーの権限を使用して、オブジェクト型で参照されるデータベース・オブジェクトへのアクセスが許可されているかどうかを指定します。 DEFINERがデフォルトです。
属性
オブジェクト型または複合型の属性の名前。
データ・タイプ
オブジェクト型または複合型の属性、または作成されているコレクション型の要素を定義するデータ型。
objtype
オブジェクト型の属性または作成されるコレクション型の要素を定義するオブジェクト型の名前。
コレクトタイプ
オブジェクト型の属性または作成されるコレクション型の要素を定義するコレクション型の名前。
最後の
最終的ではない
オブジェクトタイプの場合、サブタイプをオブジェクトタイプから派生できるかどうかを指定します。 FINAL (オブジェクト型からサブタイプを派生させることはできません)がデフォルトです。
ため method_spec、方法はサブタイプでオーバーライドすることができるかどうかを指定します。 NOT FINAL (サブタイプでメソッドがオーバーライドされる可能性があります)がデフォルトです。
不安定
不可能ではない
オブジェクト型の場合、このオブジェクト型に対してオブジェクトインスタンスを作成できるかどうかを指定します。 INSTANTIABLE (このオブジェクト型のインスタンスを作成できる)がデフォルトです。 NOT INSTANTIABLEが指定されている場合は、 NOT FINALも指定する必要があります。オブジェクト型のメソッドのmethod_specNOT INSTANTIABLE修飾子が含まれている場合、オブジェクト型自体は、オブジェクト型の終了括弧の後にNOT INSTANTIABLEおよびNOT FINALで定義する必要があります。
ため method_spec、オブジェクト型定義はメソッドの実装を提供するかどうかを指定します。 INSTANTIABLE (オブジェクト型のCREATE TYPE BODYコマンドがメソッドの実装を提供します)がデフォルトです。 NOT INSTANTIABLEが指定されている場合、オブジェクト型のCREATE TYPE BODYコマンドにメソッドの実装が含まれていてはなりません。
オーバーライド
場合 OVERRIDINGが指定され、method_specは同じ順序で、同じデータ型で同じ名前のメソッドの引数の同じ数の同じ名前のメソッドをオーバーライドし、そして同一の戻り型スーパータイプで定義されている(メソッドが関数である場合)。
メンバー
静的
サブプログラムがオブジェクト・インスタンス上で操作する場合は、 MEMBERを 指定します。サブプログラムが特定のオブジェクト・インスタンスとは独立して動作する場合は、 STATICを指定します。
proc_name
作成するプロシージャの名前。
SELF [IN | IN OUT]の 名前
メンバーメソッドの場合、定義されているオブジェクトタイプのデータ型である暗黙の組み込みパラメータ SELFがあります。 SELFは、現在メソッドを呼び出すオブジェクトインスタンスを参照します。 SELFは、パラメータリストのINまたはIN OUTパラメータとして明示的に宣言できます。明示的に宣言されている場合、 SELFはパラメータリストの最初のパラメータでなければなりません。 SELFが明示的に宣言されていない場合、そのパラメーター・モードのデフォルトはメンバー・プロシージャーの場合はIN OUT 、メンバー関数の場合はINになります。
argname
引数の名前。引数は、メソッド本体内でこの名前で参照されます。
argtype
メソッドの引数のデータ型。引数型は、基本データ型でも、ネストした表やオブジェクト型などのユーザー定義型でもかまいません。長さは、任意の基本型に指定してはならない-例えば、指定 VARCHAR2なく、VARCHAR2(10)。
DEFAULT
メソッド呼び出しで入力引数が指定されていない場合は、入力引数のデフォルト値を指定します。 IN OUTまたはOUTモードの引数の場合、 DEFAULTは指定できません。
func_name
作成する関数の名前。
rettype
戻り値の型 。argtypeに リストされている型のいずれかですargtypeに関しては、長さがrettypeのために指定することはできません。
最大サイズ
VARRAYで許可されている要素の最大数。
オブジェクト型の作成
オブジェクトタイプ addr_obj_typを 作成します
CREATE OR REPLACE TYPE addr_obj_typ AS OBJECT (
street VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
zip NUMBER(5)
);
メンバ・メソッドdisplay_empを含むオブジェクト型 emp_obj_typ作成します
CREATE OR REPLACE TYPE emp_obj_typ AS OBJECT (
empno NUMBER(4),
ename VARCHAR2(20),
addr ADDR_OBJ_TYP,
MEMBER PROCEDURE display_emp (SELF IN OUT emp_obj_typ)
);
静的メソッドget_dnameを含むオブジェクト型 dept_obj_typ作成します
CREATE OR REPLACE TYPE dept_obj_typ AS OBJECT (
deptno NUMBER(2),
STATIC FUNCTION get_dname (p_deptno IN NUMBER) RETURN VARCHAR2,
MEMBER PROCEDURE display_dept
);
コレクションタイプの作成
データ型NUMBER(8,2)の ネストした表のタイプ budget_tbl_typを 作成します
CREATE OR REPLACE TYPE budget_tbl_typ IS TABLE OF NUMBER(8,2);
複合型の作成と使用
次の例は、匿名ブロックからアクセスされる複合型の使用法を示しています。
コンポジット型は、次のように作成されます。
CREATE OR REPLACE TYPE emphist_typ AS (
empno NUMBER(4),
ename VARCHAR2(10),
hiredate DATE,
job VARCHAR2(9),
sal NUMBER(7,2)
);
複合型にアクセスする無名ブロックは次のとおりです。
DECLARE
v_emphist EMPHIST_TYP;
BEGIN
v_emphist.empno := 9001;
v_emphist.ename := 'SMITH';
v_emphist.hiredate := '01-AUG-17';
v_emphist.job := 'SALESMAN';
v_emphist.sal := 8000.00;
DBMS_OUTPUT.PUT_LINE(' EMPNO: ' || v_emphist.empno);
DBMS_OUTPUT.PUT_LINE(' ENAME: ' || v_emphist.ename);
DBMS_OUTPUT.PUT_LINE('HIREDATE: ' || v_emphist.hiredate);
DBMS_OUTPUT.PUT_LINE(' JOB: ' || v_emphist.job);
DBMS_OUTPUT.PUT_LINE(' SAL: ' || v_emphist.sal);
END;
 
EMPNO: 9001
ENAME: SMITH
HIREDATE: 01-AUG-17 00:00:00
JOB: SALESMAN
SAL: 8000.00
次の例は、パッケージ本体内で宣言されたユーザー定義のレコード型からアクセスされる複合型の使用法を示しています。
コンポジット型は、次のように作成されます。
CREATE OR REPLACE TYPE salhist_typ AS (
startdate DATE,
job VARCHAR2(9),
sal NUMBER(7,2)
);
パッケージ仕様は、次のように定義されています。
CREATE OR REPLACE PACKAGE emp_salhist
IS
PROCEDURE fetch_emp (
p_empno IN NUMBER
);
END;
パッケージ本体は次のように定義されます。
CREATE OR REPLACE PACKAGE BODY emp_salhist
IS
TYPE emprec_typ IS RECORD (
empno NUMBER(4),
ename VARCHAR(10),
salhist SALHIST_TYP
);
TYPE emp_arr_typ IS TABLE OF emprec_typ INDEX BY BINARY_INTEGER;
emp_arr emp_arr_typ;
 
PROCEDURE fetch_emp (
p_empno IN NUMBER
)
IS
CURSOR emp_cur IS SELECT e.empno, e.ename, h.startdate, h.job, h.sal
FROM emp e, jobhist h
WHERE e.empno = p_empno
AND e.empno = h.empno;
 
i INTEGER := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE('EMPNO ENAME STARTDATE JOB ' ||
'SAL ');
DBMS_OUTPUT.PUT_LINE('----- ------- --------- --------- ' ||
'---------');
 
FOR r_emp IN emp_cur LOOP
i := i + 1;
emp_arr(i) := (r_emp.empno, r_emp.ename,
(r_emp.startdate, r_emp.job, r_emp.sal));
END LOOP;
 
FOR i IN 1 .. emp_arr.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(emp_arr(i).empno || ' ' ||
RPAD(emp_arr(i).ename,8) || ' ' ||
TO_CHAR(emp_arr(i).salhist.startdate,'DD-MON-YY') || ' ' ||
RPAD(emp_arr(i).salhist.job,10) || ' ' ||
TO_CHAR(emp_arr(i).salhist.sal,'99,999.99'));
END LOOP;
END;
END;
パッケージ本体 TYPE emprec_typ IS RECORDデータ構造体の宣言ではsalhistフィールドはCREATE TYPE salhist_typ文で作成されたSALHIST_TYP複合型で定義されています。
結合配列定義 TYPE emp_arr_typ IS TABLE of emprec_typは、 SALHIST_TYP複合型で定義されたフィールドsalhistを含むレコード型データ構造体emprec_typを参照します。
emp表とjobhist表の結合から配列をロードし 、次に配列内容を表示するパッケージ・プロシージャの呼び出しは、次のように表示されます。
EXEC emp_salhist.fetch_emp(7788);
 
EMPNO ENAME STARTDATE JOB SAL
----- ------- --------- --------- ---------
7788 SCOTT 19-APR-87 CLERK 1,000.00
7788 SCOTT 13-APR-88 CLERK 1,040.00
7788 SCOTT 05-MAY-90 ANALYST 3,000.00
 
EDB-SPL Procedure successfully completed
関連項目
TYPE BODYDROP TYPEを作成する
 
2.3.37 TYPE本体を作成
CREATE TYPE BODY - 新しいオブジェクト型本体を定義する
シノプシス
CREATE [ OR REPLACE ] TYPE BODY name
{ IS | AS }
method_spec [...]
END
ここで、 method_specは:
subprogram_spec
そして subprogram_specは以下とおりです。
{ MEMBER | STATIC }
{ PROCEDURE proc_name
[ ( [ SELF [ IN | IN OUT ] name ]
[, argname [ IN | IN OUT | OUT ] argtype
[ DEFAULT value ]
] ...)
]
{ IS | AS }
program_body
END;
|
FUNCTION func_name
[ ( [ SELF [ IN | IN OUT ] name ]
[, argname [ IN | IN OUT | OUT ] argtype
[ DEFAULT value ]
] ...)
]
RETURN rettype
{ IS |AS }
program_body
END;
}
説明
CREATE TYPE BODYは新しいオブジェクト型本体を定義します。 CREATE OR REPLACE TYPE BODYは、新しいオブジェクト型本体を作成するか、既存の本体を置き換えます。
スキーマ名が含まれている場合、指定されたスキーマにオブジェクト型本体が作成されます。それ以外の場合は、現在のスキーマに作成されます。新しいオブジェクト型本体の名前は、同じスキーマ内の既存のオブジェクト型指定と一致しなければなりません。新しいオブジェクトタイプのボディー名は、既存のオブジェクトタイプ本体の定義を更新する場合を除いて、同じスキーマ内の既存のオブジェクトタイプ本体と一致していてはなりません(その場合は CREATE OR REPLACE TYPE BODYを使用してください)
パラメーター
本文が作成されるオブジェクト型の名前(スキーマ修飾名も可)。
メンバー
静的
サブプログラムがオブジェクト・インスタンス上で操作する場合は、 MEMBERを 指定します。サブプログラムが特定のオブジェクト・インスタンスとは独立して動作する場合は、 STATICを指定します。
proc_name
作成するプロシージャの名前。
SELF [IN | IN OUT]の 名前
メンバーメソッドの場合、定義されているオブジェクトタイプのデータ型である暗黙の組み込みパラメータ SELFがあります。 SELFは、現在メソッドを呼び出すオブジェクトインスタンスを参照します。 SELFは、パラメータリストのINまたはIN OUTパラメータとして明示的に宣言できます。明示的に宣言されている場合、 SELFはパラメータリストの最初のパラメータでなければなりません。 SELFが明示的に宣言されていない場合、そのパラメーター・モードのデフォルトはメンバー・プロシージャーの場合はIN OUT 、メンバー関数の場合はINになります。
argname
引数の名前。引数は、メソッド本体内でこの名前で参照されます。
argtype
メソッドの引数のデータ型。引数型は、基本データ型でも、ネストした表やオブジェクト型などのユーザー定義型でもかまいません。長さは、任意の基本型に指定してはならない-例えば、指定 VARCHAR2なく、VARCHAR2(10)。
DEFAULT
メソッド呼び出しで入力引数が指定されていない場合は、入力引数のデフォルト値を指定します。 IN OUTまたはOUTモードの引数の場合、 DEFAULTは指定できません。
program_body
関数またはプロシージャーの本体を構成するプラグマ、宣言、および SPLステートメント。 PRAGMA AUTONOMOUS_TRANSACTIONは、機能またはプロシージャを自律型トランザクションとして設定するためのプラグマです。
func_name
作成する関数の名前。
rettype
戻り値の型 。argtypeに リストされている型のいずれかですargtypeに関しては、長さがrettypeのために指定することはできません。
CREATE TYPEコマンドの例に示されているオブジェクト・タイプ emp_obj_typ のオブジェクト・タイプ本体を作成します
CREATE OR REPLACE TYPE BODY emp_obj_typ AS
MEMBER PROCEDURE display_emp (SELF IN OUT emp_obj_typ)
IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Employee No  : ' || empno);
    DBMS_OUTPUT.PUT_LINE('Name          : ' || ename);
    DBMS_OUTPUT.PUT_LINE('Street        : ' || addr.street);
    DBMS_OUTPUT.PUT_LINE('City/State/Zip: ' || addr.city || ', ' ||
        addr.state || ' ' || LPAD(addr.zip,5,'0'));
END;
END;
CREATE TYPEコマンドの例で指定されたオブジェクト・タイプ dept_obj_type のオブジェクト・タイプ本体を作成します
CREATE OR REPLACE TYPE BODY dept_obj_typ AS
STATIC FUNCTION get_dname (p_deptno IN NUMBER) RETURN VARCHAR2
IS
v_dname VARCHAR2(14);
BEGIN
CASE p_deptno
WHEN 10 THEN v_dname := 'ACCOUNING';
WHEN 20 THEN v_dname := 'RESEARCH';
WHEN 30 THEN v_dname := 'SALES';
WHEN 40 THEN v_dname := 'OPERATIONS';
ELSE v_dname := 'UNKNOWN';
END CASE;
RETURN v_dname;
END;
MEMBER PROCEDURE display_dept
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Dept No : ' || SELF.deptno);
DBMS_OUTPUT.PUT_LINE('Dept Name : ' ||
dept_obj_typ.get_dname(SELF.deptno));
END;
END;
関連項目
CREATE TYPEDROP TYPE
 
2.3.38 CREATE USER
CREATE USER - 新しいデータベースユーザーアカウントを定義する
シノプシス
CREATE USER name [ IDENTIFIED BY password ]
説明
CREATE USERAdvanced Serverデータベース・クラスタに新しいユーザーを追加します。このコマンドを使用するには、データベースのスーパーユーザーでなければなりません。
場合は 、CREATE USERコマンドが与えられ、スキーマは、新しいユーザーと同じ名前で作成し、新しいユーザーによって所有されます。このユーザーによって作成された修飾されていない名前のオブジェクトは、このスキーマで作成されます。
パラメーター
ユーザーの名前。
パスワード
ユーザーのパスワード。パスワードは後で ALTER USER を使用して変更できます
ノート
ユーザー名とパスワードの最大長は63文字です。
john という名前のユーザーを作成します
CREATE USER john IDENTIFIED BY abc;
関連項目
DROP USER
 
2.3.39 CREATE USER | ROLE ...プロファイル管理規約
CREATE USER | ROLE
シノプシス
CREATE USER|ROLE name [[WITH] option […]]
どこ オプションは、次の互換性の句を指定できます。
PROFILE profile_name
| ACCOUNT {LOCK|UNLOCK}
| PASSWORD EXPIRE [AT ' timestamp ']
または オプションは、次の互換性のない節にすることができます。
| LOCK TIME ' timestamp '
 
Advanced ServerでサポートされているCREATE USERまたはCREATE ROLEコマンドの管理句の詳細については、次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-commands.html
説明
CREATE ROLE | USER ... PROFILEは、関連するプロファイルとともに新しい役割をAdvanced Serverデータベースクラスタに追加します。
CREATEで 作成されたロール USER コマンドはログインロールです(デフォルト)。 CREATEで 作成されたロール ROLE コマンドは(デフォルトでは)ログインロールではありません。 CREATE を使用してログインアカウントを作成するには ROLE コマンドを使用するには、 LOGIN キーワードを 含める必要があります
データベーススーパーユーザーだけが CREATE を使用できます。 ユーザー | プロファイル管理を実施する ROLE これらの条項は次のような行動を強制します:
事前定義されたプロファイルを役割に関連付ける、または事前定義されたプロファイルがユーザーに関連付けられていることを変更するには、 PROFILE句とprofile_name含めます。
ACCOUNT句とLOCKまたはUNLOCKキーワードを含めて、ユーザー・アカウントをロック状態またはロック解除状態にする必要があることを指定します。
インクルードこのロールに割り当てられたプロファイルのTIMEパラメータ _ _ LOCK指定した時刻に役割をロックするLOCK TIME「 タイムスタンプ 句と日付/時刻値を、およびPASSWORDで示される時点で役割のロックを解除します。 LOCK TIMEを ACCOUNT LOCK句とともに使用すると、ロールはACCOUNT UNLOCK句を使用してデータベースのスーパーユーザーのみがロックを解除できます
パスワードを 含める オプションの ATを 持つ EXPIRE ' timestamp ' キーワードを使用して、ロールに関連付けられたパスワードの有効期限が切れる日時を指定します。 AT を省略すると ' timestamp ' キーワードを入力すると、パスワードはすぐに期限切れになります。
各ログインロールは1つのプロファイルのみを持つことができます。現在ログイン・ロールに関連付けられているプロファイルを検出するには、 DBA_USERSビューのプロファイル列を問い合せます。
パラメーター
ロールの名前。
プロファイル名
ロールに関連付けられたプロファイルの名前。
タイムスタンプ
条項が適用される日時。 タイムスタンプの 値を指定する場合は 、値を一重引用符で囲みます。
次の例では、 CREATE USERを使用して、 acctg_profileプロファイルに関連付けられたjohnというログイン・ロールを作成します。
CREATE USER john PROFILE acctg_profile IDENTIFIED BY “1safepwd”;
johnはパスワード1safepwdを使用してサーバーにログインできます。
次の例では、 CREATE ROLEを使用して、 acctg_profileプロファイルに関連付けられたjohnというログイン・ロールを作成します。
CREATE ROLE john PROFILE acctg_profile LOGIN PASSWORD “1safepwd”;
johnはパスワード1safepwdを使用してサーバーにログインできます。
 
2.3.40 CREATE VIEW
CREATE VIEW - 新しいビューを定義する
シノプシス
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ]
AS query
説明
CREATE VIEWはクエリのビューを定義します。ビューは物理的にマテリアライズされていません。代わりに、クエリがクエリで参照されるたびにクエリが実行されます。
CREATE OR REPLACE VIEWは似ていますが、同じ名前のビューがすでに存在する場合は置換されます。
スキーマ名が指定されている場合(たとえば、 CREATE VIEW myschema.myview ...)、ビューは指定されたスキーマに作成されます。それ以外の場合は、現在のスキーマに作成されます。ビュー名は、同じスキーマ内の他のビュー、テーブル、シーケンス、またはインデックスの名前とは異なるものでなければなりません。
パラメーター
作成されるビューの名前(スキーマ修飾名も可)
列名
ビューの列に使用されるオプションの名前リスト。指定されていない場合は、クエリから列名が導出されます。
クエリ
ビューの列と行を提供するクエリ(つまり、 SELECT文)です。
有効な照会の詳細については SELECT参照してください
 
ノート
現在、ビューは読み取り専用です。システムはビューに対して挿入、更新、または削除を許可しません。ビューの挿入などを他の表の適切なアクションに書き換えるルールを作成することにより、更新可能なビューの効果を得ることができます。
ビューで参照されるテーブルへのアクセスは、ビュー所有者の権限によって決定されます。ただし、ビューで呼び出された関数は、ビューを使用して直接クエリから呼び出された場合と同じように扱われます。したがって、ビューのユーザーは、ビューで使用されるすべての関数を呼び出す権限を持っている必要があります。
部門30の全従業員からなるビューを作成します。
CREATE VIEW dept_30 AS SELECT * FROM emp WHERE deptno = 30;
関連項目
DROP VIEW
 
2.3.41 DELETE
DELETE - テーブルの行を削除する
シノプシス
DELETE [ optimizer_hint ] FROM table [@ dblink ]
[ WHERE condition ]
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
説明
DELETEは、指定された表からWHERE句を満たす行を削除します。 WHERE句が指定されていない場合は、テーブル内のすべての行を削除します。結果は有効な空の表です。
TRUNCATEコマンドは、表からすべての行を除去するより高速なメカニズムを提供します。
| { レコード にRETURNING variable [、...]}句は、 DELETEコマンドがSPLプログラム内で使用されている場合にのみ指定できます。さらに、 DELETEコマンドの結果セットに複数行が含まれていてはいけません。それ以外の場合は例外がスローされます。結果セットが空の場合、ターゲットレコードの内容はNULLに設定されます。
RETURNING BULKは、DELETEコマンドはSPLプログラム内で使用されている場合、コレクション への [...]句のみ指定することができるCOLLECT。複数のコレクションBULK COLLECT INTO句のターゲットとして指定されている場合、各コレクションは単一のスカラーフィールドで構成されている必要があります。つまり、 コレクションはレコードであってはなりません。 DELETEコマンドの結果セットには、1つ以上の行が含まれている場合があります。結果セットの各行に対して評価されるreturn_expressionは、最初の要素から始まるコレクションの要素になります。 コレクション内の既存の行はすべて削除されます。結果セットが空の場合、 コレクションは空になります。
あなたは持っている必要があり 、それから削除するには、テーブルに対するDELETE特権だけでなく、値の状態で読まれているすべてのテーブルに対するSELECT権限を。
 
 
パラメーター
optimizer_hint
実行計画の選択のためのオプティマイザへのコメント埋め込みヒント。
既存の表の名前(スキーマ修飾名も可)。
dblink
リモートデータベースを識別するデータベースリンク名。データベース・リンクの詳細は、 CREATE DATABASE LINKコマンドを参照してください
調子
削除される行を決定するBOOLEAN 型の値を戻す値式
return_expression
表の 1つ以上の列を含む式return_expressionに tableの列名が指定されている場合、 return_expressionが評価されたときの列の値は、削除された行の値です。
記録
評価された return_expressionが割り当てられるフィールドのレコード 。最初のreturn_expressionレコードの最初のフィールドに割り当てられ、2番目のreturn_expressionレコードの2番目のフィールドに割り当てられます。 レコードのフィールド数は式の数と完全に一致しなければならず、フィールドは割り当てられた表現。
変数
評価された return_expressionが割り当てられる変数 。複数のreturn_expression変数が指定されている場合、 最初のreturn_expressionが最初の変数に割り当てられ、2番目のreturn_expressionが2番目の変数に割り当てられます。INTOキーワードの後に​​指定される変数の数は、 RETURNINGキーワードと変数は、割り当てられた式と型互換性がなければなりません。
コレクション
評価された return_expression から要素が作成されるコレクション 。単一フィールドのコレクションまたはレコードタイプのコレクションである単一のコレクション、または複数のコレクションが存在する場合があります。その場合、各コレクションは単一のフィールドで構成されなければなりません。戻り式の数は、指定されたすべてのコレクションのフィールド数と順番に一致する必要があります。それぞれの対応するreturn_expressionおよびcollectionフィールドは型互換性がなければなりません。
jobhistテーブルからemployee 7900のすべての行を削除します。
DELETE FROM jobhist WHERE empno = 7900;
テーブルの 求職者を クリアします
DELETE FROM jobhist;
関連項目
TRUNCATE
 
2.3.42 DROPデータベースリンク
DROP DATABASE LINK - データベースリンクを削除する
シノプシス
DROP [ PUBLIC ] DATABASE LINK name
説明
DROP DATABASE LINKは、既存のデータベースリンクを削除します。このコマンドを実行するには、スーパーユーザーまたはデータベースリンクの所有者でなければなりません。
パラメーター
削除されるデータベース・リンクの名前。
パブリック
名前がパブリックデータベースリンクであることを示します
oralink という名前のパブリックデータベースリンクを削除します
DROP PUBLIC DATABASE LINK oralink;
edblink」 という名前のプライベート・データベース・リンクを削除します
DROP DATABASE LINK edblink;
関連項目
CREATE DATABASE LINK
 
2.3.43 DROP DIRECTORY
DROP DIRECTORY - ファイルシステムのディレクトリパスのディレクトリエイリアスを削除する
シノプシス
DROP DIRECTORY name
説明
DROP DIRECTORYは、 CREATE DIRECTORYコマンドで作成されたファイルシステムディレクトリパスの既存のエイリアスを削除します。このコマンドを実行するには、スーパーユーザーでなければなりません。
ディレクトリエイリアスが削除されると、対応する物理ファイルシステムディレクトリは影響を受けません。ファイルシステムディレクトリは、適切なオペレーティングシステムコマンドを使用して削除する必要があります。
パラメーター
削除されるディレクトリエイリアスの名前。
empdir というディレクトリエイリアスを削除し ます
DROP DIRECTORY empdir;
関連項目
CREATE DIRECTORY
 
2.3.44 DROP FUNCTION
DROP FUNCTION - 関数を削除する
シノプシス
DROP FUNCTION [ IF EXISTS ] name
[ ([ [ argmode ] [ argname ] argtype ] [, ...]) ]
[ CASCADE | RESTRICT ]
説明
DROP FUNCTIONは、既存の関数の定義を削除します。このコマンドを実行するには、スーパーユーザーまたはその関数の所有者でなければなりません。これがオーバーロードされた関数の場合、関数へのすべての入力( ININ OUT )引数データ型を指定する必要があります。 Advanced Serverでは、関数名のオーバーロードが許可されているため、 Advanced Server DROP FUNCTIONコマンドの入力引数のデータ型で指定された関数シグネチャが必要です(この要件はOracleデータベースと互換性がありません)。オーバーロードされた関数)。
IF EXISTSCASCADE 、またはRESTRICTの 使用法は 、Oracleデータベースと互換性がなく、Advanced Serverのみで使用されます。
パラメーター
IF存在
関数が存在しない場合はエラーを投げないでください。この場合、通知が発行されます。
既存の関数の名前(スキーマ修飾名も可)。
argmode
引き数のモード: ININ OUT 、またはOUT 。省略すると、デフォルトはINです。 DROP FUNCTIONは実際にはOUT引数に注意を払わないことに注意してください。なぜなら、入力引数だけが関数の同一性を判断するために必要なためです。 ININ OUT引数だけをリストするだけで十分です。 ( argmodeの指定はOracleデータベースと互換性がなく、Advanced Serverにのみ適用されます)。
argname
引数の名前。その注意唯一の引数のデータ型は、関数の同一性を決定するために必要とされているので、 ドロップ機能は、実際に、引数名に注意を払っていません。 ( argnameの指定はOracleデータベースと互換性がなく、Advanced Serverにのみ適用されます)。
argtype
関数の引数のデータ型。 ( argtypeの 仕様は Oracleデータベースと互換性がなく、Advanced Serverにのみ適用されます)。
カスケード
関数に依存するオブジェクト(演算子やトリガなど)を自動的に削除し、それらのオブジェクトに依存するすべてのオブジェクトを自動的に削除します。
制限
オブジェクトが依存している場合は、その関数を削除することを拒否します。これがデフォルトです。
次のコマンドは、 emp_comp関数を削除します。
DROP FUNCTION emp_comp(NUMBER, NUMBER);
関連項目
CREATE FUNCTION
 
2.3.45 DROP INDEX
DROP INDEX - インデックスを削除する
シノプシス
DROP INDEX name
説明
DROP INDEXは、データベースシステムから既存のインデックスを削除します。このコマンドを実行するには、スーパーユーザーまたはインデックスの所有者でなければなりません。オブジェクトがインデックスに依存する場合、エラーが発生し、インデックスは削除されません。
パラメーター
削除する索引の名前(オプションでスキーマ修飾名)。
このコマンドは、 name_idx というインデックスを削除します
DROP INDEX name_idx;
関連項目
ALTER INDEX CREATE INDEX
2.3.46 DROP PACKAGE
DROP PACKAGE - パッケージを削除する
シノプシス
DROP PACKAGE [ BODY ] name
説明
DROP PACKAGEは既存のパッケージを削除します。このコマンドを実行するには、スーパーユーザーまたはパッケージの所有者でなければなりません。 BODYを指定すると、パッケージ本体のみが削除されます。パッケージ指定は削除されません。 BODYを省略すると、パッケージ仕様と本体の両方が削除されます。
パラメーター
削除するパッケージの名前(スキーマ修飾名でも可)。
このコマンドを実行すると、 emp_adminパッケージが削除されます。
DROP PACKAGE emp_admin;
関連項目
パッケージの作成 パッケージの作成
2.3.47 ドロップ手順
DROP PROCEDURE - プロシージャを削除する
シノプシス
DROP PROCEDURE [ IF EXISTS ] name
[ ([ [ argmode ] [ argname ] argtype ] [, ...]) ]
[ CASCADE | RESTRICT ]
説明
DROP PROCEDUREは、既存のプロシージャーの定義を除去します。このコマンドを実行するには、スーパーユーザーまたはプロシージャの所有者でなければなりません。オーバーロードされたプロシージャーの場合は、プロシージャーへのすべての入力( ININ OUT )引き数データ・タイプを指定する必要があります。 Advanced Serverでは、プロシージャ名のオーバーロードが許可されているため、Advanced Server DROP PROCEDUREコマンドでは、入力引数のデータ型で指定されたプロシージャのシグネチャが必要になります(この要件はOracleデータベースと互換性がありません。オーバーロードされたプロシージャ)。
IF EXISTSCASCADE 、またはRESTRICTの 使用法は 、Oracleデータベースと互換性がなく、Advanced Serverのみで使用されます。
パラメーター
IF存在
プロシージャーが存在しない場合は、エラーをスローしないでください。この場合、通知が発行されます。
既存のプロシージャーの名前(スキーマ修飾名も可)。
argmode
引き数のモード: ININ OUT 、またはOUT 。省略すると、デフォルトはINです。 DROP PROCEDUREは、実際にはOUT引数には注意を払っていないことに注意してください。 ININ OUT引数だけをリストするだけで十分です。 ( argmodeの指定はOracleデータベースと互換性がなく、Advanced Serverにのみ適用されます)。
argname
引数の名前。その注意唯一の引数のデータ型が手続きの同一性を決定するために必要ですので、実際に、引数名に注意を払っていないのDROP PROCEDUREを 。 ( argnameの指定はOracleデータベースと互換性がなく、Advanced Serverにのみ適用されます)。
argtype
プロシージャの引数のデータ型。 ( argtypeの 仕様は Oracleデータベースと互換性がなく、Advanced Serverにのみ適用されます)。
カスケード
プロシージャに依存するオブジェクトを自動的に削除し、それらのオブジェクトに依存するすべてのオブジェクトを削除します。
制限
オブジェクトに依存するプロシージャを削除することを拒否します。これがデフォルトです。
次のコマンドは、 select_empプロシージャを削除します。
DROP PROCEDURE select_emp;
関連項目
プロシージャの作成
 
2.3.48 DROP PROFILE
DROP PROFILE - ユーザー定義のプロファイルを削除する
シノプシス
DROP PROFILE [IF EXISTS] profile_name [CASCADE | RESTRICT];
説明
IFを 含める 指定されたプロファイルが存在しない場合、サーバーにエラーをスローしないように指示する EXISTS 句。プロファイルが存在しない場合、サーバーは通知を出します。
オプションの CASCADE 句を 含めて 、プロファイルに現在関連付けられているユーザーをすべて デフォルトの プロファイル に再割り当てし、プロファイルを 削除しますオプションの RESTRICT 句を 含めて 、ロールに関連付けられたプロファイルを削除しないようにサーバーに指示します。これがデフォルト動作です。
パラメーター
プロファイル名
削除されるプロファイルの名前。
次の例では、 acctg_profile という名前のプロファイルを削除します
DROP PROFILE acctg_profile CASCADE;
 
コマンドに関連付けられた最初の再関連付けどんな役割デフォルトのプロファイルを使用してacctg_profileプロファイル 、およびacctg_profileプロファイルを削除します。
次の例では、 acctg_profile という名前のプロファイルを削除します
DROP PROFILE acctg_profile RESTRICT;
 
このコマンド RESTRICT句は、プロファイルに関連付けられているロールがある場合、 acctg_profileを削除しないようにサーバーに指示します。
 
2.3.49 DROP QUEUE
Advanced Serverには、 DROP QUEUE SQL コマンドで 追加の構文(Oracleでは提供されていません)が含まれています 。この構文は、 DBMS_AQADM に関連して使用でき ます
DROP QUEUE - 既存のキューを削除します。
シノプシス
DROPを 使用する 既存のキューを削除する QUEUE
DROP QUEUE [存在する場合] name
説明
DROP QUEUEを 使用すると、スーパーユーザーまたは aq _ administrator _ ロール 特権を 持つユーザーが 既存のキューを削除できます。
パラメーター
ドロップされているキューの名前(スキーマ修飾名)。
IF存在
キューが存在しない場合にエラーを返さないようにサーバーに指示するには、 IF EXISTS句を含めます 。サーバーは通知を出します。
次の例は、 work_order という名前のキューを削除します
DROP QUEUE work_order;
関連項目
CREATE QUEUE ALTER QUEUE
 
2.3.50 DROP QUEUE TABLE
Advanced Serverには、Oracleによって提供されていない追加の構文が DROP とともに含まれています キュー TABLE SQLコマンド。この構文は、 DBMS _ AQADMに関連して使用できます。
DROP QUEUE TABLE - キューテーブルを削除します。
シノプシス
DROPを 使用する キュー キューテーブルを削除する TABLE
DROP QUEUE TABLE [存在する場合] name [、...]
[カスケード| RESTRICT]
説明
DROP TABLE QUEUEは、 スーパーユーザーまたは AQ キュー表を削除する _ _ 管理者 ロールの 権限 を持つユーザーを可能にします
パラメーター
削除されるキュー表の名前(スキーマ修飾名)。
IF存在
キュー表が存在しない場合、サーバーにエラーを戻さないように指示するには、 IF EXISTS句を組み込みます 。サーバーは通知を出します。
カスケード
CASCADEキーワードを含める キュー表に依存するオブジェクトを自動的に削除します。
制限
RESTRICTキーワードを含める オブジェクトが依存している場合は、キュー表の削除を拒否するようにサーバーに指示します。これがデフォルトです。
 
次の例では、 work_order_table という名前のキュー表と それに依存するすべてのオブジェクトを 削除します
DROP QUEUE TABLE work_order_table CASCADE;
関連項目
CREATE QUEUE TABLE ALTER QUEUE TABLE
 
2.3.51 DROP SYNONYM
DROP SYNONYM - シノニムを削除する
シノプシス
DROP [PUBLIC] SYNONYM [ schema .] syn_name
説明
DROP SYNONYMは既存の同義語を削除します。このコマンドを実行するには、スーパーユーザーまたはシノニムの所有者で、シノニムが存在するスキーマに対してUSAGE権限を持っている必要があります
パラメーター:
syn_name
syn_nameは同義語の名前です。シノニム名は、スキーマ内で一意でなければなりません。
スキーマ
schemaは、シノニムが存在するスキーマの名前を指定します。
スキーマ修飾が可能な他のオブジェクトと同様に、検索パスに同じ名前の2つの同義語がある場合があります。削除する同義語の名前を明確にするには、スキーマ名を含めます。シノニムが DROP SYNONYMコマンドでスキーマ修飾されていない場合、Advanced Serverは検索パスで見つかった同義語の最初のインスタンスを削除します。
必要に応じて、 PUBLIC句を追加して、 パブリック・スキーマにあるシノニムを削除できます。 Oracleデータベースと互換性のあるDROP PUBLIC SYNONYMコマンドは、 パブリック・スキーマにあるシノニムを削除します。
DROP PUBLIC SYNONYM syn _ name ;
次の例では、同義語、低下 人員
DROP SYNONYM personnel;
 
2.3.52 DROP ROLE
DROP ROLE - データベースロールを削除する
シノプシス
DROP ROLE name [ CASCADE ]
説明
DROP ROLEは、指定されたロールを削除します。スーパーユーザー役割を削除するには、スーパーユーザーでなければなりません。スーパーユーザー以外のロールを削除するには、 CREATEROLE権限が必要です
ロールは、クラスタのどのデータベースでも参照されている場合は削除できません。もしそうなら、エラーが発生します。ロールを削除する前に、所有するすべてのオブジェクトを削除(または所有権の再割り当て)し、ロールが付与されているすべての特権を取り消す必要があります。
役割に関係する役割メンバーシップを削除する必要はありません。 DROP ROLEは、他のロール内のターゲットロールのメンバーシップ、およびターゲットロール内の他のロールのメンバーシップを自動的に取り消します。他の役割は落とされず、影響を受けません。
または、ロールが所有するオブジェクトのみが、ロールが所有し、ロールと同じ名前のスキーマに属している場合は CASCADEオプションを指定できます。この場合、 DROP ROLE CASCADEコマンドの発行者はスーパーユーザーでなければならず、名前付きロール、スキーマ、およびスキーマ内のすべてのオブジェクトが削除されます。
パラメーター
削除するロールの名前。
カスケード
指定すると、ロールまたはスキーマに他の依存関係が存在しない限り、ロール(およびスキーマに属するロールが所有するすべてのオブジェクト)によって所有されているスキーマも削除されます。
 
 
ロールを削除するには:
DROP ROLE admins;
関連項目
CREATE ROLE SET ROLE GRANT REVOKE
 
2.3.53 DROP SEQUENCE
DROP SEQUENCE - シーケンスを削除する
シノプシス
DROP SEQUENCE name [, ...]
説明
DROP SEQUENCEはシーケンス番号ジェネレータを削除します。このコマンドを実行するには、スーパーユーザーまたはシーケンスの所有者でなければなりません。
パラメーター
シーケンスの名前(スキーマ修飾名も可)。
シーケンスを削除するには、 シリアル
DROP SEQUENCE serial;
関連項目
ALTER SEQUENCE CREATE SEQUENCE
 
2.3.54 DROP TABLE
DROP TABLE - テーブルを削除する
シノプシス
DROP TABLE name [CASCADE | RESTRICT | CASCADE CONSTRAINTS]
説明
DROP TABLEはデータベースからテーブルを削除します。その所有者だけがテーブルを破壊する可能性があります。表を破棄せずに行の表を空にするには、 DELETEを使用します。 DROP TABLEは、常にターゲット表に存在する索引、ルール、トリガー、および制約を削除します。
パラメーター
削除する表の名前(スキーマ修飾名も可)。
含める サーバが依存しているオブジェクトがある場合、テーブルをドロップすることを拒否するように指定するキーワードを 制限 します。これがデフォルト動作です。オブジェクトがテーブルに依存する場合、 DROP TABLEコマンドはエラーを報告します。
テーブルに依存するオブジェクトを削除するに は、 CASCADE 句を 含め ます。
含める CASCADEを CONSTRAINTS 句を使用して、Advanced Serverが指定された表の従属制約(他のオブジェクト型を除く)を削除するように指定します。
次のコマンドは、依存関係のないempという名前のテーブルを削除します
DROP TABLE emp;
DROP TABLEコマンドの結果は、 表に依存関係があるかどうかによって異なります。ドロップ動作を指定して結果を制御できます。たとえば、 itemsテーブルがordersテーブルに依存する2つのテーブル、 オーダー 、およびアイテムを作成する場合は、 次のようになります。
CREATE TABLE orders
(order_id int PRIMARY KEY, order_date date, …);
CREATE TABLE items
(order_id REFERENCES orders, quantity int, …);
Advanced Serverは 、指定した削除動作に応じて、 orders テーブルを 削除するときに次のいずれかの操作 を実行します。
DROP TABLEオーダー を指定すると RESTRICT 、Advanced Serverはエラーを報告します。
あなたが指定した場合 のDROP TABLE受注CASCADEを 、Advanced Serverは、 受注テーブル 項目 ドロップします
DROP TABLE orders を指定すると、 CASCADE CONSTRAINTSは 、Advanced Serverは、 受注テーブル ドロップする と、 アイテムテーブル からの外部キーの指定を削除し ますが、 アイテムの テーブルを ドロップません
関連項目
ALTER TABLE CREATE TABLE
 
2.3.55 DROP TABLESPACE
DROP TABLESPACE - 表領域を削除する
シノプシス
DROP TABLESPACE tablespacename
説明
DROP TABLESPACEは、システムから表スペースを除去します。
表スペースは、所有者またはスーパーユーザーだけが削除できます。表スペースを削除するには、その前にすべてのデータベース・オブジェクトが空でなければなりません。現在のデータベース内のオブジェクトが表領域を使用していない場合でも、他のデータベースのオブジェクトが表領域に存在する可能性があります。
パラメーター
テーブルスペース名
表スペースの名前。
システムからemployee_spaceという表領域を削除するには、次のようにします。
DROP TABLESPACE employee_space;
関連項目
ALTER TABLESPACE
 
2.3.56 DROP TRIGGER
DROP TRIGGER - トリガーを削除する
シノプシス
DROP TRIGGER name
説明
DROP TRIGGERは、関連付けられたテーブルからトリガを削除します。このコマンドは、スーパーユーザーまたはトリガが定義されているテーブルの所有者が実行する必要があります。
パラメーター
削除するトリガーの名前。
トリガーを削除する emp_sal_trig
DROP TRIGGER emp_sal_trig;
関連項目
CREATE TRIGGER
 
2.3.57 ドロップ型
DROP TYPE - 型定義を削除する
シノプシス
DROP TYPE [ BODY ] name
説明
DROP TYPEは型定義を削除します。このコマンドを実行するには、スーパーユーザーまたはそのタイプの所有者でなければなりません。
オプションの BODY修飾子は、オブジェクト型定義にのみ適用され、コレクション型および複合型には適用されません。 BODYを指定すると、オブジェクト型本体のみが削除されます。オブジェクト型指定は削除されません。 BODYを省略すると、オブジェクト型の指定と本文の両方が削除されます。
名前付きの型に依存する他のデータベースオブジェクトがある場合、型は削除されません。
パラメーター
削除する型定義の名前。
オブジェクト型 addr_obj_typを削除します。
DROP TYPE addr_obj_typ;
ネストした表のタイプ budget_tbl_typを削除します。
DROP TYPE budget_tbl_typ;
関連項目
CREATE TYPECREATE TYPE BODY
 
2.3.58 DROP USER
DROP USER - データベースユーザーアカウントを削除する
シノプシス
DROP USER name [ CASCADE ]
説明
DROP USER指定されたユーザーを削除します。スーパーユーザーを削除するには、自分でスーパーユーザーである必要があります。スーパー以外のユーザーを削除するには、 CREATEROLE権限が必要です
ユーザーがクラスタのどのデータベースでも参照されている場合、ユーザーを削除することはできません。もしそうなら、エラーが発生します。ユーザーを削除する前に、所有するすべてのオブジェクトを削除(または所有権の再割り当て)し、ユーザーに付与されているすべての特権を取り消す必要があります。
ただし、ユーザーに関係するロールメンバーシップを削除する必要はありません。 DROP USERは、ターゲットユーザーの他のロールおよび他のロールのターゲットユーザーのメンバーシップを自動的に取り消します。他の役割は落とされず、影響を受けません。
また、ユーザーが所有するオブジェクトのみが、ユーザーが所有し、ユーザーと同じ名前のスキーマに属している場合は、 CASCADEオプションを指定できます。この場合、 DROP USER CASCADEコマンドの発行者はスーパーユーザーでなければならず、スキーマ内の指定されたユーザー、スキーマおよびすべてのオブジェクトが削除されます。
パラメーター
削除するユーザーの名前。
カスケード
これを指定すると、ユーザーまたはスキーマに対する他の依存関係が存在しない限り、ユーザー(およびスキーマに属するユーザーが所有するすべてのオブジェクト)と同じ名前のスキーマも削除されます。
 
 
オブジェクトを所有しておらず、他のオブジェクトに権限が与えられていないユーザーアカウントを削除するには:
DROP USER john;
ユーザーアカウント john を削除するには、オブジェクトに特権を与えられておらず、ユーザーjohnが所有するスキーマjohn以外のオブジェクトを所有していない場合は、次のようにします。
DROP USER john CASCADE;
関連項目
CREATE USER ALTER USER
 
2.3.59 DROP VIEW
DROP VIEW - ビューを削除する
シノプシス
DROP VIEW name
説明
DROP VIEWは既存のビューを削除します。このコマンドを実行するには、データベーススーパーユーザーまたはビューの所有者である必要があります。他のオブジェクトがこのビューに依存している場合(ビューのビューなど)、名前付きビューは削除されません。
Oracleと互換性のある DROP VIEWコマンドの形式は、 CASCADE句をサポートしていません。ビューとその依存関係を削除するには、 DROP V IEW コマンドのPostgreSQLと互換性のある形式を使用します。詳細については、PostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-dropview.html
パラメーター
削除するビューの名前(スキーマ修飾名も可)
このコマンドを実行すると、 dept_30 というビューが削除され ます
DROP VIEW dept_30;
関連項目
CREATE VIEW
 
2.3.60 EXEC
EXEC
シノプシス
EXEC function_name ['('[ argument _ list ]')']
説明
EXECUTE
パラメーター
プロシージャ名
procedure_nameは(オプションでスキーマ修飾された)関数名です。
argument_list
argument_listは、関数が必要とする引数のコンマ区切りのリストを指定します。 argument_listの各メンバーは、関数が期待する仮引数に対応することに注意してください。各仮引数は、 INパラメーター、 OUTパラメーター、またはINOUTパラメーターです。
EXECステートメントは、関数で必要な引数に応じて、いくつかのいずれかの形式を取ることがあります。
EXEC update_balance;
EXEC update_balance();
EXEC update_balance(1,2,3);
 
2.3.61 GRANT
GRANT - アクセス特権を定義する
シノプシス
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES }
[,...] | ALL [ PRIVILEGES ] }
ON tablename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
 
GRANT { { INSERT | UPDATE | REFERENCES } ( column [, ...]) }
[, ...]
ON tablename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
 
GRANT { SELECT | ALL [ PRIVILEGES ] }
ON sequencename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
 
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION progname
( [ [ argmode ] [ argname ] argtype ] [, ...] )
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
 
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON PROCEDURE progname
[ ( [ [ argmode ] [ argname ] argtype ] [, ...] ) ]
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
 
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON PACKAGE packagename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
 
GRANT role [, ...]
TO { username | groupname | PUBLIC } [, ...]
[ WITH ADMIN OPTION ]
 
GRANT { CONNECT | RESOURCE | DBA } [, ...]
TO { username | groupname } [, ...]
[ WITH ADMIN OPTION ]
 
GRANT CREATE [ PUBLIC ] DATABASE LINK
TO { username | groupname }
 
GRANT DROP PUBLIC DATABASE LINK
TO { username | groupname }
 
GRANT EXEMPT ACCESS POLICY
TO { username | groupname }
説明
データベースオブジェクト(テーブル、ビュー、シーケンス、またはプログラム)に権限を付与します1、役割のメンバーシップを付与1、およびシステム権限を付与し1:GRANTコマンドは、3つの基本的なバリエーションがあります。これらの変種は多くの点で似ていますが、別々に記述するのに十分です。
高度なサーバー 、ユーザーとグループの概念は、 役割と呼ばれるエンティティの単一型に統一されています。このコンテキストでは、 ユーザーLOGIN属性を持つロールです。ロールを使用してセッションを作成し、アプリケーションに接続することができます。 グループLOGIN属性を持たないロールです。ロールは、セッションの作成やアプリケーションへの接続には使用できません。
ロールは1つ以上の他のロールのメンバーになることがあるので、グループに属するユーザーの従来の概念は依然として有効です。しかし、ユーザおよびグループの一般化により、ユーザはユーザに「属し」、グループには「属し」てもよく、グループはユーザに「属し」てもよい。ユーザー名とグループ名は同じ名前空間を共有するため、 GRANTコマンドで受給者がユーザーかグループかを区別する必要はありません
 
2.3.62 データベース・オブジェクトに対するGRANT
この GRANTコマンドの変種は、データベースオブジェクトに対する特定の権限をロールに付与します。これらの特権は、既に付与されている特権に追加されます。
キーワード PUBLICは、後で作成されるロールを含むすべてのロールに権限が付与されることを示します。 PUBLICは、常にすべての役割を含む暗黙的に定義されたグループと考えることができます。特定の役割には、直接付与された権限、現在メンバーになっている役割に与えられた権限、 PUBLICに付与された権限の合計が与えられます。
場合 WITH GRANT OPTIONが指定され、特権の受信者は、今度は他の人にそれを与えることができます。許可オプションがなければ、受信者はそれを行うことができません。 PUBLICに付与することはできません。
所有者はデフォルトですべての特権を持つため、オブジェクトの所有者(通常は作成したユーザー)に特権を与える必要はありません。ただし、所有者は、安全のために自分の特権の一部を取り消すことができます。オブジェクトを削除したり、定義を変更する権利は、付与可能な特権では説明されません。それは所有者に内在しており、付与または取り消すことはできません。所有者は暗黙的にオブジェクトのすべての許可オプションも持っています。
オブジェクトのタイプに応じて、初期のデフォルト権限には PUBLICに いくつかの権限を付与することが含まれます 。デフォルトでは、表のパブリック・アクセスはなく、関数、プロシージャー、およびパッケージのEXECUTE特権があります。オブジェクトの所有者はもちろんこれらの特権を取り消すことができます。 (最大限のセキュリティを実現するには、オブジェクトを作成するのと同じトランザクションでREVOKEを実行します。その場合、別のユーザーがオブジェクトを使用できるウィンドウはありません)。
可能な特権は次のとおりです。
セレクト
指定した表、ビュー、またはシーケンスの任意の列からのSELECT許可します。シーケンスの場合、この権限によってcurrval関数も使用できます。
インサート
指定したテーブルに新しい行のINSERT許可します。
更新
指定された表の列のUPDATE許可します。 SELECT ... FOR UPDATEには、( SELECT特権以外の)この特権も必要です。
削除
指定されたテーブルから行のDELETE許可します。
参考文献
外部キー制約を作成するには、参照テーブルと参照テーブルの両方にこの権限を持たせる必要があります。
実行する
指定されたパッケージ、プロシージャ、または関数の使用を許可します。パッケージに適用すると、パッケージのパブリックプロシージャ、パブリック関数、パブリック変数、レコード、カーソル、その他のパブリックオブジェクトとオブジェクトタイプのすべてを使用できます。これは、関数、プロシージャ、およびパッケージに適用できる唯一の特権です。
EXECUTE権限を付与するため Advanced Serverの構文は、Oracleデータベースと完全には互換性がありません。 Advanced Serverでは、 FUNCTIONPROCEDURE 、またはPACKAGEのいずれかのキーワードでプログラム名を修飾する必要がありますが、これらのキーワードはOracleでは省略する必要があります 。関数の場合、 Advanced Serverでは、関数名の後にすべての入力( ININ OUT )引数データ型(関数引数がない場合は空の括弧を含む)が必要です。手続きの場合、手続きに1つ以上の入力引数がある場合は、すべての入力引数データ型を指定する必要があります。 Oracleでは、関数とプロシージャのシグネチャを省略する必要があります。これは、すべてのプログラムがOracleでは同じ名前空間を共有するため、関数、プロシージャ、およびパッケージは、 Advanced Serverで独自の名前空間を持ち、プログラム名のオーバーロードをある程度許容するためです。
すべての特権
使用可能なすべての特権を一度に付与します。
他のコマンドで必要な権限は、それぞれのコマンドのリファレンスページにリストされています。
 
2.3.63 ロールに対するGRANT
GRANTコマンドのこの変種は、ロールのメンバーシップを1つ以上の他のロールに付与します。ロールに所属する権限は、そのメンバーのそれぞれに伝達されるため、ロール内のメンバーシップは重要です。
場合は WITH ADMIN OPTIONが指定され、メンバーは他の人に役割でターン助成金メンバーシップ、および中にも役割のメンバシップを取り消すことができます。 adminオプションがなければ、通常のユーザーはそれを行うことができません。
データベーススーパーユーザーは、任意の役割のメンバーシップを誰にでも付与または取り消すことができます。 CREATEROLE権限を持つロールは、スーパーユーザー以外のロールのメンバシップを付与または取り消すことができます。
次の意味を持つ3つの事前定義された役割があります。
CONNECT
CONNECTロールを付与することは、権限受領者にLOGIN特権を与えることと同じです。付与者はCREATEROLE特権を持っていなければなりません。
リソース
付与 RESOURCEロールは付与者と同じ名前を持つスキーマにCREATEUSAGE権限を付与することと同じです。このスキーマは、付与が行われる前に存在していなければなりません。付与者は、このスキーマに対するCREATE権限またはUSAGE権限を権限受領者に付与する権限を持っていなければなりません。
DBA
DBAロールを付与することは、受領者をスーパーユーザーにすることと同じです。付与者はスーパーユーザーでなければなりません。
ノート
REVOKEコマンドは、アクセス権限を取り消すために使用されます。
オブジェクトの非所有者がオブジェクトの権限 GRANT しようとすると、そのオブジェクトに権限が何もない場合、コマンドは完全に失敗します。特権が利用可能である限り、コマンドは続行されますが、ユーザーが許可オプションを持つ特権のみを許可します。 GRANT ALL PRIVILEGES形式では、付与オプションが指定されていない場合は警告メッセージが表示され、コマンドで特に指定されている特権の付与オプションが保持されていない場合は他の形式で警告が発行されます。 (原則として、これらのステートメントはオブジェクト所有者にも適用されますが、所有者は常にすべての付与オプションを保持しているため、このケースは決して発生しません)。
データベーススーパーユーザは、オブジェクト権限設定に関係なく、すべてのオブジェクトにアクセスできます。これは Unixシステムのroot 権限に匹敵します。 rootと同様に、絶対に必要な場合を除いてスーパーユーザーとして操作することは賢明ではありません。
スーパーユーザーが GRANTまたはREVOKEコマンドを発行することを選択した場合、コマンドは影響を受けたオブジェクトの所有者によって発行されたかのように実行されます。特に、そのようなコマンドを介して付与された権限は、オブジェクト所有者によって付与されたように見えます。 (ロールのメンバーシップの場合、メンバーシップはロールを含むロールによって付与されているように見えます)。
GRANTおよびREVOKEは、影響を受けたオブジェクトの所有者ではなく、そのオブジェクトを所有するロールのメンバーであるか、オブジェクトに対するWITH GRANT OPTION権限を保持するロールのメンバーであるロールによっても実行できます。この場合、権限は、オブジェクトを実際に所有するロールによって付与されたものとして記録されるか、 WITH GRANT OPTION権限を保持します。
たとえば、テーブル t1がロールg1によって所有されていて、ロールu1がメンバーである場合、 u1t1の特権をu2に付与できますが、これらの特権はg1によって直接付与されたように見えます。役割g1の他のメンバーは後で取り消すことができます。
GRANT を実行しているロールが、複数のロール・メンバーシップ・パスを介して間接的に必要な権限を保持している場合は、どのロールが含まれているかが不許可になります。このような場合は、 SET ROLEを使用してGRANTを実行する特定のロールにすることをお勧めします。
現在、 Advanced Serverは、表の個々の列に対する特権の付与または取消しをサポートしていません。考えられる回避策の1つは、目的の列のみを持つビューを作成し、そのビューに特権を与えることです。
emp 上のすべてのユーザーに挿入権限を付与します
GRANT INSERT ON emp TO PUBLIC;
ビューsalesemp上のすべての利用可能な権限をユーザー mary付与する
GRANT ALL PRIVILEGES ON salesemp TO mary;
スーパーユーザーまたは emp の所有者が実行した場合、上記の権限はすべて実際に付与されますが、他のユーザーが実行すると、他のユーザーが付与する権限のみを付与することに注意してください
ロール 管理者の メンバーシップをユーザjoeに 付与する
GRANT admins TO joe;
付与 joeユーザにCONNECT権限を:
GRANT CONNECT TO joe;
関連項目
REVOKE SET ROLE
 
2.3.64 システム特権に関するGRANT
この GRANTコマンドの変種は、データベース内で特定のシステム操作を実行する役割を果たします。システム権限は、必ずしも1つのスキーマの範囲内にない特定のデータベースオブジェクトを作成または削除する機能に関連しています。データベーススーパーユーザーだけがシステム特権を許可できます。
CREATE [PUBLIC]データベースリンク
CREATE [PUBLIC] DATABASE LINK 権限は、指定した役割がデータベース・リンクを作成することができます。ロールがパブリック・データベース・リンクを作成できるようにするには、 PUBLICキーワードを含めます。指定されたロールがプライベート・データベース・リンクを作成できるようにするには、 PUBLICキーワードを省略します。
公衆データベースリンクを抹消する
DROP PUBLIC DATABASE LINK 権限は役割がパブリック・データベース・リンクを削除することができます。プライベート・データベース・リンクを削除するためのシステム権限は必要ありません。プライベートデータベースリンクは、リンク所有者またはデータベーススーパーユーザーによって削除される可能性があります。
退出のためのアクセスポリシー
EXEMPT アクセスポリシー権限は、ターゲット・データベース・オブジェクトに関連付けることができる任意のポリシー関数を呼び出すことなく、SQLコマンドを実行する役割を可能にします。つまり、その役割はデータベース内のすべてのセキュリティポリシーから免除されます。
EXEMPT ACCESS POLICY権限、EXEMPT ACCESS POLICY権限を持つロールにメンバーシップによって継承ではありません。たとえば、GRANTコマンドの次のシーケンスは、joeは EXEMPT ACCESS POLICY権限を付与されたEnterpriseDBの役割にメンバーシップを付与されていてもEXEMPT ACCESS POLICY権限を取得するユーザjoeにはなりません。
GRANT EXEMPT ACCESS POLICY TO enterprisedb;
GRANT enterprisedb TO joe;
ロールにEXEMPT ACCESS POLICY特権がある場合、システムカタログテーブルpg_authid rolpolicyexemptカラムはtrueに設定されます
グラントは、ユーザjoePUBLIC DATABASE LINK権限CREATE:
GRANT CREATE PUBLIC DATABASE LINK TO joe;
付与ユーザjoeDROP PUBLIC DATABASE LINK権限を:
GRANT DROP PUBLIC DATABASE LINK TO joe;
付与ユーザjoeEXEMPT ACCESS POLICY権限を:
GRANT EXEMPT ACCESS POLICY TO joe;
ALTER ROLEコマンドを使用したシステム権限の割り当て
Advanced Serverの ALTER ROLEコマンドは、次のものを割り当てるために使用できる構文もサポートしています。
EXEMPT ACCESS POLICY 権限
ALTER ROLE 構文は、Oracleデータベースと互換性のそれぞれのコマンドと機能的に同等です。
 
関連項目
リボーク 、アルターロール
 
2.3.65 INSERT
INSERT - テーブルに新しい行を作成する
シノプシス
INSERT INTO table [@ dblink ] [ ( column [, ...] ) ]
{ VALUES ( { expression | DEFAULT } [, ...] )
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
| query }
説明
INSERTを使用すると、新しい行を表に挿入できます。クエリの結果として、一度に1行または複数の行を挿入できます。
ターゲットリストの列は、任意の順序でリストされます。ターゲットリストに存在しない各列は、デフォルト値、宣言されたデフォルト値またはnullのいずれかを使用して挿入されます。
各列の式が正しいデータ型でない場合、自動型変換が試行されます。
| { レコード にRETURNING variable [、...]}句は、 INSERTコマンドがSPLプログラム内で使用されている場合、およびVALUES句が使用されている場合にのみ指定できます。
RETURNING BULK INSERT コマンドSPLプログラム内で使用されている場合、コレクション への [...]句のみ指定することができるCOLLECT。複数のコレクションBULK COLLECT INTO句のターゲットとして指定されている場合、各コレクションは単一のスカラーフィールドで構成されている必要があります。つまり、 コレクションはレコードであってはなりません。挿入された行ごとに評価されるreturn_expressionは、最初の要素から始まるコレクションの要素になります。 コレクション内の既存の行はすべて削除されます。結果セットが空の場合、 コレクションは空になります。
表に挿入するには、その表に対するINSERT特権が必要です。 照会句を使用して照会から行を挿入する場合は、照会で使用されるすべての表に対してSELECT特権も必要です。
パラメーター
既存の表の名前(スキーマ修飾名も可)。
dblink
リモートデータベースを識別するデータベースリンク名。データベース・リンクの詳細は、 CREATE DATABASE LINKコマンドを参照してください
カラム
内の列の名前
表現
に割り当てる式または値
デフォルト
この列にはデフォルト値が設定されます。
クエリ
挿入される行を提供するクエリ( SELECT文)。構文の説明については、 SELECTコマンドを参照してください。
return_expression
表の 1つ以上の列を含む式return_expressiontableの列名を指定した場合、 return_expressionが評価されたときの列の値は次のように決定されます。
return_expression指定された列に INSERTコマンドの値が割り当てられている場合、割り当てられた値がreturn_expressionの評価に使用されます。
return_expression指定された列に INSERTコマンドの値が割り当てられておらず、表の列定義の列のデフォルト値がない場合は、 return_expressionの評価にNULLが使用されます。
return_expression指定された列に INSERTコマンドで値が割り当てられておらず、表の列定義の列のデフォルト値がある場合、 return_expressionの評価ではデフォルト値が使用されます。
記録
評価された return_expressionが割り当てられるフィールドのレコード 。最初のreturn_expressionレコードの最初のフィールドに割り当てられ、2番目のreturn_expressionレコードの2番目のフィールドに割り当てられます。 レコードのフィールド数は式の数と完全に一致しなければならず、フィールドは割り当てられた表現。
変数
評価された return_expressionが割り当てられる変数 。複数のreturn_expression変数が指定されている場合、最初のreturn_expressionが最初の変数に割り当てられ、2番目のreturn_expressionが2番目の変数に割り当てられます。INTOキーワードの後に​​指定される変数の数は、 RETURNINGキーワードと変数は、割り当てられた式と型互換性がなければなりません。
コレクション
評価された return_expression から要素が作成されるコレクション 。単一フィールドのコレクションまたはレコードタイプのコレクションである単一のコレクション、または複数のコレクションが存在する場合があります。その場合、各コレクションは単一のフィールドで構成されなければなりません。戻り式の数は、指定されたすべてのコレクションのフィールド数と順番に一致する必要があります。それぞれの対応するreturn_expressionおよびcollectionフィールドは型互換性がなければなりません。
empに 単一の行を挿入します
INSERT INTO emp VALUES (8021,'JOHN','SALESMAN',7698,'22-FEB-07',1250,500,30);
この2番目の例では、列 commは省略されているため、デフォルト値はnullになります。
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, deptno)
VALUES (8022,'PETERS','CLERK',7698,'03-DEC-06',950,30);
3番目の例では、値を指定するのではなく、 hiredateおよびcomm列にDEFAULT句を使用しています。
INSERT INTO emp VALUES (8023,'FORD','ANALYST',7566,NULL,3000,NULL,20);
この例では、部門名用の表を作成し、次に dept表のdnameから選択して表に挿入します。
CREATE TABLE deptnames (
deptname VARCHAR2(14)
);
INSERT INTO deptnames SELECT dname FROM dept;
 
2.3.66 ロック
LOCK - テーブルをロックする
シノプシス
LOCK TABLE name [, ...] IN lockmode MODE [ NOWAIT ]
どこ LOCKMODEは、次のいずれかです。
ROW SHARE | ROW EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE
説明
LOCK TABLEは 、テーブルレベルのロックを取得します。必要に応じて、競合するロックが解放されるのを待機します。 NOWAITが指定されている場合、 LOCK TABLEは目的のロックを取得するのを待機しません。直ちに取得できない場合、コマンドは中止され、エラーが発行されます。取得されると、ロックは現在のトランザクションの残りの間保持されます。 ( UNLOCK TABLEコマンドはありません;ロックは常にトランザクション終了時に解放されます)。
表を参照するコマンドに対して自動的にロックを取得する場合、 Advanced Serverは常に最小限の制限付きロック・モードを使用します。 LOCK TABLEには、より制限的なロックが必要な場合があります。たとえば、アプリケーションがコミットされた分離レベルでトランザクションを実行し、トランザクション中にテーブル内のデータが安定していることを保証する必要があるとします。これを達成するには、クエリを実行する前にテーブルに対してSHAREロックモードを取得することができます。これにより、同時データ変更が防止され、テーブルの後続読込みでは、 SHAREロック・モードがライターによって獲得されたROW EXCLUSIVEロックと競合し、 LOCK TABLEの IN SHARE MODEステートメントがコンカレント・ホルダーROW EXCLUSIVEモードは、コミットまたはロールバックをロックします。したがって、ロックを取得すると、コミットされていない未処理の書き込みはありません。さらに、ロックを解除するまでは何も開始できません。
直列化可能な分離レベルでトランザクションを実行するときに同様の効果を得るには、データ変更ステートメントを実行する前にLOCK TABLEステートメントを実行する必要があります。シリアライズ可能なトランザクションのデータビューは、最初のデータ変更ステートメントの開始時に固定されます。後でLOCK TABLEを実行しても同時書き込みは防止されますが、トランザクションが読み取る内容が最新のコミットされた値に対応することは保証されません。
この種のトランザクションがテーブル内のデータを変更する場合は、 SHAREモードの代わりにSHARE ROW EXCLUSIVEロックモードを使用する必要があります。
これにより、このタイプのトランザクションは一度に1つだけ実行されます。これがなければ、デッドロックが発生する可能性があります.2つのトランザクションが SHAREモードを取得し、実際に更新を実行するためにROW EXCLUSIVEモードを取得できない可能性があります。 (トランザクション自体のロックは競合することはないので、 SHAREモードを保持しているときにトランザクションはROW EXCLUSIVEモードを取得できますが、他の誰かがSHAREモードを保持している場合は無効になります)。 1つのオブジェクトに対して複数のロック・モードが関与している場合、トランザクションは常に最も制限の厳しいモードを最初に取得する必要があります。
パラメーター
ロックする既存のテーブルの名前(スキーマ修飾名でも可)。
コマンド LOCK TABLE a、b ; LOCK TABLE aと等価です。 ロックテーブルb 。テーブルは、 LOCK TABLEコマンドで指定された順序で1つずつロックされます。
ロックモード
ロックモードは、このロックがどのロックと競合するかを指定します。
ロック・モードが指定されていない場合、サーバーは最も制限の厳しい ACCESS EXCLUSIVE モードを使用します 。 ( ACCESS EXCLUSIVEはOracleデータベースと互換性がありません.Adaptive Serverでは、この構成モードでは、ロックされた表に他のトランザクションがアクセスできないことが保証されます)。
NOWAIT
ことを指定指定されたロックがすぐにトランザクションが中止され、待つことなく取得できない場合:任意の競合するロックを解除するためにLOCK TABLEが待つべきではありません。
ノート
すべての形式の LOCKには、 UPDATEおよび/またはDELETE権限が必要です。
LOCK TABLEは、トランザクションが終了するとすぐにロックが解除されるため、トランザクションブロック内でのみ有効です。トランザクションブロックの外に出現するLOCK TABLEコマンドは、自己完結型のトランザクションを形成するので、ロックは取得されるとすぐに削除されます。
LOCK TABLEはテーブル・レベルのロックのみを処理するため、 ROWを含むモード名はすべて誤った名前です。これらのモード名は、一般に、ロックされたテーブル内で行レベルのロックを取得するというユーザの意図を示すものとして読まれるべきです。また、 ROW EXCLUSIVEモードは共有可能なテーブルロックです。 LOCK TABLEに関する限り、すべてのロックモードは同じセマンティクスを持ちますが、どのモードがどのモードと矛盾するかというルールが異なります。
 
2.3.67 REVOKE
REVOKE - アクセス権を削除する
シノプシス
REVOKE { { SELECT | INSERT | UPDATE | DELETE | REFERENCES }
[,...] | ALL [ PRIVILEGES ] }
ON tablename
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
 
REVOKE { SELECT | ALL [ PRIVILEGES ] }
ON sequencename
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
 
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION progname
( [ [ argmode ] [ argname ] argtype ] [, ...] )
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
 
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON PROCEDURE progname
[ ( [ [ argmode ] [ argname ] argtype ] [, ...] ) ]
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
 
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON PACKAGE packagename
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
 
REVOKE role [, ...] FROM { username | groupname | PUBLIC }
[, ...]
[ CASCADE | RESTRICT ]
 
REVOKE { CONNECT | RESOURCE | DBA } [, ...]
FROM { username | groupname } [, ...]
 
REVOKE CREATE [ PUBLIC ] DATABASE LINK
FROM { username | groupname }
 
REVOKE DROP PUBLIC DATABASE LINK
FROM { username | groupname }
 
REVOKE EXEMPT ACCESS POLICY
FROM { username | groupname }
説明
REVOKEコマンドは、1つの以上のロールから以前に付与された権限を取り消します。キーワードPUBLICは、すべてのロールの暗黙的に定義されたグループを指します。
特権タイプの意味については、 GRANTコマンドの説明を参照してください
特定のロールには、そのロールに直接付与された特権、現在のロールに付与されている特権、 PUBLICに 付与されている特権が加算されます。したがって、たとえばPUBLICからSELECT権限を取り消しても、必ずしもすべてのロールがそのオブジェクトに対してSELECT権限を失っているわけではありません。直接または別のロールを介して付与されたロールには引き続き権限が与えられます。
許可オプションで特権が付与されていた場合、その特権の認可オプションは、特権自体と同様に取り消されます。
ユーザーが付与オプション付きの特権を保持し、それを他のユーザーに付与した場合、他のユーザーが保持する特権は従属特権と呼ばれます。最初のユーザーが保持する特権または許可オプションが取り消されていて、従属特権が存在する場合、 CASCADEが指定されていれば、それらの従属特権も取り消されます。そうしないと、取り消しアクションは失敗します。この再帰的取り消しは、このREVOKEコマンドの対象となるユーザーにトレーサブルである一連のユーザーを通じて付与された権限にのみ影響します。したがって、影響を受けるユーザーは、他のユーザーから権限を付与されていれば、その権限を効果的に保持できます。
注意CASCADEは、Oracleデータベースと互換性のあるオプションではありません。デフォルトでは、 Oracleは常に従属権限をカスケードしますが、 Advanced ServerではCASCADEキーワードを明示的に指定する必要があります 。そうしないと、 REVOKEコマンドは失敗します。
役割のメンバーシップを取り消すと、代わり GRANT OPTIONADMIN OPTIONと呼ばれますが、動作は似ています。
ノート
ユーザーは、そのユーザーが直接付与した権限のみを取り消すことができます。たとえば、ユーザー AがユーザーBに付与オプション付きの特権を付与し、ユーザーBがそれをユーザーCに付与した場合、ユーザーACから直接特権を取り消すことはできません。代わりに、ユーザーAはユーザーBから許可オプションを取り消し、 CASCADEオプションを使用して権限がユーザーCから取り消されるようにすることができます。 ABの両方がCに同じ権限を付与した場合、Cはまだ効果的に権限を持つことになりますので、他の例としては、Aは 、Bの助成自分の付与を取り消すことはできませんが。
オブジェクトの非所有者がオブジェクトの権限 REVOKE しようとすると、そのオブジェクトに特権がない場合、コマンドは完全に失敗します。いくつかの特権が利用可能である限り、コマンドは続行されますが、ユーザが許可オプションを持っている特権だけを取り消します。 REVOKE ALL PRIVILEGESフォームでは、付与オプションが指定されていない場合は警告メッセージが表示され、コマンドで特に指定されている権限の付与オプションが保持されていない場合は、その他のフォームで警告が発行されます。 (原則として、これらのステートメントはオブジェクト所有者にも適用されますが、所有者は常にすべての付与オプションを保持しているため、このケースは決して発生しません)。
スーパーユーザーが GRANTまたはREVOKEコマンドを発行することを選択した場合、コマンドは影響を受けたオブジェクトの所有者によって発行されたかのように実行されます。すべての特権は最終的に(おそらく間接的に許可オプションのチェーンを介して)オブジェクト所有者から来るので、スーパーユーザーはすべての特権を取り消すことができますが、これは上記のようにCASCADEを使用する必要があります。
REVOKEは、影響を受けるオブジェクトの所有者ではなく、オブジェクトを所有するロールのメンバであるロール、またはオブジェクトに対するWITH GRANT OPTION権限を保持するロールのメンバであるロールによっても実行できます。この場合、コマンドは、オブジェクトを実際に所有するロールを含むか、またはWITH GRANT OPTION権限を保持しているロールによって発行されたかのように実行されます。たとえば、テーブルt1がロールg1によって所有されていて、ロールu1がメンバーである場合、 u1g1によって付与されたとして記録されたt1の特権を取り消すことができます。これには、 g1の他のメンバーだけでなく、 u1によって行われたグラントも含まれます。
REVOKE を実行しているロールが、複数のロール・メンバーシップ・パスを介して間接的に権限を保持している場合は、ロールを含むどのコマンドを実行するかは不特定です。そのような場合は、 SET ROLEを使用してREVOKEを実行する特定のロールにすることをお勧めします。そうしないと、意図した権限以外の権限が取り消されたり、何も取り消されたりしないことがあります。
注意:Advanced Serverの ALTER ROLEコマンドは、パブリックまたはプライベート・データベース・リンクの作成に必要なシステム権限を破棄する構文またはファイングレイン・アクセス制御ポリシー( DBMS _ RLS )の除外もサポートしています。 ALTER ROLE構文は、Oracleデータベースと互換性のあるそれぞれのREVOKEコマンドと機能的に同等です。
emp のパブリックに対する挿入権限を取り消します
REVOKE INSERT ON emp FROM PUBLIC;
ビューsalesemp上のユーザー mary からのすべての特権を取り消します
REVOKE ALL PRIVILEGES ON salesemp FROM mary;
これは実際には、「 私が与えたすべての特権を取り消す 」ことを意味することに注意してください
ユーザjoeからロール 管理者の メンバーシップを取り消します。
REVOKE admins FROM joe;
ユーザーjoeからCONNECT権限を取り消します。
REVOKE CONNECT FROM joe;
ユーザーjoeからCREATE DATABASE LINK権限を取り消します。
REVOKE CREATE DATABASE LINK FROM joe;
ユーザーjoeからEXEMPT ACCESS POLICY権限を取り消します。
REVOKE EXEMPT ACCESS POLICY FROM joe;
関連項目
報酬 報酬を与える
 
2.3.68 ROLLBACK
ROLLBACK - 現在のトランザクションを中断する
シノプシス
ROLLBACK [ WORK ]
説明
ROLLBACKは現在のトランザクションをロールバックし、トランザクションによって行われたすべての更新を破棄します。
パラメーター
作業
オプションのキーワード - 効果はありません。
ノート
COMMIT使用して 、トランザクションを正常に終了します。
トランザクション内でないときにROLLBACKを 発行することは問題ありません。
注意: plpgsqlプロシージャでROLLBACK実行すると、ランタイム・スタックにOracleスタイルのSPLプロシージャがある場合はエラーがスローされます。
すべての変更を中止するには:
ROLLBACK;
関連項目
コミット ロールバック から SAVEPOINT SAVEPOINT
 
2.3.69 SAVEPOINTへのロールバック
ROLLBACK TO SAVEPOINT - セーブポイントにロールバックする
シノプシス
ROLLBACK [ WORK ] TO [ SAVEPOINT ] savepoint_name
説明
セーブポイントが確立された後に実行されたすべてのコマンドをロールバックします。セーブポイントは有効なままで、必要に応じて後でロールバックすることができます。
ROLLBACK TO SAVEPOINTは、指定されたセーブポイントの後に確立されたすべてのセーブポイントを暗黙的に破棄します。
パラメーター
savepoint_name
ロールバックするセーブポイント。
ノート
確立されていないセーブポイント名を指定するとエラーになります。
ROLLBACK TO SAVEPOINTSPLプログラムではサポートされていません。
セーブポイントに実行したコマンドの効果を元に戻すには DEPTSを設立されました:
\set AUTOCOMMIT off
INSERT INTO dept VALUES (50, 'HR', 'NEW YORK');
SAVEPOINT depts;
INSERT INTO emp (empno, ename, deptno) VALUES (9001, 'JONES', 50);
INSERT INTO emp (empno, ename, deptno) VALUES (9002, 'ALICE', 50);
ROLLBACK TO SAVEPOINT depts;
関連項目
COMMIT ROLLBACK SAVEPOINT
 
2.3.70 SAVEPOINT
SAVEPOINT - 現在のトランザクション内に新しいセーブポイントを定義する
シノプシス
SAVEPOINT savepoint_name
説明
SAVEPOINTは、現在のトランザクション内に新しいセーブポイントを確立します。
セーブポイントは、トランザクション内の特別なマークで、確立後に実行されるすべてのコマンドがロールバックされ、セーブポイント時のトランザクション状態に復元されます。
パラメーター
savepoint_name
セーブポイントに与えられる名前。
ノート
ROLLBACK TO SAVEPOINT使用してセーブポイントにロールバックします。
セーブポイントは、トランザクションブロック内でのみ確立できます。トランザクション内に複数のセーブポイントが定義されている可能性があります。
以前のセーブポイントと同じ名前で別のセーブポイントが設定されると、古いセーブポイントが保持されますが、ロールバック時には最近のセーブポイントだけが使用されます。
SAVEPOINTSPLプログラムではサポートされていません。
セーブポイントを確立し、後に確立された後に実行されるすべてのコマンドの効果を元に戻すには:
\set AUTOCOMMIT off
INSERT INTO dept VALUES (50, 'HR', 'NEW YORK');
SAVEPOINT depts;
INSERT INTO emp (empno, ename, deptno) VALUES (9001, 'JONES', 50);
INSERT INTO emp (empno, ename, deptno) VALUES (9002, 'ALICE', 50);
SAVEPOINT emps;
INSERT INTO jobhist VALUES (9001,'17-SEP-07',NULL,'CLERK',800,NULL,50,'New Hire');
INSERT INTO jobhist VALUES (9002,'20-SEP-07',NULL,'CLERK',700,NULL,50,'New Hire');
ROLLBACK TO depts;
COMMIT;
上記のトランザクションは、 deptテーブルに行をコミットしますが、 empテーブルとjobhistテーブルへの挿入はロールバックされます。
関連項目
コミット ロールバック ロールバックからSAVEPOINT
 
2.3.71 SELECT
SELECT - テーブルまたはビューから行を取得する
シノプシス
SELECT [ optimizer_hint ] [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...]
FROM from_item [, ...]
[ WHERE condition ]
[ [ START WITH start_expression ]
CONNECT BY { PRIOR parent_expr = child_expr |
child_expr = PRIOR parent_expr }
[ ORDER SIBLINGS BY expression [ ASC | DESC ] [, ...] ] ]
[ GROUP BY { expression | ROLLUP ( expr_list ) |
CUBE ( expr_list ) | GROUPING SETS ( expr_list ) } [, ...]
[ LEVEL ] ]
[ HAVING condition [, ...] ]
[ { UNION [ ALL ] | INTERSECT | MINUS } select ]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ FOR UPDATE [WAIT n |NOWAIT|SKIP LOCKED]]
どこ from_itemは、のいずれかになります。
table_name [@ dblink ] [ alias ]
( select ) alias
from_item [ NATURAL ] join_type from_item
[ ON join_condition | USING ( join_column [, ...] ) ]
説明
SELECTは、1つまたは複数のテーブルから行を取得します。 SELECTの一般的な処理は次のとおりです。
1。
FROMリストのすべての要素が計算されます。 ( FROMリストの各要素は、実表または仮想表です。) FROMリストに複数の要素が指定されている場合、それらは相互に結合されます。 (下記のFROM句を参照してください。)
2。
場合は WHERE句が指定され、条件を満たさないすべての行は出力から除外されています。 (下のWHERE句を参照してください。)
3。
場合 GROUP BY指定され、出力が1つまたは複数の値に一致する行のグループに分割されます。 HAVING句が存在する場合、指定された条件を満たさないグループは削除されます。 (下記のGROUP BY句とHAVING句を参照してください。)
4。
UNIONINTERSECT 、およびMINUS 演算子を使用すると、複数のSELECT文の出力を結合して1つの結果セットを形成できます。 UNION演算子は、結果セットの一方または両方にあるすべての行を戻します。 INTERSECT演算子は、厳密に両方の結果セットに含まれるすべての行を戻します。 MINUS演算子は、最初の結果セットにあり、2番目の結果セットにはない行を戻します。 3つのケースでは、重複行が排除されます。 UNION演算子の場合、 ALLが指定されていれば、重複は除去されません。 (後述のUNION節、 INTERSECT節、 MINUS節を参照)。
5。
実際の出力行は、 選択された各行のSELECT出力式を使用して計算されます。 (下記のSELECTリストを参照してください)
6。
CONNECT BY句は、階層関係を持っているデータを選択するために使用されます。このようなデータには行間の親子関係があります。 ( CONNECT BY句を参照してください。)
7。
場合は ORDER BY指定され、返される行は指定された順にソートされています。 ORDER BYが指定されていない場合は、システムが最も高速に検索する順序で行が返されます。 (下記のORDER BY節を参照してください。)
8。
DISTINCTは結果から重複行を除去しますALL (デフォルト)は重複を含むすべての候補行を返します。 (下記のDISTINCT節を参照してください。)
9。
FOR UPDATE句は、同時更新に対して選択された行をロックするSELECT文を引き起こします。 (下記のFOR UPDATE句を参照してください。)
その値を読み取るには、表に対してSELECT特権が必要です。 FOR UPDATEの使用には、 UPDATE特権も必要です。
パラメーター
optimizer_hint
実行計画の選択のためのオプティマイザへのコメント埋め込みヒント。オプティマイザのヒントについては、 3.4 項を参照してください
2.3.71.1 FROM句
FROM 、SELECT文のための1つまたは複数のソース・テーブルを指定します。構文は次のとおりです。
FROM source [, ...]
どこ のソースは、次の要素のいずれかになります。
テーブル名 [@ dblink ]
既存の表またはビューの名前(スキーマ修飾名も可)。 dblinkは、リモートデータベースを識別するデータベースリンク名です。データベース・リンクの詳細は、 CREATE DATABASE LINKコマンドを参照してください。
エイリアス
エイリアスを含むFROM項目の代替名 。エイリアスは、簡潔さや自己結合のあいまいさをなくすために使用されます(同じテーブルが複数回スキャンされる)。エイリアスが指定されると、テーブルまたは関数の実際の名前が完全に隠されます。 F AS FOOから与えられ、例えば、SELECTの残りはfooではなくfと項目FROMこれを参照しなければなりません。
選択する
サブ SELECTFROM句に使用できます。これは、この単一のSELECTコマンドの実行中の一時テーブルとして出力が作成されたかのように動作します。サブSELECTはかっこで囲む必要があり、エイリアスを指定する必要があります。
join_type
次のいずれか:
[ INNNER ] JOIN
LEFT [ OUTER ] JOIN
RIGHT [ OUTER ] JOIN
FULL [ OUTER ] JOIN
CROSS JOIN
ための 内側及び外側のタイプに参加する、参加条件はjoin_condition オン天然のすなわち正確に一つを指定し、又は使用している必要があり(join_columnを[、...])。意味は下記を参照してください。 CROSS JOINの場合、これらの句は表示されません。
JOIN句は、項目から二つを兼ね備えています。必要に応じて括弧を使用して、ネスティングの順序を決定します。カッコがない場合、 JOINは左から右にネストします。いずれにしても、 JOINFROM項目を区切るカンマよりも緊密に結びついています。
CROSS JOININNER JOINは、 FROMのトップレベルにある2つの項目をリストしているのと同じ結果ですが、結合条件(存在する場合)によって制限される、単純なデカルト積を生成します。 CROSS JOININNER JOIN ON(TRUE)と同等です。つまり、修飾によって行が削除されません。これらの結合タイプは、 明示的FROMWHEREではできない何もしないので、表記の便宜のためのものに過ぎません。
LEFT OUTER JOINは、条件を満たすデカルト積のすべての行(つまり、結合条件を満たすすべての結合された行)と、結合条件を満たす右側の行がない左側の表の各行の1つのコピーを戻します。この左側の行は、右側の列にNULL値を挿入することによって、結合されたテーブルの全幅に拡張されます。一致する行があるかどうかを判断するときは、 JOIN句の条件だけが考慮されます。その後、外的条件が適用されます。
逆に、 RIGHT OUTER JOINは、 結合されたすべての行と、一致しない右側の行ごとに1つの行を返します(左側にNULLがあります)。左と右の入力を切り替えることでLEFT OUTER JOINに変換できるので、これは表記上の便利なものです。
FULL OUTER JOINは、結合されていないすべての行(NULLが右側に拡張されている)ごとに1行加え、一致しない右側の行ごとに1行(左側にNULLがあります)を返します。
ON join_condition
join_conditionは、結合のどの行が一致すると見なされるかを指定するBOOLEAN型の値( WHERE句に似ています)を返す式です。
USING( join_column [、...])
USING(a、b、...) という形式の句は、 ON left_table.a = right_table.a AND left_table.b = right_table.b ....の略語です。また、 USINGは、同等の各ペア列は結合出力に含まれ、両方には含まれません。
ナチュラル
NATURALは、同じ名前を持つ2つのテーブル内のすべてのカラムを記述するUSINGリストの省略形です。
複数のソースが指定されている場合、結果はすべてのソースのデカルト積(交差結合)になります。通常は、返された行をデカルト積の小さなサブセットに限定するための修飾条件が追加されます。
次の例では、 deptテーブルからすべてのエントリを選択します。
SELECT * FROM dept;
deptno | dname | loc
-------+-------------+-----------
10 | ACCOUNTING | NEW YORK
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
40 | OPERATIONS | BOSTON
(4 rows)
 
2.3.71.2 WHERE節
オプションの WHERE句の形式は次のとおりです。
WHERE condition
どこ 条件は boolean型の結果を評価する任意の式です。この条件を満たさない行は出力から除外されます。行は、実際の行の値を任意の変数参照に代入すると、 TRUEを戻すと条件を満たします。
次の例では、コンテンツ加入 EMP DEPTNO列の値がDEPTNOテーブルDEPTNO列の値に等しく、EMPおよびDEPTテーブルを:
SELECT d.deptno, d.dname, e.empno, e.ename, e.mgr, e.hiredate
FROM emp e, dept d
WHERE d.deptno = e.deptno;
 
deptno | dname | empno | ename | mgr | hiredate
--------+------------+-------+--------+------+--------------------
10 | ACCOUNTING | 7934 | MILLER | 7782 | 23-JAN-82 00:00:00
10 | ACCOUNTING | 7782 | CLARK | 7839 | 09-JUN-81 00:00:00
10 | ACCOUNTING | 7839 | KING | | 17-NOV-81 00:00:00
20 | RESEARCH | 7788 | SCOTT | 7566 | 19-APR-87 00:00:00
20 | RESEARCH | 7566 | JONES | 7839 | 02-APR-81 00:00:00
20 | RESEARCH | 7369 | SMITH | 7902 | 17-DEC-80 00:00:00
20 | RESEARCH | 7876 | ADAMS | 7788 | 23-MAY-87 00:00:00
20 | RESEARCH | 7902 | FORD | 7566 | 03-DEC-81 00:00:00
30 | SALES | 7521 | WARD | 7698 | 22-FEB-81 00:00:00
30 | SALES | 7844 | TURNER | 7698 | 08-SEP-81 00:00:00
30 | SALES | 7499 | ALLEN | 7698 | 20-FEB-81 00:00:00
30 | SALES | 7698 | BLAKE | 7839 | 01-MAY-81 00:00:00
30 | SALES | 7654 | MARTIN | 7698 | 28-SEP-81 00:00:00
30 | SALES | 7900 | JAMES | 7698 | 03-DEC-81 00:00:00
(14 rows)
2.3.71.3 GROUP BY句
オプションの GROUP BY句の形式は次のとおりです。
GROUP BY { expression | ROLLUP ( expr_list ) |
CUBE ( expr_list ) | GROUPING SETS ( expr_list ) } [, ...]
GROUP BYは、グループ化された式に対して同じ値を共有する選択された行をすべて単一の行に集約します。 expressionは、入力列名、出力列の名前または順序番号( SELECTリスト項目)、または入力列値から形成された任意の式です。あいまいさがある場合、 GROUP BY名は出力列名ではなく入力列名として解釈されます。
ROLLUPCUBE 、およびGROUPING SETは、多次元分析をサポートするためのGROUP BY句の拡張です。これらの拡張機能の使用方法については、第2.3.71.3項を参照してください。
集計関数が使用されている場合は、各グループを構成するすべての行にわたって計算され、グループごとに別々の値が生成されます( GROUP BYを使用し ない場合、集計は選択されたすべての行にわたって計算された単一の値を生成します)。 GROUP BYが存在する場合、グループ化されていない列に対して複数の可能な値が返されるため、 SELECTリスト式が集合関数内以外のグループ化されていない列を参照することは無効です。
次の例では、 empテーブルのsalカラムの合計を計算し 、結果を部門番号でグループ化しています。
SELECT deptno, SUM(sal) AS total
FROM emp
GROUP BY deptno;
 
deptno | total
--------+----------
10 | 8750.00
20 | 10875.00
30 | 9400.00
(3 rows)
2.3.71.4 HAVING句
オプションの HAVING句の形式は次のとおりです。
HAVING condition
whereWHERE句に指定された条件と同じです。
HAVINGは、指定された条件を満たさないグループ行を削除します。 HAVINGWHEREとは異なります。 GROUP BYによって作成されたフィルタグループ行を有しながら、WHERE、GROUP BYの適用前に、個々の行をフィルタリングします。条件内で参照される各列は、集計関数内に参照が表示されない限り、グループ化列を明白に参照する必要があります。
列を合計するには、すべての従業員をsalし 、部門番号で結果をグループ化し、10000未満のグループ合計を表示します。
SELECT deptno, SUM(sal) AS total
FROM emp
GROUP BY deptno
HAVING SUM(sal) < 10000;
 
deptno | total
--------+---------
10 | 8750.00
30 | 9400.00
(2 rows)
2.3.71.5 SELECTリスト
SELECTリストは、(キーワードの間SELECTFROM)SELECT文の出力行を形成する式を指定します。式は、 FROM句で計算された列を参照できます(通常は行います)。 AS 出力名句を使用すると、出力列に別の名前を指定できます。この名前は、主に表示する列にラベルを付けるために使用されます。また、 ORDER BY句とGROUP BY句の列の値を参照するのにも使用できますが、 WHERE句やHAVING句では使用できません。代わりに式を書き出す必要があります。
式の代わりに、 *は選択された行のすべての列の略語として出力リストに書き込むことができます。
次の例 SELECT リストでは、結果セットに empno 列、 ename 列、 mgr 列、および hiredate を含めるように指定してい ます。
SELECT empno, ename, mgr, hiredate FROM emp;
 
empno | ename | mgr | hiredate
-------+--------+------+--------------------
7934 | MILLER | 7782 | 23-JAN-82 00:00:00
7782 | CLARK | 7839 | 09-JUN-81 00:00:00
7839 | KING | | 17-NOV-81 00:00:00
7788 | SCOTT | 7566 | 19-APR-87 00:00:00
7566 | JONES | 7839 | 02-APR-81 00:00:00
7369 | SMITH | 7902 | 17-DEC-80 00:00:00
7876 | ADAMS | 7788 | 23-MAY-87 00:00:00
7902 | FORD | 7566 | 03-DEC-81 00:00:00
7521 | WARD | 7698 | 22-FEB-81 00:00:00
7844 | TURNER | 7698 | 08-SEP-81 00:00:00
7499 | ALLEN | 7698 | 20-FEB-81 00:00:00
7698 | BLAKE | 7839 | 01-MAY-81 00:00:00
7654 | MARTIN | 7698 | 28-SEP-81 00:00:00
7900 | JAMES | 7698 | 03-DEC-81 00:00:00
(14 rows)
2.3.71.6 UNION句
UNION句の形式は次のとおりです。
select_statement UNION [ ALL ] select_statement
select_statementは、 ORDER BY節またはFOR UPDATE節のないSELECT文です。 ( ORDER BYは、カッコで囲まれている場合はサブ式に付けることができますが、括弧なしの場合は、右側の入力式ではなくUNIONの結果に適用されます)。
UNION演算子は、2つのSELECT文が返す行の和集合を計算します。結果セットの少なくとも1つに出現する場合、行は2つの結果セットの組の集合に含まれます。 UNIONの直接オペランドを表す2つのSELECTステートメントは、同じ数の列を生成する必要があり、対応する列は互換性のあるデータ型でなければなりません。
ALLオプションが指定されていない限り、 UNION の結果に重複行は含まれません。 ALLは重複の除去を防ぎます。
同じSELECTステートメント内の複数の UNION演算子は、括弧で囲まれていない限り、左から右に評価されます。
現在は、 FOR UPDATEは UNIONの結果またはUNIONのいずれかの入力のためのいずれかを指定することはできません。
2.3.71.7 INTERSECT句
INTERSECT句の形式は次のとおりです。
select_statement INTERSECT select_statement
select_statementは、 ORDER BY節またはFOR UPDATE節のないSELECT文です。
INTERSECT演算子は、2つのSELECT文が返す行の積集合を計算します。両方の結果セットに表示される行は、2つの結果セットの共通部分にあります。
INTERSECT の結果に重複行は含まれません。
同じSELECTステートメント内の複数の INTERSECT演算子は、かっこが別の方法で指示しない限り、左から右に評価されます。 INTERSECTUNIONよりも緊密にバインドされます。つまり、 UNION B INTERSECT CA UNION(B INTERSECT C)として読み込まれます。
2.3.71.8 MINUS句
MINUS句は、この一般的な形式があります:
select_statement MINUS select_statement
select_statementは、 ORDER BY節またはFOR UPDATE節のないSELECT文です。
MINUS演算子は、左のSELECT文の結果ではなく、右のいずれかの結果である行の集合を計算します。
MINUS の結果に重複行は含まれません。
同じSELECTステートメント内の複数の MINUS演算子は、かっこで指示されていない限り、左から右に評価されます。 MINUSUNIONと同じレベルでバインドされます。
2.3.71.9 CONNECT BY句
階層的なクエリを実行する際にCONNECT BY句は、行の親子関係を決定します。それは一般的な形式を持っています:
CONNECT BY { PRIOR parent_expr = child_expr |
child_expr = PRIOR parent_expr }
parent_exprは、候補の親行で評価されます。 parent_expr = child_exprの結果がFROM句によって返された行に対してTRUEになる場合、この行は親の子と見なされます。
次のオプション節は、 CONNECT BYと組み合わせて指定できます
start with start_expression
start_expressionTRUEと評価されるFROMによって返された行は、階層のルートノードになります。
式で 並べる [ASC | DESC] [、...]
階層の兄弟行は、結果セット内の によって順序付けられます。
注意 :Advanced Serverは、 CONNECT BY句でのAND (または他の演算子)の使用をサポートしていません。
2.3.71.10 ORDER BY句
オプションの ORDER BY句の形式は次のとおりです。
ORDER BY expression [ ASC | DESC ] [, ...]
expressionは、出力列( SELECTリスト項目)の名前または順序番号でも、入力列値から形成された任意の式でもかまいません。
ORDER BYは、結果の行は、指定された式に従ってソートされます。最も左の式に従って2つの行が等しい場合は、次の式などで比較されます。それらが指定されたすべての式に従って等しい場合、それらは実装依存の順序で返されます。
序数は、結果列の序数(左から右へ)を参照します。この機能により、一意の名前を持たない列に基づいて順序を定義することができます。 ASを使用して結果列に名前を割り当てることは常に可能であるため、絶対に必要なことではありません
ORDER BY句で任意の式を使用することもできます。これにはSELECT結果リストに含まれない列も含まれます。したがって、次の文が有効です。
SELECT ename FROM emp ORDER BY empno;
この機能の制限はUNIONINTERSECT 、またはMINUS句の結果に適用される ORDER BY句が、式ではなく出力列名または数値のみを指定できることです。
場合は ORDER BY結果列名と入力列名の両方に一致する単純な名前で、ORDER BYは結果列名として解釈されます。これは、 GROUP BYが同じ状況で行う選択の反対です。この矛盾は、 SQL標準と互換性があるように作られています
オプションで、 ORDER BY句に任意の式の後にキーワード ASC (昇順)またはDESC (降順)を追加できます 。指定されていない場合、 ASCはデフォルトで使用されます。
null値は、他の値よりも高いソート値を持ちます。つまり、昇順のソート順では、最後にNULL値がソートされ、ソート順が降順になると、ヌル値は先頭でソートされます。
文字列データは、データベースクラスタの初期化時に設定されたロケール固有の照合順序に従ってソートされます。
次の2つの例は、2番目の列( dname )の内容に従って個々の結果をソートするのと同じ方法です
SELECT * FROM dept ORDER BY dname;
 
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
40 | OPERATIONS | BOSTON
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
(4 rows)
 
SELECT * FROM dept ORDER BY 2;
 
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
40 | OPERATIONS | BOSTON
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
(4 rows)
2.3.71.11 DISTINCT句
SELECTステートメントでDISTINCTが指定されている場合、重複した行はすべて結果セットから削除されます (重複する各グループから1つの行が保持されます)。 ALLキーワードは反対を指定します。すべての行が保持されます。これがデフォルトです。
2.3.71.12 FOR UPDATE句
FOR UPDATE は次の形式をとります。
FOR UPDATE [WAIT n |NOWAIT|SKIP LOCKED]
FOR UPDATEは、 SELECTステートメントによって取得された行を、更新のようにロックします。これにより、現在のトランザクションが終了するまで他のトランザクションによって行が変更または削除されることがなくなります。選択した行をUPDATEDELETE 、またはSELECT FOR UPDATEしようとするトランザクションは、現在のトランザクションが終了するまでブロックされます。別のトランザクションからのUPDATEDELETE 、またはSELECT FOR UPDATEがすでに選択された行をロックしている場合、 SELECT FOR UPDATEは最初のトランザクションが完了するのを待機し、更新された行をロックして返します。行が削除されました)。
FOR UPDATEは、戻された行を個々の表の行で明確に識別できない場合(たとえば、集計の場合)には使用できません。
ロック設定を指定するには、 FOR UPDATEオプションを使用します。
インクルード SELECT文が別のセッションによってロックされた行のために待機する秒(または端数秒)の数を指定するには、WAIT n個のキーワードを。 10進形式を使用して分数秒を指定します。たとえば、 WAIT 1.5はサーバーに1.5秒間待機するよう指示します。小数点以下4桁までを指定します。
現在のセッションで行をロックできない場合は、すぐにエラーを報告するために NOWAITキーワードを含めます
含める SKIPは、可能な場合は行をロックするために、サーバーに指示し、すでに別のセッションによってロックされている行をスキップするLOCKED。
 
2.3.72 SET CONSTRAINTS
SET CONSTRAINTS - 現在のトランザクションの制約チェックモードを設定する
シノプシス
SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }
説明
SET CONSTRAINTSは、現在のトランザクション内の制約チェックの動作を設定します。 IMMEDIATE制約は、各ステートメントの最後にチェックされます。 DEFERRED制約は、トランザクションがコミットされるまでチェックされません。各制約には、独自のIMMEDIATEまたはDEFERREDモードがあります。
:作成時に、制約は三つの特徴の一つ与えられている DEFERRABLEが最初にDEFERRED、DEFERRABLE INITIALLY IMMEDIATE、またはNOT DEFERRABLEを 。 3番目のクラスは常にIMMEDIATEであり、 SET CONSTRAINTSコマンドの影響を受けません。最初の2つのクラスは、指定されたモードですべてのトランザクションを開始しますが、その動作はSET CONSTRAINTSによってトランザクション内で変更できます。
制約名のリストを持つSET CONSTRAINTSは、それらの制約のモードを変更します(すべてが遅延可能でなければなりません)。指定された名前に一致する制約が複数ある場合は、すべてが影響を受けます。 SET CONSTRAINTS ALLは、すべての遅延可能制約のモードを変更します。
ときに SET制約は DEFERREDからIMMEDIATEに制約のモードを変更し、新しいモードが遡及的に有効になりますトランザクションの終了時にチェックされていた未処理のデータ変更ではなく、 制約はコマンドセットの実行時にチェックされます。そのような制約に違反すると、 SET CONSTRAINTSは失敗します(制約モードは変更されません)。したがって、 SET CONSTRAINTSを使用して、トランザクション内の特定のポイントで制約のチェックを強制的に実行できます。
現時点では、外部キー制約のみがこの設定の影響を受けます。チェックとユニーク制約は、常に効果的に遅延されません。
 
 
ノート
このコマンドは、現在のトランザクション内の制約の動作のみを変更します。したがって、このコマンドをトランザクションブロックの外で実行すると、効果がないように見えます。
 
2.3.73 SET ROLE
SET ROLE - 現在のセッションの現在のユーザーIDを設定する
シノプシス
SET ROLE { rolename | NONE }
説明
このコマンドは、現在の SQLセッション・コンテキストの現在のユーザー識別子を rolenameに設定します。 SET ROLEの後、 SQLコマンドの権限チェックは、指定されたロールが本来ログインしていたものであるかのように実行されます。
指定された ロール名は、現在のセッションのユーザーがメンバーである役割である必要があります。 (セッションユーザがスーパーユーザの場合、任意のロールを選択できます)。
NONEは、現在のユーザーIDを現在のセッションユーザーIDにリセットします。これらのフォームは、任意のユーザーが実行できます。
ノート
このコマンドを使用すると、特権を追加したり、特権を制限することができます。セッションユーザーロールに INHERITS属性が設定されている場合は、 SET ROLEに設定できるすべてのロールのすべての権限が自動的に付与されます。この場合、 SET ROLEは、セッション・ユーザーに直接割り当てられているすべての権限とそのメンバーである他の役割を効果的に削除し、名前付きロールに使用可能な権限のみを残します。一方、セッションユーザーロールにNOINHERITS属性が設定されている場合SET ROLEはセッションユーザーに直接割り当てられた権限を削除し、代わりに名前付きロールで使用できる権限を取得します。特に、スーパーユーザーがスーパーユーザー以外の役割にSET ROLEを選択すると、スーパーユーザーの権限が失われます。
ユーザー maryは、役割adminsのIDを取得します。
SET ROLE admins;
ユーザー maryは自分のアイデンティティに戻ります。
SET ROLE NONE;
 
2.3.74 SET TRANSACTION
SET TRANSACTION - 現在のトランザクションの特性を設定する
シノプシス
SET TRANSACTION transaction_mode
ここで、 transaction_modeは次のいずれかです。
ISOLATION LEVEL { SERIALIZABLE | READ COMMITTED }
READ WRITE | READ ONLY
説明
SET TRANSACTIONコマンドは、現在のトランザクションの特性を設定します。その後の取引には何の影響もありません。使用可能なトランザクション特性は、トランザクション分離レベルとトランザクション・アクセス・モード(読み取り/書き込みまたは読み取り専用)です。トランザクションの分離レベルは、他のトランザクションが同時に実行されているときにトランザクションがどのデータを参照できるかを決定します。
READ COMMITTED
文は開始前にコミットされた行のみを表示できます。これがデフォルトです。
シリアル化可能
現在のトランザクションのすべてのステートメントは、このトランザクションで最初のクエリまたはデータ変更ステートメントが実行される前にコミットされた行のみを表示できます。
トランザクションの最初の照会またはデータ変更ステートメント( SELECTINSERTDELETEUPDATE 、またはFETCH )が実行された後で、トランザクション分離レベルを変更することはできません 。トランザクションアクセスモードは、トランザクションが読み取り/書き込みか読み取り専用かを決定します。読み取り/書き込みはデフォルトです。
トランザクションが読取り専用の場合、次の SQLコマンドは使用できません。書込み対象の表が一時表でない場合は、 INSERTUPDATE 、およびDELETEです。すべてのCREATEALTER 、およびDROPコマンド。 コメント助成金払い戻し払い戻し 。実行するコマンドがリストされているものであればEXECUTEを指定します。これは、ディスクへのすべての書き込みを防ぐわけではない読み取り専用の高水準の概念です。
 
2.3.75 TRUNCATE
TRUNCATE - テーブルを空にする
シノプシス
TRUNCATE TABLE name [DROP STORAGE]
説明
TRUNCATEは、表からすべての行をすばやく削除します。それは非修飾DELETEと同じ効果を持ちますが、実際にはテーブルをスキャンしないのでより高速です。これは大きなテーブルで最も便利です。
DROPの STORAGE句は、互換性のために受理されていますが、無視されます。
パラメーター
切り捨てられる表の名前(スキーマ修飾名も可)。
ノート
他のテーブルからテーブルへの外部キー参照がある場合、 TRUNCATEは使用できません。このような場合に有効性を確認するには、テーブルスキャンが必要であり、そのポイント全体が1つのスキャンではありません。
TRUNCATEは、テーブルに存在する可能性のあるユーザ定義のON DELETEトリガを実行しません。
テーブル bigtableを切り捨てる
TRUNCATE TABLE bigtable;
関連項目
DROP VIEW DELETE
 
2.3.76 更新
UPDATE - テーブルの行を更新する
シノプシス
UPDATE [ optimizer_hint ] table [@ dblink ]
SET column = { expression | DEFAULT } [, ...]
[ WHERE condition ]
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
説明
UPDATEは、条件を満たすすべての行の指定された列の値を変更します。 SET句では、変更する列のみを記述する必要があります。明示的に変更されていない列は以前の値を保持します。
| { レコード にRETURNING variable [、...]}句は、 SPLプログラム内でのみ指定できます。さらに、 UPDATEコマンドの結果セットは複数の行を戻してはいけません。それ以外の場合は例外がスローされます。結果セットが空の場合、ターゲットレコードの内容はNULLに設定されます。
RETURNING BULKは UPDATEコマンドSPLプログラム内で使用されている場合、コレクション への [...]句のみ指定することができるCOLLECT。複数のコレクションBULK COLLECT INTO句のターゲットとして指定されている場合、各コレクションは単一のスカラーフィールドで構成されている必要があります。つまり、 コレクションはレコードであってはなりません。 UPDATEコマンドの結果セットには、1つ以上の行が含まれていてもかまいません。結果セットの各行に対して評価されるreturn_expressionは、最初の要素から始まるコレクションの要素になります。 コレクション内の既存の行はすべて削除されます。結果セットが空の場合、 コレクションは空になります。
あなたは持っている必要があり 、それを更新するには、テーブルに対するUPDATE権限だけでなく、値または条件に読まれているすべてのテーブルにSELECT権限を。
パラメーター
optimizer_hint
実行計画の選択のためのオプティマイザへのコメント埋め込みヒント。
更新する表の名前(スキーマ修飾名でも可)。
dblink
リモートデータベースを識別するデータベースリンク名。データベース・リンクの詳細は、 CREATE DATABASE LINKコマンドを参照してください
カラム
表内の列の名前。
表現
列に割り当てる式。式は、テーブル内のこの列と他の列の古い値を使用することがあります。
デフォルト
列をデフォルト値に設定します(特定のデフォルト式が割り当てられていない場合はnullになります)。
調子
BOOLEAN 型の値を返す式 。この式がtrueを返す行のみが更新されます。
return_expression
表の1つ以上の列を含む式。 return_expressiontableの列名を指定した場合、 return_expressionが評価されたときの列の値は次のように決定されます。
return_expression指定された列に UPDATEコマンドで値が割り当てられている場合、割り当てられた値がreturn_expressionの評価に使用されます。
return_expression指定された列に UPDATEコマンドで値が割り当てられていない場合、影響を受ける行の現在の値がreturn_expressionの評価に使用されます。
記録
評価された return_expressionが割り当てられるフィールドのレコード 。最初のreturn_expressionレコードの最初のフィールドに割り当てられ、2番目のreturn_expressionレコードの2番目のフィールドに割り当てられます。 レコードのフィールド数は式の数と完全に一致しなければならず、フィールドは割り当てられた表現。
変数
評価された return_expressionが割り当てられる変数 。複数のreturn_expression変数が指定されている場合、最初のreturn_expressionが最初の変数に割り当てられ、2番目のreturn_expressionが2番目の変数に割り当てられます。INTOキーワードの後に​​指定される変数の数は、 RETURNINGキーワードと変数は、割り当てられた式と型互換性がなければなりません。
コレクション
評価された return_expression から要素が作成されるコレクション 。単一フィールドのコレクションまたはレコードタイプのコレクションである単一のコレクション、または複数のコレクションが存在する場合があります。その場合、各コレクションは単一のフィールドで構成されなければなりません。戻り式の数は、指定されたすべてのコレクションのフィールド数と順番に一致する必要があります。それぞれの対応するreturn_expressionおよびcollectionフィールドは型互換性がなければなりません。
deptテーブルの部門20の 場所を AUSTINに 変更します。
UPDATE dept SET loc = 'AUSTIN' WHERE deptno = 20;
empテーブルにjob = SALESMANの すべての従業員について 、給与を10%更新し、手数料を500増加させます。
UPDATE emp SET sal = sal * 1.1, comm = comm + 500 WHERE job = 'SALESMAN';
2.4 関数と演算子
Advanced Serverに は、組み込みデータ型のための多数の関数と演算子が用意されています。
2.4.1 論理演算子
通常の論理演算子は AND OR NOTです。
SQL は、ヌル値が 「不明」を 表す3値ブール論理を使用し ます 。以下の真理値表を観察してください。
表2-11 AND / OR真理値表
a
b
表2-12 NOT真理値表
a
演算子 AND および OR は可換性です。つまり、結果に影響を与えずに左右のオペランドを切り替えることができます。
 
2.4.2 比較演算子
次の表に、通常の比較演算子を示します。
表2-13比較演算子
<
>
<=
>=
=
<>
!=
比較演算子は、これが意味を成すすべてのデータ型で使用できます。すべての比較演算子は BOOLEAN 型の値を返すバイナリ演算子 です。 1 <2 <3の ような式 は有効ではありません( ブール値と 3 を比較する < 演算子 がないため )。
比較演算子に加えて、特別な BETWEEN構成が利用可能です。
a BETWEEN x AND y
a >= x AND a <= y
同様に、
a NOT BETWEEN x AND y
a < x OR a > y
第1のものを第2のものに内部的に書き換えるのに必要なCPUサイクルを除いて、2つのそれぞれの形式に違いはない
値がnullかどうかをチェックするには、構造体を使用します
expression IS NULL
expression IS NOT NULL
NULL "等しい"で ない ため、 expression = NULLを 書き込まないでください NULL 。 (null値は未知の値を表し、2つの未知の値が等しいかどうかは分かりません)。この動作はSQL標準に準拠しています
いくつかのアプリケーションでは、 expression = NULLは、 expressionがnull値と評価される場合はtrueを返すと予想されることがあります。これらのアプリケーションをSQL標準に準拠するように変更することを強くお勧めします
 
2.4.3 数学関数と演算子
数学演算子は、多くの Advanced Serverタイプで提供されてい ます 。すべての可能な順列(例えば、日付/時刻型)のための一般的な数学的な慣習のない型については、実際の動作は後続の節で説明される。
次の表に、使用可能な数学演算子を示します。
表2-14数学演算子
+
5
-
-1
*
6
/
2
**
8
注: postgresql.conf ファイル db_dialect 構成パラメーターが レッドウッド に設定されている 場合 整数 データ の一対の分割は、 切り捨てられた値をもたらしません。以下の例に示すように、分数結果は保持されます。
edb=# SET db_dialect TO redwood;
SET
edb=# SHOW db_dialect;
db_dialect
------------
redwood
(1 row)
 
edb=# SELECT CAST('10' AS INTEGER) / CAST('3' AS INTEGER) FROM dual;
?column?
--------------------
3.3333333333333333
(1 row)
この動作は、ネイティブの INTEGER データ型 が存在しないOracleデータベースと互換性が あり、 INTEGER データ型の仕様は内部的に NUMBER(38)に 変換され 、結果は分数結果を保持します。
場合 、次の例で示すように db_dialect 構成パラメータは、 切り捨てられた値の 整数 データ型の結果 の対の分割次に、Postgres に設定されています
edb=# SET db_dialect TO postgres;
SET
edb=# SHOW db_dialect;
db_dialect
------------
postgres
(1 row)
 
edb=# SELECT CAST('10' AS INTEGER) / CAST('3' AS INTEGER) FROM dual;
?column?
----------
3
(1 row)
この動作はPostgreSQLデータベースと互換性があり、 INTEGER SMALLINT 、または BIGINTの いずれかの データ型を 含む分割が 結果の切り捨てになります。 前述の例のよう db_dialect postgresに 設定されている 場合、Advanced Serverは同じ切り捨て結果を返します
その場合でも、但し db_dialectは 結果のない切り捨て整数データ型の結果 の対と、 セコイア のみ分割に 設定されます INTEGER データ型の 有無にかかわらず、 SMALLINT または BIGINT データ型 のみを含む除算では INTEGER および SMALLINT が除算に関与 する次のような小数部を保持せずに、PostgreSQL形式で切り捨てられます
edb=# SHOW db_dialect;
db_dialect
------------
redwood
(1 row)
 
edb=# SELECT CAST('10' AS INTEGER) / CAST('3' AS SMALLINT) FROM dual;
?column?
----------
3
(1 row)
次の表に、使用可能な数学関数を示します。これらの関数の多くは、引数型が異なる複数の形式で提供されています。特に明記されていない限り、関数の任意の形式は引数と同じデータ型を返します。 DOUBLE PRECISION データで 機能する関数 は、主にホストシステムのCライブラリの上に実装されています。境界ケースの精度と挙動はホストシステムによって異なる場合があります。
表2-15数学関数
ABS( x )
xと Same as
-42
43
LOG( b NUMBER, x NUMBER)
MOD( y , x )
Remainder of y / x
1
NVL( x , y )
If 、xが is null, then NVL returns Yを
9
POWER( DOUBLE PRECISION, B DOUBLE PRECISION)
a raised to the power of bに raised to the power of
POWER( NUMBER, Bの NUMBER)
a raised to the power of bに raised to the power of
42
ROUND( v NUMBER, s INTEGER)
Round to 秒の decimal places
-1
42
TRUNC( v NUMBER, s INTEGER)
WIDTH_BUCKET( 演算 NUMBER, b1 NUMBER, b2 NUMBER, count INTEGER)
Return the bucket to which opが would be assigned in an equidepth histogram with カウント buckets, in the range B1 to B2
3
次の表に、利用可能な三角関数を示します。すべての三角関数は引数をとり、 DOUBLE PRECISION 型の値を返します
表2-16三角関数
ACOS( x )
ASIN( x )
ATAN( x )
ATAN2( x , y )
COS( x )
SIN( x )
TAN( x )
 
2.4.4 文字列関数と演算子
この節では、文字列値を調べて操作するための関数と演算子について説明します。この文脈の文字列には、タイプ CHAR VARCHAR2 、および CLOBの 値が含まれます 。特に指定のないかぎり、以下に挙げる関数はすべてこれらのすべての型で機能しますが、 CHAR を使用する場合、自動パディングの潜在的な影響に注意して ください。一般的に、ここで説明する関数は、文字列以外の型のデータでも、そのデータを文字列表現に変換することで動作します。
表2-17 SQL文字列関数と演算子
文字列 || 文字列
CONCAT( 文字列 , 文字列 )
ab
HEXTORAW( varchar2 )
RAW
VARCHAR2 value to a RAW value Converts a value
RAWTOHEX( raw )
RAW value to a HEXADECIMAL value Converts a value
INSTR( 文字列 , 集合 , [ 開始 [, 発生 ] ])
Finds the location of a set of characters in a string, starting at position 、開始 in the string, 文字列 , and looking for the first, second, third and so on occurrences of the set. Returns 0 if the set is not found.
30
INSTRB( string , set )
string within the set Returns the position of the . Returns set is not found. if is not found. 0 . Returns is not found.
13
INSTRB( string , set , start )
start , beginning at start string within the Returns the position of the set Returns the position of the . Returns set is not found. if is not found. 0 . Returns is not found.
30
INSTRB( string , set , start , occurrence )
Returns the position of the specified 発生 of set within the string , beginning at start . Returns set is not found. if is not found. 0 . Returns is not found.
30
LOWER( 文字列 )
文字列 to lower case Convert to lower case
tom
SUBSTR( 文字列 , 開始 [, カウント ])
カウント characters. If 開始 and going for 終了 Extract substring starting from and going for ます characters. If count is not specified, the string is clipped from the start till the end. characters. If is not specified, the string is clipped from the start till the end.
is
SUBSTRB( 文字列 , 開始 [, カウント ])
start and count are in number of bytes. except Same as SUBSTR Same as SUBSTR are in number of bytes.
SUBSTRB('abc',3) (assuming a double-byte character set)
c
SUBSTR2( 文字列 , 開始 [, カウント ])
SUBSTR Alias for .
is
SUBSTR2( 文字列 , 開始 [, カウント ])
SUBSTRB Alias for .
SUBSTR2('abc',3) (assuming a double-byte character set)
c
SUBSTR4( 文字列 , 開始 [, カウント ])
SUBSTR Alias for .
is
SUBSTR4( 文字列 , 開始 [, カウント ])
SUBSTRB Alias for .
SUBSTR4('abc',3) (assuming a double-byte character set)
c
SUBSTRC( 文字列 , 開始 [, カウント ])
SUBSTR Alias for .
is
SUBSTRC( 文字列 , 開始 [, カウント ])
SUBSTRB Alias for .
SUBSTRC('abc',3) (assuming a double-byte character set)
c
TRIM([ LEADING | TRAILING | BOTH ] [ 文字 ] FROM 文字列 )
Tom
LTRIM( 文字列 [, セット ])
Removes all the characters specified in from the left of a given 文字列の from the left of a given setで Removes all the characters specified in . If set is not specified, a blank space is used as default. . If is not specified, a blank space is used as default.
RTRIM( 文字列 [, セット ])
setで Removes all the characters specified in from the right of a given 文字列の from the right of a given Removes all the characters specified in . If set is not specified, a blank space is used as default. . If is not specified, a blank space is used as default.
UPPER( 文字列 )
文字列 to upper case Convert to upper case
TOM
追加の文字列操作関数が利用可能であり、次の表にリストされています。 表2-17 示す SQL 標準文字列関数 を実装するために内部的に使用されるものもあります
表2-18その他の文字列関数
ASCII( 文字列 )
120
A
DECODE( expr , expr1a , expr1b [, expr2a , expr2b ]... [, デフォルト ])
expr1b , expr2b ,..., defaultの Same as argument types of です。
Finds first match of のexpr with expr1a , expr2a , etc. When match found, returns corresponding parameter pair, expr1b , expr2b , etc. If no match found, returns デフォルト . If no match found and not specified, returns null. . If no match found and デフォルト not specified, returns null.
INITCAP( 文字列 )
LENGTH('Côte d''Azur')
11
This function is identical in functionality to LENGTH This function is identical in functionality to ; the function name is supported for compatibility.
LENGTHC('Côte d''Azur')
11
This function is identical in functionality to LENGTH This function is identical in functionality to ; the function name is supported for compatibility.
LENGTH2('Côte d''Azur')
11
This function is identical in functionality to LENGTH This function is identical in functionality to ; the function name is supported for compatibility.
LENGTH4('Côte d''Azur')
11
LENGTHB('Côte d''Azur')
12
LPAD( 文字列 , 長さ INTEGER [, fill ])
Fill up 文字列 to size, 長さ by prepending the characters, 塗りつぶし (a space by default). If 、文字列が is already longer than 長さ then it is truncated (on the right).
REPLACE( string , search_string [, replace_string ]
Replaces one value in a string with another. If you do not specify a value for replace_stringの Replaces one value in a string with another. If you do not specify a value for value when found, is removed. , the search_stringの value when found, is removed.
RPAD( 文字列 , 長さ INTEGER [, fill ])
文字列 to size, by appending the characters, Fill up 文字列 to size, length by appending the characters, 塗りつぶし by appending the characters, fill (a space by default). If 文字列 is already longer than 長さ is already longer than (a space by default). If 文字列 is already longer than then it is truncated.
TRANSLATE( 文字列 , from , to )
from set is replaced by the corresponding character in the 文字 that matches a character in the Any character in 文字 set is replaced by the corresponding character in the to set. set is replaced by the corresponding character in the set.
2.4.4.1 NULLを使用した連結による文字列テキストの切り捨て
注意:この項では、Oracleデータベースと互換性のない機能について説明しますこれにより、OracleからAdvanced Serverにデータを変換するときに矛盾が生じる可能性があります。
Advanced Serverの場合、列の値が NULLの場合、列とテキスト文字列を連結すると、次のいずれかになります。
結果は、 NULL列のデータ型と連結が行われる方法に依存し ます
もし文字列連結演算子 ' || 'の場合、 表2-19示す暗黙の強制変換を持つ型は、入力パラメータの1つがNULLの場合は文字列を切り捨てませんが、他の型の場合は明示的な型キャストが使用されていない限り文字列を切り捨てますis、 :: text )です。また、NULLの存在下での一貫した動作を確認するために、 CONCAT関数を使用することもできます。
次のクエリは、暗黙的にテキストに変換されるデータ型をリストします。
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc,
CASE castcontext
WHEN 'e' THEN 'explicit'
WHEN 'a' THEN 'implicit in assignment'
WHEN 'i' THEN 'implicit in expressions'
END as castcontext,
CASE castmethod
WHEN 'f' THEN 'function'
WHEN 'i' THEN 'input/output function'
WHEN 'b' THEN 'binary-coercible'
END as castmethod
FROM pg_cast
WHERE casttarget::regtype::text = 'text'
AND castcontext='i';
クエリの結果は次の表のとおりです。
表2-19暗黙の強制によるテキストのデータ型
-
-
-
-
-
-
oid
-
-
-
-
-
-
-
-
-
-
-
-
-
カラム出力の詳細については 、PostgreSQLのコアドキュメントであるpg_castシステムカタログを参照してください
https://www.postgresql.org/docs/11/static/catalog-pg-cast.html
たとえば、データ型 UUIDはこのリストにないため、暗黙的にテキストに変換されません。その結果、 NULL UUID列を使用した特定の連結の試行では、テキストの結果が切り捨てられます。
この例では、すべての NULL列値を持つ単一の行を使用して、次の表が作成されます。
CREATE TABLE null_concat_types (
boolean_type BOOLEAN,
uuid_type UUID,
char_type CHARACTER
);
 
INSERT INTO null_concat_types VALUES (NULL, NULL, NULL);
boolean_typechar_typeは、列uuid_typeがテキストに変換する間に暗黙の強制変換を行います。
したがって、連結演算子 ' || との文字列連結 'に対するboolean_typeまたはchar_typeの結果は、次のようになります。
SELECT 'x=' || boolean_type || 'y' FROM null_concat_types;
 
?column?
----------
x=y
(1 row)
 
SELECT 'x=' || char_type || 'y' FROM null_concat_types;
 
?column?
----------
x=y
(1 row)
しかし、列 uuid_type連結するとx =文字列が失われます。
SELECT 'x=' || uuid_type || 'y' FROM null_concat_types;
 
?column?
----------
y
(1 row)
ただし、 :: text を使った明示的なキャストを使用すると、 x =文字列の損失を防ぐことができます。
SELECT 'x=' || uuid_type::text || 'y' FROM null_concat_types;
 
?column?
----------
x=y
(1 row)
CONCAT関数を使用するとx =文字列も保持されます。
SELECT CONCAT('x=',uuid_type) || 'y' FROM null_concat_types;
 
?column?
----------
x=y
(1 row)
したがって、 NULL列のデータ型に応じて 、明示的キャストまたはCONCAT関数を使用して、一部のテキスト文字列の損失を避ける必要があります。
 
2.4.5 パターンマッチング文字列関数
Advanced Serverは、 REGEXP _ COUNTREGEXP_INSTRおよびREGEXP_SUBSTR関数をサポートしてい ます 。これらの関数は、文字列内で正規表現で指定されたパターンを検索し、その文字列内のパターンの出現に関する情報を返します。パターンはPOSIXスタイルの正規表現でなければなりません。 POSIXスタイルの正規表現の作成の詳細については、次のコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/functions-matching.html
2.4.5.1 REGEXP_COUNT
REGEXP _ COUNTは文字列で正規表現を検索し、正規表現が出現する回数を返します。署名は次のとおりです。
INTEGER REGEXP_COUNT

srcstr TEXT、
パターン TEXT、
ポジション DEFAULT 1
修飾子 DEFAULT NULL
パラメーター
srcstr
srcstrは、検索する文字列を指定します。
パターン
パターンは、 REGEXP _ COUNTが検索するための正規表現を指定します。
ポジション
位置は、 REGEXPは _ COUNTは、検索を開始するときのソース文字列内の位置を示す整数値です。デフォルト値は1です。
修飾語
修飾子は、パターンマッチングの動作を制御する値を指定します。デフォルト値はNULLです。 Advanced Serverでサポートされる修飾子の完全なリストについては、次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/functions-matching.html
以下の簡単な例では、 REGEXP_COUNTは、文字列'reinitializing'に文字iが使用された回数のカウントを返します。
edb=# SELECT REGEXP_COUNT('reinitializing', 'i', 1) FROM DUAL;
regexp_count
--------------
5
(1 row)
最初の例では、コマンドは REGEXP _ COUNTが最初の位置でカウントを開始するように指示し ます 。 6番目の位置でカウントを開始するコマンドを変更した場合:
edb=# SELECT REGEXP_COUNT('reinitializing', 'i', 6) FROM DUAL;
regexp_count
--------------
3
(1 row)
REGEXP _ COUNT3を返します。このカウントは、6番目の位置の前に出現する文字iの出現を除外します。
2.4.5.2 REGEXP_INSTR
REGEXP _ INSTRは、POSIXスタイルの正規表現を文字列で検索します。この関数は、マッチした文字列内の位置を返します。署名は次のとおりです。
INTEGER REGEXP_INSTR

srcstr TEXT、
パターン TEXT、
位置 INT DEFAULT 1、
発生 INT DEFAULT 1、
returnparam INT DEFAULT 0、
修飾子 TEXT DEFAULT NULL、
サブ式 INT DEFAULT 0、
パラメーター:
srcstr
srcstrは、検索する文字列を指定します。
パターン
patternは、 REGEXP _ INSTRが検索する正規表現を指定します。
ポジション
positionは、ソース文字列の開始位置を示す整数値を指定します。デフォルト値は1です。
発生
occurrenceは、検索された文字列に複数のパターンが出現した場合にどの一致が返されるかを指定します。デフォルト値は1です。
returnparam
returnparamは、 REGEXP _ INSTRが返す文字列内の位置を指定する整数値です。デフォルト値は0です。指定:
0は、 パターンに一致する最初の文字の文字列内の位置を返します。
パターンの終わりに続く最初の文字の位置を返すには、 0 より大きい値
修飾語
修飾子は、パターンマッチングの動作を制御する値を指定します。デフォルト値はNULLです。 Advanced Serverでサポートされる修飾子の完全なリストについては、次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/functions-matching.html
部分式
subexpressionは、 REGEXP _ INSTRによって返されるパターン部分を識別する整数値です。 部分式のデフォルト値は0です。
部分式の 値を指定する場合は、検索対象の値の一部を分離するパターンに1つ(またはそれ以上)のかっこを含める必要があります。 subexpressionで指定された値は、返される括弧のセットを示します。たとえば、 部分式2の場合、 REGEXP _ INSTRは2番目の括弧の位置を返します。
次の簡単な例では、 REGEXP_INSTRは、3桁の連続する数字を含むパターンが最初に出現する電話番号を含む文字列を検索します。
edb=# SELECT REGEXP_INSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
regexp_instr
--------------
1
(1 row)
このコマンドは、 REGEXP_INSTRに最初に発生した位置を返すように指示します。 3つの連続した数字の2番目の出現の開始を返すようにコマンドを変更した場合:
edb=# SELECT REGEXP_INSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 2) FROM DUAL;
regexp_instr
--------------
5
(1 row)
REGEXP _ INSTR5を返します。 3桁の連続する数字の2番目の出現は5 番目の位置から始まります。
2.4.5.3 REGEXP_SUBSTR
REGEXP _ SUBSTR関数は、POSIX準拠の正規表現で指定されたパターンの文字列を検索します。 REGEXP_SUBSTRは、関数の呼び出しで指定されたパターンに一致する文字列を返します。関数のシグネチャは次のとおりです。
TEXT REGEXP_SUBSTR

srcstr TEXT、
パターン TEXT、
位置 INT DEFAULT 1、
発生 INT DEFAULT 1、
修飾子 TEXT DEFAULT NULL、
サブ式 INT DEFAULT 0
パラメーター:
srcstr
srcstrは、検索する文字列を指定します。
パターン
patternは、 REGEXP _ SUBSTRが検索する正規表現を指定します。
ポジション
positionは、ソース文字列の開始位置を示す整数値を指定します。デフォルト値は1です。
発生
occurrenceは、検索された文字列に複数のパターンが出現した場合にどの一致が返されるかを指定します。デフォルト値は1です。
修飾語
修飾子は、パターンマッチングの動作を制御する値を指定します。デフォルト値はNULLです。 Advanced Serverでサポートされる修飾子の完全なリストについては、次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/functions-matching.html
部分式
subexpressionは、 REGEXP _ SUBSTRによって返されるパターンの部分を識別する整数値です部分式のデフォルト値は0です。
部分式の 値を指定する場合は、検索対象の値の一部を分離するパターンに1つ(またはそれ以上)のかっこを含める必要があります。 subexpressionで指定された値は、返される括弧のセットを示します。たとえば、 サブ式2の場合、 REGEXP _ SUBSTRは、2番目の括弧のセットに含まれる値を返します。
次の簡単な例では、 REGEXP_SUBSTRは、3桁の連続した数字の最初のセットの電話番号を含む文字列を検索します。
edb=# SELECT REGEXP_SUBSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
regexp_substr
---------------
800
(1 row)
最初の3桁の数字を検索し、文字列( 800を返します 。 3つの連続した数字の2番目の出現をチェックするコマンドを変更した場合:
edb=# SELECT REGEXP_SUBSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 2) FROM DUAL;
regexp_substr
---------------
555
(1 row)
REGEXP _ SUBSTRは、2番目の部分文字列の内容である555を返します。
 
2.4.6 LIKE演算子を使用したパターンマッチング
Advanced Server は従来の SQL を使用したパターンマッチングを提供し ます LIKE 演算子。 LIKE 演算子 の構文 は次のとおりです。
string LIKE pattern [ ESCAPE escape-character ]
string NOT LIKE pattern [ ESCAPE escape-character ]
すべての パターン は一連の文字列を定義します。 文字列が パターン によって表される文字列のセットに含まれている 場合 LIKE 式は 真を 返します 。予想通り、 NOT LIKE 式は LIKE trueを 返す 場合 falseを 返し 、逆の 場合 falseを 返し ます 。同等の式は NOT( 文字列 LIKE パターン です。
patternにパーセント記号またはアンダースコアが含まれていない場合、 パターンは文字列自体のみを表します。その場合LIKEはequals演算子のように動作します。 patternのアンダースコア( _ )は、任意の1文字を表します(一致します)。パーセント記号( )は0文字以上の任意の文字列に一致します。
いくつかの例:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE 'c' false
LIKEパターンマッチは、常に文字列全体をカバーします。文字列内の任意の場所にパターンをマッチさせるには、パターンをパーセント記号で開始して終了する必要があります。
リテラルのアンダースコアまたはパーセント記号を他の文字とマッチさせることなくマッチさせるには パターン 内のそれぞれの文字の前にエスケープ文字を付ける必要があります。デフォルトのエスケープ文字はバックスラッシュですが、 ESCAPE句を使用して別のエスケープ文字を選択できます。エスケープ文字自体を一致させるには、2つのエスケープ文字を書きます。
バックスラッシュはすでに文字列リテラルで特別な意味を持っているので、バックスラッシュを含むパターン定数を書くには、 SQL文に2つのバックスラッシュを記述する必要があり ます 。したがって、実際にリテラルのバックスラッシュと一致するパターンを書くことは、ステートメントに4つのバックスラッシュを書くことを意味します。これを回避するには、 ESCAPEで別のエスケープ文字を選択します。バックスラッシュはもうLIKEにとって特別なものではありません。 (しかし、文字列リテラルパーサーにとってはまだ特殊なので、まだ2つ必要です。)
ESCAPE ''を 書くことで、エスケープ文字を選択することもできます これにより、効果的にエスケープメカニズムが無効になり、パターン内のアンダースコアとパーセント記号の特別な意味を無効にすることができなくなります。
 
2.4.7 データ型の書式設定関数
次の表に示す 高度なサーバー フォーマット機能は、強力な様々なデータタイプを変換するためのツールのセット(日付/時刻、整数、数値ポイントを、フローティング)フォーマット文字列に、特定のデータ型にフォーマット文字列から変換するために提供します。 これらの関数はすべて共通の呼び出し規約に従います。最初の引数は書式設定される値で、2番目の引数は出力または入力形式を定義する文字列テンプレートです。
表2-20書式設定関数
TO_CHAR(DATE [, format ])
Convert a date/time to a string with output, 形式の Convert a date/time to a string with output, ます . If omitted default format is DD-MON-YY.
Convert a timestamp to a string with output, 形式の Convert a timestamp to a string with output, ます . If omitted default format is DD-MON-YY.
TO_CHAR(INTEGER [, format ])
TO_CHAR(NUMBER [, format ])
TO_DATE( 文字列 [, 書式 ])
TO_NUMBER( 文字列 [, フォーマット ])
TO_TIMESTAMP( 文字列 , フォーマット )
出力テンプレート文字列( TO_CHARの場合 )には、フォーマットされる値から認識され、適切にフォーマットされたデータに置き換えられる特定のパターンがあります。テンプレートパターンではないテキストはそのままそのままコピーされます。同様に、入力テンプレート文字列( TO_CHAR 以外の文字列 )では、テンプレートパターンは、参照される入力データ文字列の部分とそこで見つかる値を識別します。
次の表は、 TO_CHARおよびTO_DATE関数を使用して日付値を書式設定するために使用可能なテンプレートパターンを示しています。
表2-21テンプレートの日付/時刻書式パターン
HH
MI
SS
FF n
Fractional seconds where n is an optional integer from 1 to 9 for the number of digits to return. If omitted, the default is 6.
YYY
YY
Y
IYY
IY
I
MON
Mon
mon
MM
DAY
Day
day
DY
Dy
dy
DDD
DD
D
W
WW
IW
CC
SCC
J
Q
RM
rm
RR
特定の修飾子は、その動作を変更するために任意のテンプレートパターンに適用できます。たとえば、 FMMonth FM 修飾子を含む Month パターン です。次の表は、日付/時刻の書式設定用の修飾子パターンを示しています。
表2-22日付/時刻書式のテンプレートパターン修飾子
FM prefix
TH suffix
th suffix
FX prefix
SP suffix
日付/時刻書式の使用上の注意:
FMでは 、先行するゼロと後続ブランクが抑制されます。これは、パターンの幅を固定幅にするために追加されます。
TO_TIMESTAMP TO_DATE FX オプションが使用されていない 場合、入力文字列内の複数の空白をスキップし ます。 FX は、テンプレートの最初の項目として指定する必要があります。例えば TO_TIMESTAMP( '2000 JUN'、 'YYYYのMON')は 正しいが、TO_TIMESTAMP 一つだけの空間を想定しているため TO_TIMESTAMP( '2000 JUN'、 'FXYYYY MON')は 、エラーを返します
通常のテキストは TO_CHARテンプレート 使用 でき、そのまま出力されます。
文字列から タイムスタンプまたは日付 への変換では、 YYYYYYYまたはY、YYYフィールドがある場合、 CCフィールドは無視されます。 CCYYまたはYとともに使用する場合、年は(CC-1)* 100 + YYとして計算されます。
次の表は、数値の書式設定に使用できるテンプレートパターンを示しています。
表2-23数値書式のテンプレートパターン
9
0
. (period)
, (comma)
$
PR
S
L
D
G
MI
RN or rn
V
数値書式の使用上の注意:
9 9Sが 存在するように桁数が同じ値をもたらします 。数字が利用できない場合は、空白が出力されます。
TH ゼロより小さい値を変換せず、小数を変換しません。
Vは、 効果的に 、nは V 以下の桁数が 10 N によって入力値を乗算します TO_CHAR 小数点を組み合わせた V の使用をサポートしていません 。 (たとえば、 99.9V99は使用できません)。
次の表は、 TO_CHARおよびTO_DATE関数の使用例を示しています。
表2-24 TO_CHARの例
'V'
2.4.7.1 IMMUTABLE TO_CHAR(TIMESTAMP、format)ファンクション
関数のIMMUTABLE形式を使用する可能性のあるTO_CHAR関数の特定のケースがあります。基本的には、関数がデータベースを変更せず、関数がその入力パラメーターだけに依存して同じ一貫した値を返す場合、関数はIMMUTABLEです。つまり、構成パラメータ、ロケール、データベースの内容などの設定は、関数が返す結果に影響を与えません。
関数のボラティリティカテゴリ VOLATILE STABLE 、および IMMUTABLEの 詳細については、PostgreSQL Coreのドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/xfunc-volatility.html
IMMUTABLE関数の特別な利点はCREATE INDEXコマンドでその関数に基づいた索引を作成できることです。
TO_CHAR関数がIMMUTABLE形式を使用するためには 、次の条件を満たす必要があります。
TO_CHARファンクションの最初のパラメータは、データ型TIMESTAMPでなければなりません。
TO_CHAR関数の2番目のパラメーターで指定された形式は、言語、ロケールなどのファクターに基づいて関数の戻り値に影響してはなりません。たとえば、 'YYYY-MM-DD HH24:MI:SS'の形式は、関数のIMMUTABLE形式に使用されます。これは、ロケール設定に関係なく、関数の結果は日付形式のみで表現されるためです。ただし、 の3文字の省略形はロケール設定によって異なる結果を返す可能性があるため、 「DD-MON-YYYY」の形式はIMMUTABLE形式の関数には使用できません。
不変でない関数になるフォーマットパターンには、スペルアウトまたは短縮月( MONTHMON )、日( DAYDY )、メジアンインジケータ( AMPM )、または時代インジケータ( BCAD )のバリエーションが含まれます
次の例では、 TIMESTAMP列を持つ表が作成されます。
CREATE TABLE ts_tbl (ts_col TIMESTAMP);
TO_CHAR関数のIMMUTABLE形式の索引が正常に作成されたことを以下に示します。
edb=# CREATE INDEX ts_idx ON ts_tbl (TO_CHAR(ts_col,'YYYY-MM-DD HH24:MI:SS'));
CREATE INDEX
edb=# \dS ts_idx
Index "public.ts_idx"
Column | Type | Definition
---------+-------------------+-------------------------------------------------------------
to_char | character varying | to_char(ts_col, 'YYYY-MM-DD HH24:MI:SS'::character varying)
btree, for table "public.ts_tbl"
TO_CHAR関数で指定された書式では 、3文字の月の略語MONによってロケール設定に基づいて異なる戻り値が返される可能性があるため、 IMMUTABLE書式を使用できないため、エラーが発生します。
edb=# CREATE INDEX ts_idx_2 ON ts_tbl (TO_CHAR(ts_col, 'DD-MON-YYYY'));
ERROR: functions in index expression must be marked IMMUTABLE
 
2.4.8 日付/時刻関数と演算子
表2-26 日付/時刻値処理に使用可能な関数を示します。詳細は次のサブセクションに記載されています。次の表は、基本的な算術演算子(+、 - )の動作を示しています。フォーマット機能については、セクション 2.4.7 。セクションの日付/時刻データ型の背景情報に精通している必要があります 2.2.4
表2-25日付/時刻演算子
+
+
-
-
-
次の表の日付/時刻関数では、 DATE および TIMESTAMP データ型の使用は互換性が あり ます
表2-26日付/時刻関数
EXTRACT( フィールド FROM TIMESTAMP)
20
LOCALTIMESTAMP [ ( precision ) ]
3
NEXT_DAY(DATE, dayofweek )
following specified date; see Section Date falling on 日曜日に Date falling on following specified date; see Section 2.4.8.4
ROUND(DATE [, format ])
形式 Date rounded according to ; see Section 2.4.8.6 ; see Section 2.4.8.6
TRUNC(DATE [ 書式 ])
 
2.4.8.1 ADD_MONTHS
ADD_MONTHS関数指定された日付にヶ月の指定された数を加算(または2番目のパラメータが負の場合は減算します)。結果の日付は、その日がその月の最後の日である場合を除いて、指定された日付の月の日と同じです。その場合、結果の日付は常にその月の最終日になります。
月数パラメータの小数部分は、計算を実行する前に切り捨てられます。
指定された日付に時間部分が含まれている場合、結果は変更されずに転送されます。
以下は、 ADD_MONTHS関数の例です
SELECT ADD_MONTHS('13-JUN-07',4) FROM DUAL;
 
add_months
--------------------
13-OCT-07 00:00:00
(1 row)
 
SELECT ADD_MONTHS('31-DEC-06',2) FROM DUAL;
 
add_months
--------------------
28-FEB-07 00:00:00
(1 row)
 
SELECT ADD_MONTHS('31-MAY-04',-3) FROM DUAL;
 
add_months
--------------------
29-FEB-04 00:00:00
(1 row)
 
2.4.8.2 抽出
EXTRACT 関数は、日付/時刻の値から年や時などの部分フィールドを抽出します。 EXTRACT 関数は、タイプ DOUBLE PRECISION の値を返します 。有効なフィールド名は次のとおりです。
年フィールド
SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40') FROM DUAL;
 
date_part
-----------
2001
(1 row)
1年以内の月の数(1 - 12)
SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40') FROM DUAL;
 
date_part
-----------
2
(1 row)
日(月)フィールド(1〜31)
SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40') FROM DUAL;
 
date_part
-----------
16
(1 row)
時間
時間フィールド(0〜23)
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40') FROM DUAL;
 
date_part
-----------
20
(1 row)
分フィールド(0〜59)
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40') FROM DUAL;
 
date_part
-----------
38
(1 row)
SECOND
小数部分(0〜59)を含む秒フィールドは、
SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40') FROM DUAL;
 
date_part
-----------
40
(1 row)
 
2.4.8.3 MONTHS_BETWEEN
MONTHS_BETWEEN関数は、2つの日付の間の月数を返します。結果は、最初の日付が2番目の日付よりも大きい場合は正の数値で、最初の日付が2番目の日付よりも小さい場合は負の数値になります。
両方の日付パラメータの月の日が同じ場合、または両方の日付パラメータがそれぞれの月の最終日に該当する場合、結果は常にすべての月になります。
MONTHS_BETWEEN関数の例を次に 示します。
SELECT MONTHS_BETWEEN('15-DEC-06','15-OCT-06') FROM DUAL;
 
months_between
----------------
2
(1 row)
 
SELECT MONTHS_BETWEEN('15-OCT-06','15-DEC-06') FROM DUAL;
 
months_between
----------------
-2
(1 row)
 
SELECT MONTHS_BETWEEN('31-JUL-00','01-JUL-00') FROM DUAL;
 
months_between
----------------
0.967741935
(1 row)
 
SELECT MONTHS_BETWEEN('01-JAN-07','01-JAN-06') FROM DUAL;
 
months_between
----------------
12
(1 row)
 
2.4.8.4 NEXT_DAY
NEXT_DAY 関数は、指定された日付よりも厳密に大きい所定の曜日の最初の発生を返します。 少なくとも平日の最初の3文字を指定する必要があります(例: SAT) 。指定された日付に時間部分が含まれている場合、結果は変更されずに転送されます。
以下は、 NEXT_DAY関数の例です
SELECT NEXT_DAY(TO_DATE('13-AUG-07','DD-MON-YY'),'SUNDAY') FROM DUAL;
 
next_day
--------------------
19-AUG-07 00:00:00
(1 row)
 
SELECT NEXT_DAY(TO_DATE('13-AUG-07','DD-MON-YY'),'MON') FROM DUAL;
 
next_day
--------------------
20-AUG-07 00:00:00
(1 row)
 
2.4.8.5 NEW_TIME
NEW_TIMEの関数は、1つのタイムゾーンから別の日付と時刻を変換します。 NEW_TIMEは、 DATE型の値を返します。構文は次のとおりです。
NEW_TIME( DATE time_zone1 time_zone2
time_zone1time_zone2は、次の表のタイムゾーン列の文字列値である必要があります。
表2-27タイムゾーン
AST
ADT
BST
BDT
CST
CDT
EST
EDT
GMT
UTC
HST
HDT
MST
MDT
NST
PST
PDT
YST
YDT
以下は、 NEW_TIME関数の例です
SELECT NEW_TIME(TO_DATE('08-13-07 10:35:15','MM-DD-YY HH24:MI:SS'),'AST', 'PST') "Pacific Standard Time" FROM DUAL;
 
Pacific Standard Time
---------------------
13-AUG-07 06:35:15
(1 row)
 
 
2.4.8.6 ROUND
ROUND 関数は、指定されたテンプレートパターンに従って丸められた日付を返します。 テンプレートパターンを省略すると、日付は最も近い日に丸められます。次の表は、 ROUND 関数の テンプレートパターンを示してい ます。
表2-28 ROUND関数のテンプレート日付パターン
Returns January 1, cc 01 where cc is first 2 digits of the given year if last 2 digits <= 50, or 1 greater than the first 2 digits of the given year if last 2 digits > 50; (for AD years)
Returns January 1, YYYY YYYYは、 where is rounded to the nearest year; rounds down on June 30, rounds up on July 1
Q
WW
IW
W
MI
以下は、 ROUND関数の使用例です
以下の例は、最も近い百年に丸めます。
SELECT TO_CHAR(ROUND(TO_DATE('1950','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;
 
Century
-------------
01-JAN-1901
(1 row)
 
SELECT TO_CHAR(ROUND(TO_DATE('1951','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;
 
Century
-------------
01-JAN-2001
(1 row)
以下の例は、最も近い年に丸めます。
SELECT TO_CHAR(ROUND(TO_DATE('30-JUN-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;
 
Year
-------------
01-JAN-1999
(1 row)
 
SELECT TO_CHAR(ROUND(TO_DATE('01-JUL-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;
 
Year
-------------
01-JAN-2000
(1 row)
次の例は、最も近いISO年に丸めます。最初の例は、2004に丸めおよび2004のためのISO年12月29日に始まり、 2003年の二の例は、2005年に丸めおよび2005のISO年はその同じ年の1月3日、RD上で開始されます。
(ISO年は、月曜日から日曜日までの7日間の範囲内にある最初の月曜日から始まり、新年の少なくとも4日間を含むため、ISO年の開始は前年の12月に開始することができます。)
SELECT TO_CHAR(ROUND(TO_DATE('30-JUN-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;
 
ISO Year
-------------
29-DEC-2003
(1 row)
 
SELECT TO_CHAR(ROUND(TO_DATE('01-JUL-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;
 
ISO Year
-------------
03-JAN-2005
(1 row)
次の例は、最も近い四半期に丸めます。
SELECT ROUND(TO_DATE('15-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;
 
Quarter
--------------------
01-JAN-07 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('16-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;
 
Quarter
--------------------
01-APR-07 00:00:00
(1 row)
次の例は、最も近い月に丸めます。
SELECT ROUND(TO_DATE('15-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;
 
Month
--------------------
01-DEC-07 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('16-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;
 
Month
--------------------
01-JAN-08 00:00:00
(1 row)
次の例は、最も近い週に丸めます。最初の例のように月曜日の2007人の土地の最初の日、1月18日 回目は 1月15日番目のランド月曜日に最も近いです。 2番目の例では、1月19日回目は 1月22日回目にあたる月曜日に近いです。
SELECT ROUND(TO_DATE('18-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;
 
Week
--------------------
15-JAN-07 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('19-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;
 
Week
--------------------
22-JAN-07 00:00:00
(1 row)
次の例は、最も近いISO週に丸めます。 ISO週は月曜日に始まります。最初の例では、2004年1月1日が2003年12月29日の月曜日に最も近いです。2番目の例では、2004年1月2日は2004年1月5日に月曜日に近いです。
SELECT ROUND(TO_DATE('01-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;
 
ISO Week
--------------------
29-DEC-03 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('02-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;
 
ISO Week
--------------------
05-JAN-04 00:00:00
(1 row)
次の例は、最も近い週にラウンドされ、その週は、その月の最初の日と同じ日に開始されると見なされます。
SELECT ROUND(TO_DATE('05-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;
 
Week
--------------------
08-MAR-07 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('04-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;
 
Week
--------------------
01-MAR-07 00:00:00
(1 row)
次の例は、最も近い日に丸めます。
SELECT ROUND(TO_DATE('04-AUG-07 11:59:59 AM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;
 
Day
--------------------
04-AUG-07 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('04-AUG-07 12:00:00 PM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;
 
Day
--------------------
05-AUG-07 00:00:00
(1 row)
次の例は、最も近い曜日(日曜日)の開始に丸めます。
SELECT ROUND(TO_DATE('08-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;
 
Day of Week
--------------------
05-AUG-07 00:00:00
(1 row)
 
SELECT ROUND(TO_DATE('09-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;
 
Day of Week
--------------------
12-AUG-07 00:00:00
(1 row)
以下の例は、最も近い時間に丸めます。
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:29','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;
 
Hour
--------------------
09-AUG-07 08:00:00
(1 row)
 
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;
 
Hour
--------------------
09-AUG-07 09:00:00
(1 row)
次の例は、最も近い分に丸めます。
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30:29','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;
 
Minute
--------------------
09-AUG-07 08:30:00
(1 row)
 
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30:30','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;
 
Minute
--------------------
09-AUG-07 08:31:00
(1 row)
 
2.4.8.7 TRUNC
TRUNC 関数は、指定されたテンプレートパターンに従って切り捨てられた日付を返します。 テンプレートパターンを省略すると、日付は最も近い日に切り捨てられます。次の表は、 TRUNC 関数の テンプレートパターンを示してい ます。
表2-29 TRUNC機能のテンプレート日付パターン
Returns January 1, のcc 01 where ccは is first 2 digits of the given year
Returns January 1, YYYY YYYYは、 where is the given year
Q
WW
IW
W
MI
以下は、 TRUNC関数の使用例です
次の例では、100年単位に切り捨てます。
SELECT TO_CHAR(TRUNC(TO_DATE('1951','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;
 
Century
-------------
01-JAN-1901
(1 row)
次の例は、年を切り捨てます。
SELECT TO_CHAR(TRUNC(TO_DATE('01-JUL-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;
 
Year
-------------
01-JAN-1999
(1 row)
次の例では、ISO年の先頭に切り捨てます。
SELECT TO_CHAR(TRUNC(TO_DATE('01-JUL-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;
 
ISO Year
-------------
29-DEC-2003
(1 row)
次の例では、四半期の開始日を切り捨てます。
SELECT TRUNC(TO_DATE('16-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;
 
Quarter
--------------------
01-JAN-07 00:00:00
(1 row)
次の例では、月の先頭に切り捨てられます。
SELECT TRUNC(TO_DATE('16-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;
 
Month
--------------------
01-DEC-07 00:00:00
(1 row)
次の例では、年の最初の日に指定された週の開始点まで切り捨てられます。月曜日その直前の1月19日の月曜日に2007年の土地の最初の日 目1月15 です。
SELECT TRUNC(TO_DATE('19-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;
 
Week
--------------------
15-JAN-07 00:00:00
(1 row)
次の例では、ISO週の先頭に切り捨てられます。 ISO週は月曜日に始まります。 2004年1月2日は、2003年12月29日月曜日に始まるISO週に分類されます。
SELECT TRUNC(TO_DATE('02-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;
 
ISO Week
--------------------
29-DEC-03 00:00:00
(1 row)
次の例では、週の開始日を、その月の最初の日と同じ日に開始すると見なされるように切り捨てます。
SELECT TRUNC(TO_DATE('21-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;
 
Week
--------------------
15-MAR-07 00:00:00
(1 row)
次の例では、1日の先頭に切り詰められます。
SELECT TRUNC(TO_DATE('04-AUG-07 12:00:00 PM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;
 
Day
--------------------
04-AUG-07 00:00:00
(1 row)
次の例では、週の先頭(日曜日)に切り捨てられます。
SELECT TRUNC(TO_DATE('09-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;
 
Day of Week
--------------------
05-AUG-07 00:00:00
(1 row)
次の例は、時間の始まりを切り捨てます。
SELECT TO_CHAR(TRUNC(TO_DATE('09-AUG-07 08:30','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;
 
Hour
--------------------
09-AUG-07 08:00:00
(1 row)
次の例は、分に切り詰めます。
SELECT TO_CHAR(TRUNC(TO_DATE('09-AUG-07 08:30:30','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;
 
Minute
--------------------
09-AUG-07 08:30:00
(1 row)
 
2.4.8.8現在の日付/時刻
Advanced Serverに は、現在の日付と時刻に関連する値を返すさまざまな関数が用意されています。これらの関数はすべて、現在のトランザクションの開始時刻に基づいて値を返します。
CURRENT_DATEは、現在のトランザクションの開始時刻に基づいて現在の日付と時刻を返します。トランザクション内で複数回呼び出された場合CURRENT _ DATEの値は変更されません。
SELECT CURRENT_DATE FROM DUAL;
 
date
-----------
06-AUG-07
 
CURRENT _ TIMESTAMPは、現在の日付と時刻を戻します。単一のSQLステートメントから呼び出されると、ステートメント内の各オカレンスに対して同じ値が戻されます。トランザクション内の複数のステートメントから呼び出された場合、各オカレンスごとに異なる値が返されることがあります。関数から呼び出された場合、呼び出し元のcurrent_timestampが返す値とは異なる値を返すことがあります。
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP FROM DUAL;
 
current_timestamp | current_timestamp
----------------------------------+----------------------------------
02-SEP-13 17:52:29.261473 +05:00 | 02-SEP-13 17:52:29.261474 +05:00
LOCALTIMESTAMPに はオプションで、精度パラメータを指定することができます。これにより、結果は秒フィールドの小数点以下の桁数に丸められます。精度パラメータがなければ、結果は利用可能な完全精度に渡されます。
SELECT LOCALTIMESTAMP FROM DUAL;
 
timestamp
------------------------
06-AUG-07 16:11:35.973
(1 row)
 
SELECT LOCALTIMESTAMP(2) FROM DUAL;
 
timestamp
-----------------------
06-AUG-07 16:11:44.58
(1 row)
これらの関数は現在のトランザクションの開始時刻を返すので、その値はトランザクション中に変更されません。これは機能と見なされます。つまり、1つのトランザクションに「現在の」時間の一貫した概念を持たせ、同じトランザクション内の複数の変更が同じタイムスタンプを持つようにすることです。他のデータベースシステムでは、これらの値をより頻繁に進めることがあります。
2.4.8.9 NUMTODSINTERVAL
NUMTODSINTERVAL 関数は第二インターバルユニットを介して日を含む期間に数値を変換します。 関数を呼び出すときは、結果セットに含める最小の小数間隔タイプを指定します。有効な間隔タイプは、 DAY HOUR MINUTE 、および SECOND です。
次の例では、数値を曜日と時間を含む時間間隔に変換します。
SELECT numtodsinterval(100, ‘hour’);
numtodsinterval
---------------
4 days 04:00:00
(1 row)
次の例では、数値を分と秒を含む時間間隔に変換します。
SELECT numtodsinterval(100, ‘second’);
numtodsinterval
---------------
1 min 40 secs
(1 row)
2.4.8.10 NUMTOYMINERVAL
NUMTOYMINTERVAL 機能は、月の間隔ユニットを通じて年を含む時間間隔の数値を変換します。 関数を呼び出すときは、結果セットに含める最小の小数間隔タイプを指定します。有効なインターバルタイプは YEAR MONTH です。
次の例では、数値を年と月を含む時間間隔に変換します。
SELECT numtoyminterval(100, ‘month’);
numtoyminterval
---------------
8 years 4 mons
(1 row)
 
次の例では、数値のみを含む時間間隔に変換します。
SELECT numtoyminterval(100, ‘year’);
numtoyminterval
---------------
100 years
(1 row)
 
 
2.4.9 シーケンス操作関数
このセクションでは 、シーケンス・オブジェクトを操作するための Advanced Server の機能 について説明し ます。シーケンスオブジェクト(シーケンスジェネレータまたはシーケンスとも呼ばれます)は、 CREATE SEQUENCE コマンドで 作成される特別な単一行テーブルです 。通常、シーケンスオブジェクトは、テーブルの行に固有の識別子を生成するために使用されます。シーケンス関数は、シーケンスオブジェクトから連続したシーケンス値を取得するための簡単でマルチユーザに安全なメソッドを提供します。
sequence .NEXTVAL
sequence .CURRVAL
sequence は、 CREATE SEQUENCE コマンドで シーケンスに割り当てられた識別子 です。次に、これらの機能の使用方法について説明します。
NEXTVAL
シーケンスオブジェクトを次の値に進め、その値を返します。これは原子的に行われます。複数のセッションが 同時に NEXTVALを 実行 しても、それぞれ異なるシーケンス値を安全に受信します。
CURRVAL
現在のセッションでこのシーケンスの NEXTVAL によって最後に得られた値を返します 。 ( このセッションでこのシーケンスに対して NEXTVAL が呼び出されたことがない 場合はエラーが報告 されます)。これはセッションローカル値を返すため、現在のセッション以降に他のセッションが NEXTVAL を実行したかどうかを予測できます
シーケンス・オブジェクトがデフォルト・パラメータで作成されている場合、 NEXTVALを呼び出すと、1で始まる連続した値が戻されます。その他の動作は、 CREATE SEQUENCEコマンドの特殊パラメータを使用して取得できます。
重要 :同じシーケンスから数値を取得する並行トランザクションのブロッキングを回避するため、 NEXTVAL 操作はロールバックされません。つまり、値がフェッチされると、 後で NEXTVALを 実行したトランザクションが 異常終了 した場合でも、値が使用されたとみなされます 。これは、中断されたトランザクションが 、割り当てられた値のシーケンスに 未使用の 「穴」を 残す可能性があることを意味し ます。
 
 
2.4.10 条件式
次のセクションでは、 Advanced Serverで 使用可能な SQL 準拠の条件式 について説明し ます
2.4.10.1 ケース
SQL CASE 式は、他の言語のif / else文と同様の一般的な条件式です。
CASE WHEN condition THEN result
[ WHEN ... ]
[ ELSE result ]
END
CASE 句は、式が有効な場合はいつでも使用できます。 condition BOOLEANの 結果 を返す式です 。結果が 真の 場合、 CASE 式の 値は 条件に続く 結果 になります。結果が 偽で あれば、 それ以降の WHEN 句は すべて 同じ方法で検索されます。 WHENが ない場合 condition true の場合、 CASE 式の 値は ELSE 句の 結果 になり ます。 ELSE句がなく、どの条件とも一致しない場合 、結果はNULLです。
例:
SELECT * FROM test;
 
a
---
1
2
3
(3 rows)
 
SELECT a,
CASE WHEN a=1 THEN 'one'
WHEN a=2 THEN 'two'
ELSE 'other'
END
FROM test;
 
a | case
---+-------
1 | one
2 | two
3 | other
(3 rows)
すべての 結果のデータ型は 、単一の出力型に変換可能でなければなりません。
次の「シンプルな」 CASE式は、上記の一般的な形式の特殊な変形です。
CASE expression
WHEN value THEN result
[ WHEN ... ]
[ ELSE result ]
END
発現は、 計算および 句は、1つまでは同じであることが明らかとなった 場合 、すべての 値の 仕様 と比較されます 一致するものが見つからない場合 は、 ELSE節の結果 (またはヌル値)が返されます。
上記の例は、単純な CASE構文を使用して記述することができます。
SELECT a,
CASE a WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'other'
END
FROM test;
 
a | case
---+-------
1 | one
2 | two
3 | other
(3 rows)
CASE は、結果を決定するために必要されていない任意の部分式を評価しません。 たとえば、これはゼロによる除算の失敗を回避するための方法です。
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
2.4.10.2 COALESCE
COALESCE 関数は、NULLでない自身の最初の引数を返します。 すべての引数がnullの場合にのみNullが返されます。
COALESCE( value [, value2 ] ... )
これは、表示またはそれ以上の計算のためにデータを取り出すときに、ヌル値のデフォルト値を代入するためによく使用されます。例えば:
SELECT COALESCE(description, short_description, '(none)') ...
CASE と同様に COALESCE は結果を判別する必要のない引数は評価しません。つまり、最初のNULL以外の引数の右側の引数は評価されません。この SQL 標準機能は 、他のデータベースシステムで使用されている NVL IFNULLに 似た機能を提供し ます。
2.4.10.3 NULLIF
値1 value2が 等しい 場合 NULLIF 関数はNULL値を戻します それ以外の場合は、 value1を 返します
NULLIF( value1 , value2 )
上記の COALESCEの とは逆の操作を行うために使用することができます
SELECT NULLIF(value1, '(none)') ...
value1 が(none)の 場合 はnullを返し、そうでない場合は value1を 返し ます。
2.4.10.4 NVL
NVL 関数は、NULLでない自身の最初の引数を返します。 NVLは最初の式を評価します。その式がNULLに評価される場合、 NVLは2番目の式を返します。
NVL( expr1 expr2
戻り値の型は引数の型と同じです。すべての引き数は同じデータ型を持たなければなりません(または共通の型に強制可能でなければなりません)。 すべての引数が NULL の場合 NVLは、NULL 返します
次の例は、委託されていない従業員のボーナスを計算します。従業員が委託従業員の場合、この式はemployeesコミッションを返します。従業員が委託従業員でない場合(つまり、コミッションが NULLの場合 )、この式は給与の10%のボーナスを返します。
ボーナス= NVL(emp.commission、emp.salary * .10)
2.4.10.5 NVL2
NVL2は式を評価し、最初の式の値に応じて2番目または3番目の式を返します。最初の式がNULLでない場合、 NVL2expr2の値を返します 。最初の式がNULLの場合、 NVL2expr3の値を返します。
NVL2(expr1、expr2、expr3)
戻り値の型は引数の型と同じです。すべての引き数は同じデータ型を持たなければなりません(または共通の型に強制可能でなければなりません)。
次の例では、委託された従業員のボーナスを計算します。特定の従業員が委託従業員の場合、この式は彼のコミッションの110%に相当する金額を返します。従業員が委託従業員でない場合(つまり、コミッションが NULLの場合 )、この式は0を返します
ボーナス= NVL2(emp.commission、emp.commission * 1.1、0)
2.4.10.6最高最低
GREATEST LEAST 関数は、式の任意の数のリストから、最大または最小値を選択します。
GREATEST( value [, value2 ] ... )
LEAST( value [, value2 ] ... )
式はすべて共通のデータ型に変換可能でなければなりません。これは結果の型になります。リスト内のNULL値は無視されます。すべての式がnullと評価された場合にのみ、結果はNULLになります。
GREATESTLEASTSQL標準にはないが、一般的な拡張であることに注意してください
 
2.4.11 集計関数
集計 関数は、入力値のセットから単一の結果値を計算します。組み込み集約関数は、次の表にリストされています。
表2-30汎用汎用集計関数
AVG( 発現 )
for any integer type, NUMBER for a floating-point argument, otherwise the same as the argument data type DOUBLE PRECISION for a floating-point argument, otherwise the same as the argument data type
COUNT( )
Any
MAX( )
MIN( )
SUM( )
BIGINT for SMALLINT or INTEGER arguments, NUMBER for BIGINT arguments, DOUBLE PRECISION for floating-point arguments, otherwise the same as the argument data type
COUNT を除いて 、これらの関数は、行が選択されていないときにはNULL値を戻すことに注意してください 。特に、行がない場合のSUMは、期待どおりゼロではなくNULLを返します。 COALESCE関数を使用して、必要に応じてゼロにゼロを代入することができます。
次の表に、統計分析で一般的に使用される集計関数を示します。 (これらは、より一般的に使用される集約のリストを乱雑にするのを避けるためにのみ分離されています)。記述に N が記述されている場合は、すべての入力式がNULLでない入力行の数を意味します。すべての場合において、計算が無意味である場合、例えばNがゼロの場合には、nullが返される。
表2-31統計に関する集計関数
CORR( Y , X )
COVAR_POP( Y , X )
COVAR_SAMP( Y , X )
REGR_AVGX( Y , X )
REGR_AVGY( Y , X )
REGR_COUNT( Y , X )
REGR_INTERCEPT( Y , X )
REGR_R2( Y , X )
REGR_SLOPE( Y , X )
REGR_SXX( Y , X )
Sum ( X 2 ) – sum ( X ) 2 / N (“sum of squares” of the independent variable)
REGR_SXY( Y , X )
Sum ( X * Y ) – sum ( X ) * sum ( Y ) / N (“sum of products” of independent times dependent variable)
REGR_SYY( Y , X )
Sum ( Y 2 ) – sum ( Y ) 2 / N (“sum of squares” of the dependent variable)
STDDEV( )
for floating-point arguments, otherwise DOUBLE PRECISION for floating-point arguments, otherwise NUMBER
STDDEV_SAMP Historic alias for
STDDEV_POP( )
for floating-point arguments, otherwise DOUBLE PRECISION for floating-point arguments, otherwise NUMBER
STDDEV_SAMP( )
for floating-point arguments, otherwise DOUBLE PRECISION for floating-point arguments, otherwise NUMBER
VARIANCE( )
for floating-point arguments, otherwise DOUBLE PRECISION for floating-point arguments, otherwise NUMBER
VAR_POP( )
for floating-point arguments, otherwise DOUBLE PRECISION for floating-point arguments, otherwise NUMBER
VAR_SAMP( )
for floating-point arguments, otherwise DOUBLE PRECISION for floating-point arguments, otherwise NUMBER
 
2.4.12 サブクエリ式
この項では、 Advanced Serverで 使用可能な SQL 準拠の副問合せ式 について説明し ます 。このセクションに記載されているすべての式はブール値( true / false )を 返し ます。
2.4.12.1 EXISTS
EXISTS の引数 は、任意の SELECT 文またはサブクエリです。副問合せは、行が戻されるかどうかを判断するために評価されます。少なくとも1つの行を戻す場合 EXISTS の結果 TRUEになり ます。サブクエリが行を 戻さ ない場合、 EXISTS の結果 FALSEになります
EXISTS( subquery )
サブクエリは、サブクエリのいずれかの評価中に定数として機能する周囲のクエリの変数を参照できます。
サブクエリは通常、少なくとも1つの行が返されるかどうかを判断するのに十分なだけ実行されます。何らかの副作用(呼び出しシーケンス関数など)を持つ副問い合わせを書くのは賢明ではありません。副作用が起こるか否かは予測するのが難しいかもしれない。
結果は、行が返されるかどうかと、それらの行の内容ではなく、サブクエリの出力リストは通常​​は面白くないためです。一般的なコーディング規則は、すべての EXISTSテストをEXISTS(SELECT 1 WHERE ...)の形式で記述すること です 。ただし、 INTERSECTを使用するサブクエリなど、このルールには例外があります。
この単純な例は、 deptnoの 内部結合に似ていますが、一致するemp行が複数あるにもかかわらず、各dept行に対して最大で1つの出力行を生成します。
SELECT dname FROM dept WHERE EXISTS (SELECT 1 FROM emp WHERE emp.deptno = dept.deptno);
 
dname
------------
ACCOUNTING
RESEARCH
SALES
(3 rows)
2.4.12.2 IN
右側は括弧でくくられたサブクエリで、正確に1つの列を返す必要があります。左辺の式が評価され、副問合せ結果の各行と比較されます。 等しいサブクエリー行が見つかると IN の結果 TRUEになり ます。 等しい行が見つからない場合(副問合せが行を戻さない特殊な場合を含む)、 結果は FALSEになります
expression IN ( subquery )
左側の式が得られる場合、その注意 ヌル ヌル 全く等しい右側の値と少なくとも一つの右側の行収率を存在しない場合、又は 、IN構文 の結果は ではない、nullになります。これは、ヌル値のブール値の組み合わせに対するSQLの通常の規則に従います。
EXISTS同様に 、サブクエリが完全に評価されると仮定することは賢明ではありません。
2.4.12.3 NOT IN
右側は括弧でくくられたサブクエリで、正確に1つの列を返す必要があります。左辺の式が評価され、副問合せ結果の各行と比較されます。 不等な副問い合わせ行だけが見つかった場合(副問い合わせが行を返さない特殊な場合を含む)、 NOT IN の結果 TRUE になります。 等しい行が見つかると、 結果は FALSEになります
expression NOT IN ( subquery )
左辺の式が ヌル である場合、または等しい右辺値がなく、少なくとも1つの右辺が NULLを もたらす 場合、 NOT IN構文の結果は ではなくヌルになります 。これは、ヌル値のブール値の組み合わせに対するSQLの通常の規則に従います。
EXISTS同様に 、サブクエリが完全に評価されると仮定することは賢明ではありません。
2.4.12.4 ANY / SOME
右側は括弧でくくられたサブクエリで、正確に1つの列を返す必要があります。左辺の式が評価され、指定された演算子を使用して副問合せ結果の各行と比較されます。 真の結果が得られれば ANY の結果 TRUEになり ます。 真の結果が見つからない場合(サブクエリが行を返さない特殊な場合を含む)、 結果は FALSEになります
expression operator ANY ( subquery )
expression operator SOME ( subquery )
SOME ANYの 同義語です IN = ANY と等価です。
成功がなく、少なくとも1つの右辺がオペレータの結果にNULLをもたらす場合、 ANY構文の結果はfalseではなくNULLになることに注意してください。これは、ヌル値のブール値の組み合わせに対するSQLの通常の規則に従います。
EXISTS同様に 、サブクエリが完全に評価されると仮定することは賢明ではありません。
2.4.12.5 すべて
右側は括弧でくくられたサブクエリで、正確に1つの列を返す必要があります。左辺の式が評価され、指定された演算子を使用して副問合せ結果の各行と比較されます。 サブクエリが行を返さない特殊な場合も含めて、すべての行 trueになると ALL の結果 TRUE になります。 偽の結果が見つかると、 結果は FALSEになります 比較 によってすべての行に対して false 返さ ない場合、 結果は null になり 、少なくとも1つの行に対して null 返され ます
expression operator ALL ( subquery )
NOT IN <> ALL と同等です。 EXISTSと同様に、サブクエリが完全に評価されると仮定することは賢明ではありません。
3 Oracleカタログ・ビュー
オラクル・カタログ・ビューは、Oracleデータ・ディクショナリ・ビューと互換性のある方法で、データベースオブジェクトに関する情報を提供します。
3.1 ALL_ALL_TABLES
ALL_ALL_TABLESビューには、現在のユーザがアクセスできる表に関する情報を提供します。
if the table is temporary; Y if the table is temporary; if the table is permanent. N if the table is permanent.
 
3.2 ALL_CONS_COLUMNS
ALL_CONS_COLUMNSビューには、現在のユーザーがアクセスできるテーブルの上に置かれた制約に指定された列に関する情報を提供します。
3.3 ALL_CONSTRAINTS
ALL_CONSTRAINTSビューには、現在のユーザーがアクセスできるテーブルの上に置かれた制約についての情報を提供します。
C – check constraint
F – foreign key constraint
P – primary key constraint
U – unique key constraint
R – referential integrity constraint
V – constraint on a view
O – with read-only, on a view
C – cascade
R – restrict
N – no action
3.4 ALL_DB_LINKS
ALL_DB_LINKSビューには、現行ユーザーがアクセス可能なデータベース・リンクに関する情報を提供します。
3.5 ALL_DIRECTORIES
ALL_DIRECTORIESビュー、CREATE DIRECTORYコマンドで作成したすべてのディレクトリについての情報を提供します。
3.6 ALL_IND_COLUMNS
ALL_IND_COLUMNSビューには、現在のユーザーがアクセスできる表の索引に含ま列に関する情報を提供します。
Always set to Y (descending); included for compatibility only. Always set to (descending); included for compatibility only.
 
3.7 ALL_INDEXES
ALL_INDEXESビューは、現在のユーザによってアクセスされ得るテーブルのインデックスに関する情報を提供します。
The index type is always BTREE . Included for compatibility only.
Always set to N (not compressed). Included for compatibility only. Always set to (not compressed). Included for compatibility only. Always set to (not compressed). Included for compatibility only.
Always set to LOGGING Always set to LOGGING . Included for compatibility only.
3.8 ALL_JOBS
ALL_JOBSビューには、データベース内に存在するすべてのジョブに関する情報を提供します。
job
log_user Same as . Included for compatibility only.
last_date Same as last_date .
Y If , no attempt will be made to run this job.
N If , this job will attempt to execute.
Always NULL . Provided for compatibility only.
Always NULL . Provided for compatibility only.
Always 0 . Provided for compatibility only.
 
3.9 ALL_OBJECTS
ALL_OBJECTSビューには、データベース内に存在するすべてのオブジェクトに関する情報を提供します。
Type of the object – possible values are: , INDEX , FUNCTION , PACKAGE , PACKAGE BODY , PROCEDURE , SEQUENCE , SYNONYM , TABLE , TRIGGER , and VIEW .
if a temporary object; Y if a temporary object; if this is a permanent object. N if this is a permanent object.
3.10 ALL_PART_KEY_COLUMNS
ALL_PART_KEY_COLUMNSビューは、データベースに存在するパーティション表のキー列に関する情報を提供します。
1 for the first column; 2 for the second column, etc.
3.11 ALL_PART_TABLES
ALL_PART_TABLESビューは、データベースに存在するパーティション表のすべてについて情報を提供します。
3.12 すべての政策
ALL_POLICIESビューは、データベース内のすべてのポリシーに関する情報を提供します。このビューは、スーパーユーザーのみがアクセスできます。
sel
Whether or not the policy applies to SELECT commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
ins
Whether or not the policy applies to INSERT commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
upd
Whether or not the policy applies to UPDATE commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
del
Whether or not the policy applies to DELETE commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
idx
INSERT and UPDATE commands. Possible values are Whether or not the check option is in force for commands. Possible values are YES or NO .
3.13 ALL_QUEUES
ALL_QUEUESビューには、現在定義されたキューについての情報を提供します。
qid
OID
The queue type; may be EXCEPTION _ QUEUE , NON _ PERSISTENT _ QUEUE , or NORMAL _ QUEUE .
if the queue resides on a sharded network; YES if the queue resides on a sharded network; if the queue does not. NO if the queue does not.
 
3.14 ALL_QUEUE_TABLES
ALL_QUEUE_TABLESビューは、データベース内のキュー表のすべての情報を提供します。
Always SINGLE .
Always NONE .
Always 0 .
Always 0 .
YES indicates that the queue table is secure; NO indicates that it is not.
3.15 ALL_SEQUENCES
ALL_SEQUENCESビューは、すべてのユーザ定義、ユーザが選択した前記配列、または更新権限に関する情報を提供します。
min_value or max_value. Specifies if the sequence should wrap when it reaches max_value.
3.16 ALL_SOURCE
ファンクション、プロシージャ、トリガ、パッケージの仕様、およびパッケージ本体:ALL_SOURCEビューには、次プログラムタイプのソースコードのリストを提供します。
Type of program – possible values are: , FUNCTION , PACKAGE , PACKAGE BODY , PROCEDURE , and TRIGGER .
3.17 ALL_SUBPART_KEY_COLUMNS
ALL_SUBPART_KEY_COLUMNSビューは、データベースに存在するサブパーティション化されているそれらの分割されたテーブルのキー列に関する情報を提供します。
1 for the first column; 2 for the second column, etc.
3.18 ALL_SYNONYMS
ALL_SYNONYMSビューは、現在のユーザによって参照されるすべての同義語に関する情報を提供します。
3.19 ALL_TAB_COLUMNS
ALL_TAB_COLUMNSビューはすべてのユーザー定義テーブルおよびビューのすべての列についての情報を提供します。
NUMBER columns. Scale of
Whether or not the column is nullable. Possible values are:
Y – column is nullable; N – column does not allow null.
3.20 ALL_TAB_PARTITIONS
ALL_TAB_PARTITIONSビューには、データベース内に存在するすべてのパーティションに関する情報を提供します。
if the table is subpartitioned; YES if the table is subpartitioned; if the table is not subpartitioned. NO if the table is not subpartitioned.
CREATE TABLE statement. The high partitioning value specified in the statement.
pg_class.reltuples Same as .
pg_class.relpages. Same as pg_class.relpages.
3.21 ALL_TAB_SUBPARTITIONS
ALL_TAB_SUBPARTITIONSビューは、データベース内に存在するサブパーティションのすべての情報を提供します。
CREATE TABLE statement. The high subpartitioning value specified in the statement.
pg_class.reltuples Same as .
pg_class.relpages. Same as pg_class.relpages.
3.22 ALL_TABLES
ALL_TABLESビューは、すべてのユーザー定義テーブルの情報を提供します。
if this is a temporary table; Y if this is a temporary table; if this is not a temporary table. N if this is not a temporary table.
3.23 ALL_TRIGGERS
ALL_TRIGGERSビューは、現在のユーザによってアクセスされ得るテーブルのトリガに関する情報を提供します。
Included for compatibility only. Value will always be REFERENCING NEW AS NEW OLD AS OLD .
Status indicates if the trigger is enabled ( VALID ) or disabled ( NOTVALID ). ) or disabled ( ).
 
 
 
3.24 ALL_TYPES
ALL_TYPESビューには、現在のユーザーが使用できるオブジェクトの種類についての情報を提供します。
OID
3.25 ALL_USERS
ALL_USERSビューには、すべてのユーザー名に関する情報を提供します。
OID
3.26 ALL_VIEW_COLUMNS
ALL_VIEW_COLUMNSビューは、すべてのユーザー定義のビューのすべての列に関する情報を提供します。
NUMBER columns. Scale of
Whether or not the column is nullable – possible values are: Y – column is nullable; N – column does not allow null.
3.27 ALL_VIEWS
ALL_VIEWSビューには、すべてのユーザー定義のビューについての情報を提供します。
The SELECT statement that defines the view.
3.28 DBA_ALL_TABLES
DBA_ALL_TABLESビューは、データベース内のすべてのテーブルに関する情報を提供します。
if the table is temporary; Y if the table is temporary; if the table is permanent. N if the table is permanent.
3.29 DBA_CONS_COLUMNS
DBA_CONS_COLUMNSビューは、データベース内のすべてのテーブルの上で指定されている制約に含まれているすべての列に関する情報を提供します。
3.30 DBA_CONSTRAINTS
DBA_CONSTRAINTSビューは、データベース内のテーブル上のすべての制約についての情報を提供します。
C – check constraint
F – foreign key constraint
P – primary key constraint
U – unique key constraint
R – referential integrity constraint
V – constraint on a view
O – with read-only, on a view
C – cascade
R - restrict
N – no action
3.31 DBA_DB_LINKS
DBA_DB_LINKSビューは、データベース内のすべてのデータベース・リンクに関する情報を提供します。
3.32 DBA_DIRECTORIES
DBA_DIRECTORIESビュー、CREATE DIRECTORYコマンドで作成したすべてのディレクトリについての情報を提供します。
3.33 DBA_IND_COLUMNS
DBA_IND_COLUMNSビューは、データベース内のすべてのテーブルの上に、インデックスに含まれるすべての列に関する情報を提供します。
Always set to Y (descending); included for compatibility only. Always set to (descending); included for compatibility only.
3.34 DBA_INDEXES
DBA_INDEXESビューは、データベース内のすべてのインデックスについての情報を提供しています。
The index type is always BTREE . Included for compatibility only.
Always set to N (not compressed). Included for compatibility only. Always set to (not compressed). Included for compatibility only. Always set to (not compressed). Included for compatibility only.
3.35 DBA_JOBS
DBA_JOBSビューは、データベース内のすべてのジョブについての情報を提供します。
job
log_user Same as . Included for compatibility only.
last_date Same as last_date .
Y If , no attempt will be made to run this job.
N If , this job will attempt to execute.
Always NULL . Provided for compatibility only.
Always NULL . Provided for compatibility only.
Always 0 . Provided for compatibility only.
3.36 DBA_OBJECTS
DBA_OBJECTSビューは、データベース内のすべてのオブジェクトに関する情報を提供します。
Type of the object – possible values are: , INDEX , FUNCTION , PACKAGE , PACKAGE BODY , PROCEDURE , SEQUENCE , SYNONYM , TABLE , TRIGGER , and VIEW .
if the table is temporary; Y if the table is temporary; if the table is permanent. N if the table is permanent.
3.37 DBA_PART_KEY_COLUMNS
DBA_PART_KEY_COLUMNSビューは、データベースに存在するパーティション表のキー列に関する情報を提供します。
1 for the first column; 2 for the second column, etc.
3.38 DBA_PART_TABLES
DBA_PART_TABLESビューは、データベース内のパーティション表のすべての情報を提供します。
3.39 DBA_POLICIES
DBA_POLICIESビューは、データベース内のすべてのポリシーに関する情報を提供します。このビューは、スーパーユーザーのみがアクセスできます。
sel
Whether or not the policy applies to SELECT commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
ins
Whether or not the policy applies to INSERT commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
upd
Whether or not the policy applies to UPDATE commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
del
Whether or not the policy applies to DELETE commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
idx
INSERT and UPDATE commands. Possible values are Whether or not the check option is in force for commands. Possible values are YES or NO .
3.40 DBA_PROFILES
DBA_PROFILESビューは、既存のプロファイルについての情報を提供します。表には、各プロファイル/リソースの組み合わせの行が含まれています。
for a user-created profile; YES for a user-created profile; for a system-defined profile. NO for a system-defined profile.
3.41 DBA_QUEUES
DBA_QUEUESビューには、現在定義されたキューについての情報を提供します。
qid
OID
The queue type; may be EXCEPTION _ QUEUE , NON _ PERSISTENT _ QUEUE , or NORMAL _ QUEUE .
if the queue allows enqueuing; YES if the queue allows enqueuing; if the queue does not. NO if the queue does not.
if the queue allows dequeuing; YES if the queue allows dequeuing; if the queue does not. NO if the queue does not.
if the queue resides on a sharded network; YES if the queue resides on a sharded network; if the queue does not. NO if the queue does not.
3.42 DBA_QUEUE_TABLES
DBA_QUEUE_TABLESビューは、データベース内のキュー表のすべての情報を提供します。
Always SINGLE .
Always NONE .
Always 0 .
Always 0 .
YES indicates that the queue table is secure; NO indicates that it is not.
3.43 DBA_ROLE_PRIVS
DBA_ROLE_PRIVSビューには、ユーザーに付与されているすべての役割についての情報を提供します。ユーザが付与されたロールごとに行が作成されます。
if the role was granted with the admin option, YES if the role was granted with the admin option, otherwise. if the role was granted with the admin option, NO otherwise.
if the role is enabled when the grantee creates a session. YES if the role is enabled when the grantee creates a session.
3.44 DBA_ROLES
DBA_ROLESビューには、NOLOGIN属性 (グループ)を持つすべての役割についての情報を提供します。
NOLOGIN attribute – ie, a group. Name of a role having the attribute – ie, a group.
3.45 DBA_SEQUENCES
DBA_SEQUENCESビューには、すべてのユーザー定義のシーケンスについての情報を提供します。
min_value or max_value. Specifies if the sequence should wrap when it reaches max_value.
3.46 DBA_SOURCE
DBA_SOURCEビューは、データベース内のすべてのオブジェクトのソースコードリストを提供します。
Type of program – possible values are: , FUNCTION , PACKAGE , PACKAGE BODY , PROCEDURE , and TRIGGER .
3.47 DBA_SUBPART_KEY_COLUMNS
DBA_SUBPART_KEY_COLUMNSビューは、データベースに存在するサブパーティション化されているそれらの分割されたテーブルのキー列に関する情報を提供します。
1 for the first column; 2 for the second column, etc.
3.48 DBA_SYNONYMS
DBA_SYNONYMビューは、データベース内のすべての同義語に関する情報を提供します。
3.49 DBA_TAB_COLUMNS
DBA_TAB_COLUMNSビューは、データベース内のすべての列に関する情報を提供します。
NUMBER columns. Scale of
Whether or not the column is nullable – possible values are:
Y – column is nullable; N – column does not allow null.
3.50 DBA_TAB_PARTITIONS
DBA_TAB_PARTITIONSビューには、データベース内に存在するすべてのパーティションに関する情報を提供します。
if the table is subpartitioned; YES if the table is subpartitioned; if the table is not subpartitioned. NO if the table is not subpartitioned.
CREATE TABLE statement. The high partitioning value specified in the statement.
1 for the first partition; 2 for the second partition, etc.
pg_class.reltuples Same as .
pg_class.relpages. Same as pg_class.relpages.
3.51 DBA_TAB_SUBPARTITIONS
DBA_TAB_SUBPARTITIONSビューは、データベース内に存在するサブパーティションのすべての情報を提供します。
CREATE TABLE statement. The high subpartitioning value specified in the statement.
1 for the first subpartition; 2 for the second subpartition, etc.
pg_class.reltuples Same as .
pg_class.relpages. Same as pg_class.relpages.
3.52 DBA_TABLES
DBA_TABLESビューは、データベース内のすべてのテーブルに関する情報を提供します。
if the table is temporary; Y if the table is temporary; if the table is permanent. N if the table is permanent.
3.53 DBA_TRIGGERS
DBA_TRIGGERSビューは、データベース内のすべてのトリガについての情報を提供します。
Included for compatibility only. Value will always be REFERENCING NEW AS NEW OLD AS OLD .
Status indicates if the trigger is enabled ( VALID ) or disabled ( NOTVALID ). ) or disabled ( ).
3.54 DBA_TYPES
DBA_TYPESビューは、データベース内のすべてのオブジェクトタイプに関する情報を提供します。
OID
3.55 DBA_USERS
DBA_USERSビューには、データベースのすべてのユーザーに関する情報を提供します。
OID
edb_get_role_status( role_id ) function to get the current status of the account. Use the function to get the current status of the account.
If the account status is LOCKED , lock_date displays the date and time the account was locked.
The expiration date of the password. Use the function to get the current password expiration date. The expiration date of the password. Use the edb_get_password_expiry_date( role_id ) function to get the current password expiration date. The expiration date of the password. Use the function to get the current password expiration date.
3.56 DBA_VIEW_COLUMNS
DBA_VIEW_COLUMNSビューは、データベース内のすべてのカラムに関する情報を提供します。
NUMBER columns. Scale of
Whether or not the column is nullable – possible values are:
Y – column is nullable; N – column does not allow null.
3.57 DBA_VIEWS
DBA_VIEWSビューは、データベース内のすべてのビューについての情報を提供します。
statement that defines the view. SELECT statement that defines the view. The text of the statement that defines the view.
3.58 USER_ALL_TABLES
USER_ALL_TABLESビューには、現在のユーザーが所有するすべてのテーブルに関する情報を提供します。
if the table is temporary; Y if the table is temporary; if the table is permanent. N if the table is permanent.
3.59 USER_CONS_COLUMNS
USER_CONS_COLUMNSビューは、現在のユーザが所有しているテーブル内の制約に含まれているすべての列に関する情報を提供します。
3.60 ユーザー対応
USER_CONSTRAINTSビューは、現在のユーザが所有しているテーブルの上に置かすべての制約についての情報を提供します。
C – check constraint
F – foreign key constraint
P – primary key constraint
U – unique key constraint
R – referential integrity constraint
V – constraint on a view
O – with read-only, on a view
C – cascade
R – restrict
N – no action
3.61 USER_DB_LINKS
USER_DB_LINKSビューには、現在のユーザーが所有するすべてのデータベース・リンクに関する情報を提供します。
3.62 USER_IND_COLUMNS
USER_IND_COLUMNSビューには、現在のユーザーが所有する表の索引で参照されるすべての列に関する情報を提供します。
Always set to Y (descending); included for compatibility only. Always set to (descending); included for compatibility only.
3.63 USER_INDEXES
USER_INDEXESビューには、現在のユーザーによって所有されているテーブルのすべてのインデックスについての情報を提供します。
3.64 USER_JOBS
USER_JOBSビューには、現在のユーザーが所有するすべてのジョブに関する情報を提供します。
job
log_user Same as . Included for compatibility only.
last_date Same as last_date .
this_date Same as this_date .
next_date Same as .
Y If , no attempt will be made to run this job.
N If , this job will attempt to execute.
Always NULL . Provided for compatibility only.
Always NULL . Provided for compatibility only.
Always 0 . Provided for compatibility only.
3.65 USER_OBJECTS
USER_OBJECTSビューには、現在のユーザーが所有するすべてのオブジェクトに関する情報を提供します。
Type of the object – possible values are: , INDEX , FUNCTION , PACKAGE , PACKAGE BODY , PROCEDURE , SEQUENCE , SYNONYM , TABLE , TRIGGER , and VIEW .
if the object is temporary; Y if the object is temporary; if the object is not temporary. N
3.66 USER_PART_KEY_COLUMNS
USER_PART_KEY_COLUMNSビューは、データベースに存在するパーティション表のキー列に関する情報を提供します。
1 for the first column; 2 for the second column, etc.
3.67 USER_PART_TABLES
USER_PART_TABLESビューは、現在のユーザが所有しているデータベースで仕切られたテーブルのすべての情報を提供します。
3.68 USER_POLICIES
USER_POLICIESビューは、ポリシーが適用されたオブジェクトを含むスキーマは、現在のセッションのユーザーと同じ名前を持つポリシーに関する情報を提供します。このビューは、スーパーユーザーのみがアクセスできます。
sel
Whether or not the policy applies to SELECT commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
ins
Whether or not the policy applies to INSERT commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
upd
Whether or not the policy applies to UPDATE commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
del
Whether or not the policy applies to DELETE commands. Possible values are Whether or not the policy applies to commands. Possible values are YES or NO .
idx
INSERT and UPDATE commands. Possible values are Whether or not the check option is in force for commands. Possible values are YES or NO .
3.69 USER_QUEUES
USER_QUEUESビューには、現在のユーザーは、使用権限を持っている上の任意のキューに関する情報を提供します。
qid
OID
The queue type; may be EXCEPTION _ QUEUE , NON _ PERSISTENT _ QUEUE , or NORMAL _ QUEUE .
if the queue allows enqueuing; YES if the queue allows enqueuing; if the queue does not. NO if the queue does not.
if the queue allows dequeuing; YES if the queue allows dequeuing; if the queue does not. NO if the queue does not.
if the queue resides on a sharded network; YES if the queue resides on a sharded network; if the queue does not. NO if the queue does not.
3.70 USER_QUEUE_TABLES
USER_QUEUE_TABLESビューには、現在のユーザーがアクセスできるキュー表のすべての情報を提供します。
Always SINGLE .
Always NONE .
Always 0 .
Always 0 .
YES indicates that the queue table is secure; NO indicates that it is not.
3.71 USER_ROLE_PRIVS
USER_ROLE_PRIVSビューには、現在のユーザーに付与された権限に関する情報を提供します。ユーザが付与されたロールごとに行が作成されます。
if the role was granted with the admin option, YES if the role was granted with the admin option, otherwise. if the role was granted with the admin option, NO otherwise.
if the role is enabled when the grantee creates a session. YES if the role is enabled when the grantee creates a session.
3.72 USER_SEQUENCES
USER_SEQUENCESビューには、現在のユーザーに属するすべてのユーザ定義のシーケンスについての情報を提供します。
min_value or max_value. Specifies if the sequence should wrap when it reaches max_value.
3.73 USER_SOURCE
USER_SOURCEビューは、現行のユーザーが所有するすべてのプログラムについての情報を提供します。
Type of program – possible values are: , FUNCTION , PACKAGE , PACKAGE BODY , PROCEDURE , and TRIGGER .
3.74 USER_SUBPART_KEY_COLUMNS
USER_SUBPART_KEY_COLUMNSビューには、現在のユーザーに属するサブパーティション化されているこれらのパーティションテーブルのキー列に関する情報を提供します。
1 for the first column; 2 for the second column, etc.
3.75 USER_SYNONYMS
USER_SYNONYMSビューには、現在のユーザーが所有するすべての同義語に関する情報を提供します。
3.76 USER_TAB_COLUMNS
USER_TAB_COLUMNSビューは、現在のユーザが所有するテーブルとビューのすべての列に関する情報を表示します。
NUMBER columns. Scale of
Whether or not the column is nullable – possible values are: Y Y – column is nullable; N – column does not allow null.
3.77 USER_TAB_PARTITIONS
USER_TAB_PARTITIONSビューには、現在のユーザーが所有するすべてのパーティションに関する情報を提供します。
if the table is subpartitioned; YES if the table is subpartitioned; if the table is not subpartitioned. NO if the table is not subpartitioned.
CREATE TABLE statement. The high partitioning value specified in the statement.
1 for the first partition; 2 for the second partition, etc.
pg_class.reltuples Same as .
pg_class.relpages. Same as pg_class.relpages.
3.78 USER_TAB_SUBPARTITIONS
USER_TAB_SUBPARTITIONSビューは、現行のユーザーが所有するサブパーティションのすべての情報を提供します。
CREATE TABLE statement. The high subpartitioning value specified in the statement.
1 for the first subpartition; 2 for the second subpartition, etc.
pg_class.reltuples Same as .
pg_class.relpages. Same as pg_class.relpages.
3.79 USER_TABLES
USER_TABLESビューには、現在のユーザーが所有するすべてのテーブルに関する情報を表示します。
if the table is temporary; Y if the table is temporary; if the table is not temporary. N if the table is not temporary.
3.80 USER_TRIGGERS
USER_TRIGGERSビューには、現在のユーザーが所有する表のすべてのトリガーについての情報が表示されます。
Included for compatibility only. Value will always be REFERENCING NEW AS NEW OLD AS OLD .
Status indicates if the trigger is enabled ( VALID ) or disabled ( NOTVALID ). ) or disabled ( ).
3.81 USER_TYPES
USER_TYPESビューには、現在のユーザーが所有するすべてのオブジェクトタイプに関する情報を提供します。
OID
3.82 USER_USERS
USER_USERSビューには、現在のユーザーに関する情報を提供します。
OID
edb_get_role_status( role_id ) function to get the current status of the account. Use the function to get the current status of the account.
If the account status is LOCKED , lock_date displays the date and time the account was locked.
3.83 USER_VIEW_COLUMNS
USER_VIEW_COLUMNSビューは、現在のユーザが所有するビューのすべての列についての情報を提供します。
NUMBER columns. Scale of
Whether or not the column is nullable – possible values are: Y – column is nullable; N – column does not allow null.
3.84 USER_VIEWS
USER_VIEWSビューには、現在のユーザーが所有するすべてのビューについての情報を提供します。
The SELECT statement that defines the view.
3.85 V $ VERSION
V $ VERSIONビューは、製品の互換性に関する情報を提供します。
3.86 PRODUCT_COMPONENT_VERSION
PRODUCT_COMPONENT_VERSIONビューは、製品のバージョンの互換性に関するバージョン情報を提供します。
4 システムカタログテーブル
以下のシステムカタログ表には、データベースオブジェクトの定義が含まれています。システムテーブルのレイアウトは変更される可能性があります。システムテーブルに格納されている情報に依存するアプリケーションを作成する場合は、既存のカタログビューを使用するか、カタログビューを作成してアプリケーションをシステムテーブルの変更から分離することが賢明です。
4.1 デュアル
dualは、Oracleデータベースとの互換性のために提供される単一行、単一列の表です。
4.2 edb_dir
EDB _ ディレクトリテーブルは、 ディレクトリを 作成するコマンドで作成したディレクトリを指し、各エイリアスの1つの行が含ま。ディレクトリは、ユーザーがホストファイルシステムに限定してアクセスできるようにするパス名のエイリアスです。
ディレクトリを使用して、ファイルシステム内の特定のディレクトリツリーにユーザを囲むことができます。例えば、 UTL _ FILEパッケージは、ホストファイルシステム内のファイルやディレクトリを読み書きするためのユーザを許可する機能を提供していますが、唯一のデータベース管理者は、 ディレクトリを 作成するコマンドを使用してへのアクセスを許可されたパスにアクセスすることができます。
oid
4.3 edb_password_history
EDB _ password_historyテーブルには、各パスワード変更のために1行が含まれます。この表は、クラスタ内のすべてのデータベースで共有されます。
oid
4.4 edb_policy
EDB _ ポリシーテーブルは、ポリシーごとに1つの行が含ま。
oid
oid
oid
4.5 edb_profile
EDB _ プロファイルテーブルは、使用可能なプロファイルに関する情報を格納します。 edb _ profilesは、クラスタ内のすべてのデータベースで共有されます。
oid
oid
oid
oid
4.6 edb_variable
EDB _ 変数テーブルには、各パッケージレベルの変数(パッケージ内で宣言された各変数)のための1つの行が含ま。
oid
oid
4.7 pg_synonym
PG _ 同義語テーブルは同義語コマンドCREATEまたはCREATE PUBLIC SYNONYMコマンドで作成された各同義語のための1つの行を含んでいます。
oid
synowner Replaces . Contains the OID of the row where the synonym is stored . Contains the OID of the pg_namespace row where the synonym is stored . Contains the OID of the pg_namespace . Contains the OID of the
oid
4.8 product_component_version
製品 _ 構成要素 _ バージョンテーブルは、特徴の互換性についての情報を含みます。アプリケーションはインストール時または実行時にこのテーブルを照会して、このデプロイメントでアプリケーションで使用される機能が使用可能であることを確認できます。
5 謝辞
PostgreSQLの8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、および11文書は、PostgreSQLに共通するこのガイドの部分のためのベースラインを提供し、ここに認められています。
この EnterpriseDBソフトウェアおよびドキュメンテーションの一部は 、以下の著作物を使用することができ、その使用はここで認められます。
PostgreSQLのドキュメント、データベース管理システム
PostgreSQLはPostgreSQLグローバル開発グループ著作権©1996-2018に基づき、以下のカリフォルニア大学ライセンスの条件に基づいて配布されています。
Postgres95は カリフォルニア大学リージェントの著作権©1994-5。
上記の著作権表示と本項および次の2つの段落がすべてのコピーに記載されていれば、無償で、かつ書面による合意なしに、本ソフトウェアおよびその文書を使用、複製、改変、および配布することが許可されます。
いかなる場合においても、カリフォルニア大学は、カリフォルニア大学が実施していたとしても、ソフトウェアおよびその文書の使用に起因する損害を含む、直接的、間接的、偶発的、派生的、派生的損害に対する賠償責任を負わないものとしますそのような損害の可能性を知らされた。
カリフォルニア州立大学は、商品性および特定目的への適合性の黙示的な保証を含む(ただしこれらに限定されない)いかなる保証も特に断ります。本契約に基づいて提供される本ソフトウェアは、現状のままであり、カリフォルニア州立大学は、保守、サポート、更新、拡張または改変を提供する義務を負いません。