CANONICALIZE 过程 - 使字符串规范化
CANONICALIZE 过程对输入字符串执行各种操作。
CANONICALIZE 过程对输入字符串执行下列操作:
- 如果该字符串未加双引号,那么会验证它是否使用合法标识的字符。如果未使用合法标识的字符,那么会抛出异常。如果字符串加了双引号,那么允许使用所有字符。
- 如果字符串未加双引号并且未包含句点,那么会将所有字母字符转换为大写并消除前导空格和结尾空格。
- 如果字符串加了双引号并且未包含句点,那么会除去双引号。
- 如果字符串包含句点并且字符串的各个部分都未加双引号,那么会将字符串的每个部分转换为大写并将每个部分括在双引号中。
- 如果字符串包含句点并且字符串的某些部分加了双引号,那么返回时加了双引号的部分会保持不变(包括双引号),未加双引号的部分会转换为大写并括在双引号中。
语法
参数
- name
- 类型为 VARCHAR(1024) 的输入自变量,用于指定要规范化的字符串。
- canon_name
- 类型为 VARCHAR(1024) 的输出自变量,用于返回规范化字符串。
- canon_len
- 类型为 INTEGER 的输入自变量,用于指定 name 中从第一个字符开始规范化的字节数。
权限
对 DBMS_UTILITY 模块的 EXECUTE 特权。
示例
示例 1:以下过程对其输入参数应用 CANONICALIZE 过程并显示结果。
SET SERVEROUTPUT ON@
CREATE OR REPLACE PROCEDURE canonicalize(
IN p_name VARCHAR(4096),
IN p_length INTEGER DEFAULT 30)
BEGIN
DECLARE v_canon VARCHAR(100);
CALL DBMS_UTILITY.CANONICALIZE(p_name, v_canon, p_length);
CALL DBMS_OUTPUT.PUT_LINE('Canonicalized name ==>' || v_canon || '<==');
CALL DBMS_OUTPUT.PUT_LINE('Length: ' || LENGTH(v_canon));
END@
CALL canonicalize('Identifier')@
CALL canonicalize('"Identifier"')@
CALL canonicalize('"_+142%"')@
CALL canonicalize('abc.def.ghi')@
CALL canonicalize('"abc.def.ghi"')@
CALL canonicalize('"abc".def."ghi"')@
CALL canonicalize('"abc.def".ghi')@此示例生成以下输出:
SET SERVEROUTPUT ON
DB20000I The SET SERVEROUTPUT command completed successfully.
CREATE OR REPLACE PROCEDURE canonicalize(
IN p_name VARCHAR(4096),
IN p_length INTEGER DEFAULT 30)
BEGIN
DECLARE v_canon VARCHAR(100);
CALL DBMS_UTILITY.CANONICALIZE(p_name, v_canon, p_length);
CALL DBMS_OUTPUT.PUT_LINE('Canonicalized name ==>' || v_canon || '<==');
CALL DBMS_OUTPUT.PUT_LINE('Length: ' || LENGTH(v_canon));
END
DB20000I The SQL command completed successfully.
CALL canonicalize('Identifier')
Return Status = 0
Canonicalized name ==>IDENTIFIER<==
Length: 10
CALL canonicalize('"Identifier"')
Return Status = 0
Canonicalized name ==>Identifier<==
Length: 10
CALL canonicalize('"_+142%"')
Return Status = 0
Canonicalized name ==>_+142%<==
Length: 6
CALL canonicalize('abc.def.ghi')
Return Status = 0
Canonicalized name ==>"ABC"."DEF"."GHI"<==
Length: 17
CALL canonicalize('"abc.def.ghi"')
Return Status = 0
Canonicalized name ==>abc.def.ghi<==
Length: 11
CALL canonicalize('"abc".def."ghi"')
Return Status = 0
Canonicalized name ==>"abc"."DEF"."ghi"<==
Length: 17
CALL canonicalize('"abc.def".ghi')
Return Status = 0
Canonicalized name ==>"abc.def"."GHI"<==
Length: 15
