NAME_TOKENIZE 过程 - 将给定名称解析为若干组成部分
NAME_TOKENIZE 过程将名称解析为若干部分。没有双引号的名称将转换为大写,并且会除去这些名称所带的双引号。
语法
参数
- name
- 类型为 VARCHAR(1024) 的输入自变量,用于指定包含以下格式的名称的字符串:
a[.b[.c]][@dblink ] - a
- 类型为 VARCHAR(128) 的输出自变量,用于返回最左边的部分。
- b
- 类型为 VARCHAR(128) 的输出自变量,用于返回第二个部分(如果存在)。
- c
- 类型为 VARCHAR(128) 的输出自变量,用于返回第三个部分(如果存在)。
- dblink
- 类型为 VARCHAR(32672) 的输出自变量,用于返回数据库链接名称。
- nextpos
- 类型为 INTEGER 的输出自变量,用于指定 name 中解析的最后一个字符的位置。
权限
对 DBMS_UTILITY 模块的 EXECUTE 特权。
示例
示例 1:以下存储过程用于显示 NAME_TOKENIZE 过程对各种名称返回的值。
SET SERVEROUTPUT ON@
CREATE OR REPLACE PROCEDURE name_tokenize(
IN p_name VARCHAR(100) )
BEGIN
DECLARE v_a VARCHAR(30);
DECLARE v_b VARCHAR(30);
DECLARE v_c VARCHAR(30);
DECLARE v_dblink VARCHAR(30);
DECLARE v_nextpos INTEGER;
CALL DBMS_UTILITY.NAME_TOKENIZE(p_name, v_a, v_b, v_c, v_dblink, v_nextpos);
CALL DBMS_OUTPUT.PUT_LINE('name : ' || p_name);
IF v_a IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('a : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('a : ' || v_a);
END IF;
IF v_b IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('b : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('b : ' || v_b);
END IF;
IF v_c IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('c : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('c : ' || v_c);
END IF;
IF v_dblink IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('dblink : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('dblink : ' || v_dblink);
END IF;
IF v_nextpos IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('nextpos: NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('nextpos: ' || v_nextpos);
END IF;
END@
CALL name_tokenize( 'b' )@
CALL name_tokenize( 'a.b' )@
CALL name_tokenize( '"a".b.c' )@
CALL name_tokenize( 'a.b.c@d' )@
CALL name_tokenize( 'a.b."c"@"d"' )@此示例生成以下输出:
SET SERVEROUTPUT ON
DB20000I The SET SERVEROUTPUT command completed successfully.
CREATE OR REPLACE PROCEDURE name_tokenize(
IN p_name VARCHAR(100) )
BEGIN
DECLARE v_a VARCHAR(30);
DECLARE v_b VARCHAR(30);
DECLARE v_c VARCHAR(30);
DECLARE v_dblink VARCHAR(30);
DECLARE v_nextpos INTEGER;
CALL DBMS_UTILITY.NAME_TOKENIZE(p_name, v_a, v_b, v_c, v_dblink, v_nextpos);
CALL DBMS_OUTPUT.PUT_LINE('name : ' || p_name);
IF v_a IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('a : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('a : ' || v_a);
END IF;
IF v_b IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('b : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('b : ' || v_b);
END IF;
IF v_c IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('c : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('c : ' || v_c);
END IF;
IF v_dblink IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('dblink : NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('dblink : ' || v_dblink);
END IF;
IF v_nextpos IS NULL THEN
CALL DBMS_OUTPUT.PUT_LINE('nextpos: NULL');
ELSE
CALL DBMS_OUTPUT.PUT_LINE('nextpos: ' || v_nextpos);
END IF;
END
DB20000I The SQL command completed successfully.
CALL name_tokenize( 'b' )
Return Status = 0
name : b
a : B
b : NULL
c : NULL
dblink : NULL
nextpos: 1
CALL name_tokenize( 'a.b' )
Return Status = 0
name : a.b
a : A
b : B
c : NULL
dblink : NULL
nextpos: 3
CALL name_tokenize( '"a".b.c' )
Return Status = 0
name : "a".b.c
a : a
b : B
c : C
dblink : NULL
nextpos: 7
CALL name_tokenize( 'a.b.c@d' )
Return Status = 0
name : a.b.c@d
a : A
b : B
c : C
dblink : D
nextpos: 7
CALL name_tokenize( 'a.b."c"@"d"' )
Return Status = 0
name : a.b."c"@"d"
a : A
b : B
c : c
dblink : d
nextpos: 11
