SQL> create or replace function lookup( l_input number ) return varchar2
2 deterministic
3 as
4 l_output LookupTable.value%TYPE;
5 begin
6 select value into l_output from LookupTable where key = l_input;
7 return l_output;
8 end;
9 /
함수가 생성되었습니다.
SQL> delete from LookupTable;
1 행이 삭제되었습니다.
SQL> insert into LookupTable values( 1, 'YAMAHA' );
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> create table t
2 as
3 select 1 no from dual;
테이블이 생성되었습니다.
SQL> select no, lookup(no) value from t;
NO VALUE
---------- -----------
1 YAMAHA
SQL> create index t_idx on t( lookup(no) );
인덱스가 생성되었습니다.
SQL> select no, lookup(no) value, lookup(1) value2 from t
2 where lookup(no) = 'YAMAHA';
NO VALUE VALUE2
---------- ----------- -------------
1 YAMAHA YAMAHA
SQL> update LookupTable set value = 'YAMAHA2' where key = 1;
1 행이 갱신되었습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select no, lookup(no) value, lookup(1) value2 from t
2 where lookup(no) = 'YAMAHA';
NO VALUE VALUE2
------------ --------- ------------
1 YAMAHA YAMAHA2
SQL> alter index t_idx rebuild
2 /
인덱스가 변경되었습니다.
SQL> select no, looKup(no) value, lookup(1) value2 from t
2 where lookup(no) = 'YAMAHA'
SQL> /
선택된 레코드가 없습니다.
SQL> select no, lookup(no) value, lookup(1) value2 from t
2 where lookup(no) = 'YAMAHA2'
SQL> /
NO VALUE VALUE2
---------- --------- --------------------------------------------
1 YAMAHA2 YAMAHA2