何らかの理由で、テーブルに文字のコレクションである特定のフィールドがあります。異なる長さの文字。例:
create or replace type t_charray_1 as varray(5) of char(1);
create or replace type t_charray_2 as varray(5) of char(2);
create or replace type t_charray_3 as varray(5) of char(3);
create or replace type t_charray_4 as varray(5) of char(4);
create table mytable (
field1 number,
field2 t_charray_1,
field3 t_charray_3,
また、レコードの (固定長) 文字列表現を返す関数がありますmytable
。この関数は、特定のコレクション型フィールドの文字列表現を返す他の関数を呼び出します。例:
function to_chr(
p_array in t_charray_1,
pad_length in number,
p_list_length in number
) return char as
v_res varchar2(255) := '';
begin
for i in 1 .. p_list_length loop
if p_array is not null and p_array.exists(i) and p_array(i) is not null then
v_res := v_res || rpad(p_array(i), pad_length, ' ');
else
v_res := v_res || rpad(' ', pad_length, ' ');
end if;
end loop;
return v_res;
end to_chr;
------------------------------------------------------------------------------
function to_chr(
p_array in t_charray_2,
pad_length in number,
p_list_length in number
) return char as
v_res varchar2(255) := '';
begin
for i in 1 .. p_list_length loop
if p_array is not null and p_array.exists(i) and p_array(i) is not null then
v_res := v_res || rpad(p_array(i), pad_length, ' ');
else
v_res := v_res || rpad(' ', pad_length, ' ');
end if;
end loop;
return v_res;
end to_chr;
これらの関数は相互にオーバーロードされたバージョンであることに注意してください。署名の唯一の違いは、p_array
引数の型です。
また、これらの関数の本体は同一であることに注意してください。
動機
重複コードをなくしたい。私の選択は何ですか?
編集sys.anydata について聞いたことがありますが、使用したことはありません。それは解決策になるでしょうか?