DBMS_ASSERTパッケージは、入力値のプロパティを検証するためのインタフェースを提供します。
関連項目: PL/SQLでのSQLインジェクションの回避の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
この章では、次の項目について説明します。
ファンクションでアサートされたプロパティを判断する条件が満たされていない場合は、値のエラーが発生します。条件が満たされた場合は、戻り値として入力値が戻されます。通常、値は変更されずに戻されますが、一部のファンクションでは変更された値が戻されます。
表25-1 DBMS_ASSERTパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
文字列リテラルを引用符で囲みます。 |
|
名前を二重引用符で囲みます。 |
|
チェックなしで値を戻します。 |
|
入力文字列が修飾SQL名であることを検証します。 |
|
入力文字列が既存のスキーマ名であることを検証します。 |
|
入力文字列が単純SQL名であることを検証します。 |
|
入力パラメータ文字列が既存のSQLオブジェクトの修飾SQL識別子であることを検証します。 |
このファンクションは、文字列リテラルを引用符で囲みます。
構文
DBMS_ASSERT.ENQUOTE_LITERAL ( str VARCHAR2) RETURN VARCHAR2;
パラメータ
使用上の注意
文字列リテラルを開始一重引用符と終了一重引用符で囲みます。
先行および後続文字を除く、すべての一重引用符が対を成していることを検証します。
このファンクションは、名前を二重引用符で囲みます。
構文
DBMS_ASSERT.ENQUOTE_NAME ( str VARCHAR2, capitalize BOOLEAN DEFAULT TRUE) RETURN VARCHAR2;
パラメータ
表25-3 ENQUOTE_NAMEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
引用符で囲む文字列。 |
|
|
このファンクションは、チェックなしで値を戻します。
構文
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;
パラメータ
このファンクションは、入力文字列が修飾SQL名であることを検証します。
構文
DBMS_ASSERT.QUALIFIED_SQL_NAME ( str VARCHAR2 CHARACTER SET ANY_CS) RETURN VARCHAR2 CHARACTER SET str%CHARSET;
パラメータ
例外
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>]
このファンクションは、入力文字列が既存のスキーマ名であることを検証します。
構文
DBMS_ASSERT.SCHEMA_NAME ( str VARCHAR2 CHARACTER SET ANY_CS) RETURN VARCHAR2 CHARACTER SET str%CHARSET;
パラメータ
例外
ORA44001
: スキーマが無効です
使用上の注意
定義上は、スキーマ名は単純SQL名である必要はありません。たとえば、"FIRST
LAST
"は有効なスキーマ名です。したがって、スキーマ名の出力は、SQLテキストに連結する前に引用符で囲む必要があります。
このファンクションは、入力文字列が単純SQL名であることを検証します。
構文
DBMS_ASSERT.SIMPLE_SQL_NAME ( str VARCHAR2 CHARACTER SET ANY_CS) RETURN VARCHAR2 CHARACTER SET str%CHARSET;
パラメータ
例外
ORA44003
: SQL名が無効です
使用上の注意
入力値は次の条件を満たす必要があります。
名前は英字で開始する必要があります。 2文字目以降は、英数字、_、$および#を使用できます。
引用符付きのSQL名も使用できます。
引用符付きの名前は、二重引用符で囲む必要があります。
引用符付きの名前は、引用符の間に任意の文字を使用できます。
名前内の引用符は、引用文字を2つ連続して表記します。たとえば、"a name with "" inside"は有効な引用符付きの名前です。
入力パラメータには、先頭または末尾(あるいはその両方)に任意の数の空白文字を含むことができます。
名前の長さはチェックされません。
このファンクションは、入力パラメータ文字列が既存のSQLオブジェクトの修飾SQL識別子であることを検証します。
構文
DBMS_ASSERT.SQL_OBJECT_NAME ( str VARCHAR2 CHARACTER SET ANY_CS) RETURN VARCHAR2 CHARACTER SET str%CHARSET;
パラメータ
例外
ORA44002
: オブジェクト名が無効です