プライマリ・コンテンツに移動
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
12c リリース1 (12.1)
B71281-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

28 DBMS_ASSERT

DBMS_ASSERTパッケージは、入力値のプロパティを検証するためのインタフェースを提供します。


関連項目:

PL/SQLでのSQLインジェクションの回避の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

この章では、次の項目について説明します。

DBMS_ASSERTの使用方法

使用上の注意

ファンクションでアサートされたプロパティを判断する条件が満たされていない場合は、値のエラーが発生します。条件が満たされた場合は、戻り値として入力値が戻されます。通常、値は変更されずに戻されますが、一部のファンクションでは変更された値が戻されます。

DBMS_ASSERTサブプログラムの要約

表28-1 DBMS_APPLICATION_INFOパッケージのサブプログラム

サブプログラム 説明

ENQUOTE_LITERALファンクション


文字列リテラルを引用符で囲みます。

ENQUOTE_NAMEファンクション


名前を二重引用符で囲みます。

NOOPファンクション


チェックなしで値を戻します。

QUALIFIED_SQL_NAMEファンクション


入力文字列が修飾SQL名であることを検証します。

SCHEMA_NAMEファンクション


入力文字列が既存のスキーマ名であることを検証します。

SIMPLE_SQL_NAMEファンクション


入力文字列が単純SQL名であることを検証します。

SQL_OBJECT_NAMEファンクション


入力パラメータ文字列が既存のSQLオブジェクトの修飾SQL識別子であることを検証します。


ENQUOTE_LITERALファンクション

このファンクションは、文字列リテラルを開始一重引用符と終了一重引用符で囲みます。

構文

DBMS_ASSERT.ENQUOTE_LITERAL (
   str            VARCHAR2) 
RETURN VARCHAR2;

パラメータ

表28-2 ENQUOTE_LITERALファンクションのパラメータ

パラメータ 説明

str

引用符で囲む文字列。


使用上の注意

  • 先行および後続文字を除く、すべての一重引用符が対を成していることを検証します。

  • 名前がすでに引用符で囲まれている場合、引用符は追加されません。

ENQUOTE_NAMEファンクション

このファンクションは、指定された文字列を引用符で囲みます。ただし、文字列がすでに引用符で囲まれている場合、引用符は追加されません。その後、引用符で囲まれた文字列は、有効な識別子であるかどうかチェックされます。

データベース・オブジェクトの名前および修飾子の詳細は、『Oracle Database SQL言語リファレンス』ガイドを参照してください。

構文

DBMS_ASSERT.ENQUOTE_NAME (
   str            VARCHAR2, 
   capitalize     BOOLEAN DEFAULT TRUE)
RETURN VARCHAR2;

パラメータ

表28-3 ENQUOTE_NAMEファンクションのパラメータ

パラメータ 説明

str

引用符で囲む文字列。

capitalize

TRUEまたはデフォルトに設定すると、引用符で囲まれていないstrの英字は大文字に変換されます。


使用上の注意

  • 名前がすでに引用符で囲まれている場合、引用符は追加されません。

  • 文字列に含まれる他のすべての二重引用符が、隣り合う二重引用符のペアであることを確認してください。

NOOPファンクション

このファンクションは、チェックなしで値を戻します。

構文

DBMS_ASSERT.NOOP (
   str      VARCHAR2 CHARACTER SET ANY_CS)
 RETURN     VARCHAR2 CHARACTER SET str%CHARSET;
DBMS_ASSERT.NOOP (
   str      CLOB CHARACTER SET ANY_CS)
 RETURN     CLOB CHARACTER SET str%CHARSET;

パラメータ

表28-4 NOOPファンクションのパラメータ

パラメータ 説明

str

入力値。


QUALIFIED_SQL_NAMEファンクション

このファンクションは、入力文字列が修飾SQL名であることを検証します。

構文

DBMS_ASSERT.QUALIFIED_SQL_NAME (
   str      VARCHAR2 CHARACTER SET ANY_CS)
 RETURN     VARCHAR2 CHARACTER SET str%CHARSET;

パラメータ

表28-5 QUALIFIED_SQL_NAMEファンクションのパラメータ

パラメータ 説明

str

入力値。


例外

ORA44004: 修飾SQL名が無効です

使用上の注意

修飾SQL名<qualified name>は、次の文法で表現できます。

   <local qualified name> ::= <simple name> {'.' <simple name>}
   <database link name> ::= <local qualified name> ['@' <connection string>]
   <connection string> ::= <simple name>
   <qualified name> ::= <local qualified name> ['@' <database link name>] 

SCHEMA_NAMEファンクション

このファンクションは、入力文字列が既存のスキーマ名であることを検証します。

構文

DBMS_ASSERT.SCHEMA_NAME (
   str      VARCHAR2 CHARACTER SET ANY_CS)
 RETURN     VARCHAR2 CHARACTER SET str%CHARSET;

パラメータ

表28-6 SCHEMA_NAMEファンクションのパラメータ

パラメータ 説明

str

入力値。


例外

ORA44001: スキーマ名が無効です

使用上の注意

定義上は、スキーマ名は単純SQL名である必要はありません。たとえば、"FIRST LAST"は有効なスキーマ名です。したがって、スキーマ名の出力は、SQLテキストに連結する前に引用符で囲む必要があります。

SIMPLE_SQL_NAMEファンクション

このファンクションは、入力文字列が単純SQL名であることを検証します。

構文

DBMS_ASSERT.SIMPLE_SQL_NAME (
   str      VARCHAR2 CHARACTER SET ANY_CS)
 RETURN     VARCHAR2 CHARACTER SET str%CHARSET;

パラメータ

表28-7 SIMPLE_SQL_NAMEファンクションのパラメータ

パラメータ 説明

str

入力値。


例外

ORA44003: SQL名が無効です

使用上の注意

  • 入力値は次の条件を満たす必要があります。

    • 名前はアルファベット文字で始める必要があります。2文字目以降は、英数字、_、$および#を使用できます。

    • 引用符付きのSQL名も使用できます。

    • 引用符付きの名前は、二重引用符で囲む必要があります。

    • 引用符付きの名前は、引用符の間に任意の文字を使用できます。

    • 名前内の引用符は、引用文字を2つ連続して表記します。たとえば、"a name with "" inside"は有効な引用符付きの名前です。

    • 入力パラメータには、先頭または末尾(あるいはその両方)に任意の数の空白文字を含むことができます。

  • 名前の長さはチェックされません。

SQL_OBJECT_NAMEファンクション

このファンクションは、入力パラメータ文字列が既存のSQLオブジェクトの修飾SQL識別子であることを検証します。

構文

DBMS_ASSERT.SQL_OBJECT_NAME (
   str      VARCHAR2 CHARACTER SET ANY_CS)
 RETURN     VARCHAR2 CHARACTER SET str%CHARSET;

パラメータ

表28-8 SQL_OBJECT_NAMEファンクションのパラメータ

パラメータ 説明

str

入力値。


例外

ORA44002: オブジェクト名が無効です

使用上の注意

シノニムを使用するにはベース・オブジェクトが存在している必要があります。