NAME_TOKENIZE プロシージャー - 特定の名前をその構成要素のパーツに構文解析する
NAME_TOKENIZE プロシージャーは、名前をその構成要素のパーツに構文解析します。 二重引用符がない名前は大文字に変換され、二重引用符がある名前からは二重引用符が除去されます。
構文
パラメーター
- name
- 名前が入ったストリングを次の形式で指定する、タイプ VARCHAR(1024) の入力引数。
a[.b[.c]][@dblink ] - a
- 左端の構成要素を返す、タイプ VARCHAR(128) の出力引数。
- b
- 2 番目の構成要素がある場合にはそれを返す、タイプ VARCHAR(128) の出力引数。
- c
- 3 番目の構成要素がある場合にはそれを返す、タイプ VARCHAR(128) の出力引数。
- dblink
- データベース・リンク名を返す、タイプ VARCHAR(32672) の出力引数。
- nextpos
- name 内で構文解析された最後の文字の位置を指定する、タイプ INTEGER の出力引数。
許可
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
