最もクリーンな解決策は、PL/SQL関数を使用してerrocodesテーブルを「正規化」することだと思います。そうすれば、現在の(壊れた)テーブルデザインを維持しながら、適切に正規化されているかのようにコンテンツにアクセスできます。
create type error_code_type as object (id integer, code varchar(2))
/
create or replace type error_table as table of error_code_type
/
create or replace function unnest_errors
return error_table pipelined
is
codes_l integer;
i integer;
one_row error_code_type := error_code_type(null, null);
begin
for err_rec in (select id, errorcodes from errors) loop
codes_l := length(err_rec.errorcodes);
i := 1;
while i < codes_l loop
one_row.id := err_rec.id;
one_row.code := substr(err_rec.errorcodes, i, 2);
pipe row (one_row);
i := i + 2;
end loop;
end loop;
end;
/
この関数を使用すると、次のようなことができます。
select er.id, er.code, el.description
from table(unnest_errors) er
join errorlookup el on el.codes = er.code;
関数に基づいてビューを作成し、ステートメントを少し読みやすくすることもできます。
create or replace view normalized_errorcodes
as
select *
from table(unnest_errors);
次に、実際のステートメントでビューを参照するだけです。
(これは11.2でテストしましたが、10.xでも機能するはずです)