DBMS_ASSERT內置包用于對輸入值的屬性進行驗證。
DBMS_ASSERT子程序總覽
子程序 | 說明 |
ENQUOTE_LITERAL Function | 用單引號引用一個字符串字面量。 |
ENQUOTE_NAME Function | 用雙引號引用字符串,并檢查其是否為合法的SQL標識符。 |
NOOP Function | 不做任何檢查,直接返回值。 |
QUALIFIED_SQL_NANE Function | 驗證輸入的字符串是否是一個合法的SQL名稱。 |
SCHEMA_NAME Function | 驗證輸入的字符串是否是一個現有的模式名稱。 |
SIMPLE_SQL_NAME Function | 驗證輸入的字符串是否是一個簡單的SQL名稱。 |
SQL_OBJECT_NAME Function | 驗證輸入的字符串是否是一個現有的SQL對象的合法名稱。 |
ENQUOTE_LITERAL
該函數用于在字符串字面量的開頭和結尾添加單引號。
語法
DBMS_ASSERT.ENQUOTE_LITERAL (
str VARCHAR2)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 待引用的字符串。 |
返回值
返回值 | 說明 |
VARCHAR2 | 添加單引號后的結果。 |
示例
該示例展示了如何為字符串添加引號引用。
SELECT DBMS_ASSERT.ENQUOTE_LITERAL('Hello PolarDB') FROM dual;
enquote_literal
-----------------
'Hello PolarDB'
(1 row)
ENQUOTE_NAME
該函數用于在字符串前后添加雙引號引用,并檢查結果是否是一個合法的簡單SQL名稱。
語法
DBMS_ASSERT.ENQUOTE_NAME (
str VARCHAR2,
capitalize BOOLEAN DEFAULT TRUE)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 待引用的字符串。 |
capitalize | (可選參數)默認值為TRUE,將不在雙引號內的str的字母轉為大寫。 |
返回值
返回值 | 說明 |
VARCHAR2 | 添加雙引號后的結果。 |
示例
該示例展示了如何為字符串添加雙引號。
SELECT DBMS_ASSERT.ENQUOTE_NAME('Hello PolarDB') FROM dual;
enquote_name
-----------------
"HELLO POLARDB"
(1 row)
NOOP
該函數不做任何檢查,直接返回值。
語法
DBMS_ASSERT.NOOP (
str VARCHAR2)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 輸入字符串。 |
返回值
返回值 | 說明 |
VARCHAR2 | 返回結果。 |
示例
該示例展示了NOOP函數的調用結果。
SELECT DBMS_ASSERT.NOOP('Hello PolarDB') FROM dual;
noop
---------------
Hello PolarDB
(1 row)
QUALIFIED_SQL_NANE
該函數用于驗證輸入的字符串是否是一個合法的SQL名稱。
語法
DBMS_ASSERT.QUALIFIED_SQL_NAME (
str VARCHAR2)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 輸入字符串。 |
返回值
返回值 | 說明 |
VARCHAR2 | 返回結果。如果輸入字符串不是一個合法的SQL名稱,則拋出異常。 |
示例
該示例展示了如何驗證輸入的字符串是否是一個合法的SQL名稱。
-- a qualified SQL name
SELECT DBMS_ASSERT.QUALIFIED_SQL_NAME('HelloPolarDB') FROM dual;
qualified_sql_name
--------------------
HelloPolarDB
(1 row)
-- invalid name
SELECT DBMS_ASSERT.QUALIFIED_SQL_NAME('Hello PolarDB') FROM dual;
ERROR: invalid qualified SQL name
SCHEMA_NAME
該函數用于驗證輸入的字符串是否是一個現有的模式名稱。
語法
DBMS_ASSERT.SCHEMA_NAME (
str VARCHAR2)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 輸入字符串。 |
返回值
返回值 | 說明 |
VARCHAR2 | 返回結果。如果輸入字符串不是一個現有的模式名稱,則拋出異常。 |
示例
該示例展示了如何驗證輸入的字符串是否是一個現有的模式名稱。
-- an existing schema name.
SELECT DBMS_ASSERT.SCHEMA_NAME('pg_catalog') FROM dual;
schema_name
-------------
pg_catalog
(1 row)
-- a non-existing schema name.
SELECT DBMS_ASSERT.SCHEMA_NAME('pg_catalog__') FROM dual;
ERROR: invalid schema name
SIMPLE_SQL_NAME
該函數用于驗證輸入的字符串是否是一個簡單的SQL名稱。
語法
DBMS_ASSERT.SIMPLE_SQL_NAME (
str VARCHAR2)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 輸入字符串。 |
返回值
返回值 | 說明 |
VARCHAR2 | 返回結果。如果輸入字符串不是一個簡單的SQL名稱,則拋出異常。 |
示例
該示例展示了如何驗證輸入的字符串是否是一個簡單的SQL名稱。
-- a simple SQL name
SELECT DBMS_ASSERT.SIMPLE_SQL_NAME('hellopolar') FROM dual;
simple_sql_name
-----------------
hellopolar
(1 row)
-- not a simple SQL name
SELECT DBMS_ASSERT.SIMPLE_SQL_NAME('hello polar') FROM dual;
ERROR: invalid simple SQL name
SQL_OBJECT_NAME
該函數用于驗證輸入的字符串是否是一個現有的SQL對象的合法名稱。
語法
DBMS_ASSERT.SQL_OBJECT_NAME (
str VARCHAR2)
RETURN VARCHAR2;
參數說明
參數 | 說明 |
str | 輸入字符串。 |
返回值
返回值 | 說明 |
VARCHAR2 | 返回結果。如果輸入字符串不是一個SQL對象的名稱,則拋出異常。 |
示例
該示例展示了如何驗證輸入的字符串是否是一個現有的SQL對象的合法名稱。
CREATE TABLE test(a int);
SELECT DBMS_ASSERT.SQL_OBJECT_NAME('test') from dual;
sql_object_name
-----------------
test
(1 row)
SELECT DBMS_ASSERT.SQL_OBJECT_NAME('notest') from dual;
ERROR: invalid object name
DROP TABLE test_a;