CANONICALIZE プロシージャー - ストリングの正規化

CANONICALIZE プロシージャーは、入力ストリングに対してさまざまな操作を実行します。

CANONICALIZE プロシージャーは、入力ストリングに対して以下の操作を実行します。
  • ストリングが二重引用符で囲まれていない場合、許可されている ID の文字が使用されていることを検査します。 正当な文字が使用されていない場合、例外がスローされます。 ストリングが二重引用符で囲まれている場合、すべての文字が許可されます。
  • ストリングが二重引用符で囲まれておらず、ピリオドが含まれていない場合、すべての英字が大文字に変換され、前後のスペースが除去されます。
  • ストリングが二重引用符で囲まれていて、ピリオドが含まれていない場合、二重引用符が除去されます。
  • ストリングにピリオドが含まれていて、ストリングのどの部分も二重引用符で囲まれていない場合、ストリングの各部分が大文字に変換され、各部分が二重引用符で囲まれます。
  • ストリングにピリオドが含まれていて、ストリングのいくつかの部分が二重引用符で囲まれている場合、二重引用符の部分は二重引用符を含めて変更されずに返され、二重引用符で囲まれていない部分は大文字で返され、二重引用符で囲まれます。

構文

構文図を読む構文図をスキップするDBMS_UTILITY.CANONICALIZE( name,canon_name,canon_len )

パラメーター

name
正規化されるストリングを指定する、タイプ VARCHAR(1024) の入力引数。
canon_name
正規化されたストリングを返す、タイプ VARCHAR(1024) の出力引数。
canon_len
name の中の先頭文字から何バイトを正規化するかを指定する、INTEGER のタイプの入力引数。

許可

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