2014年7月11日 星期五

Oracle 動態塞值到 IN Clause

解決下方情況

SELECT * FROM TableName
WHERE TUSER IN ('A','B','C')
--'A','B','C'為動態產生

1)新增類型

create or replace 
type ttype is table of varchar2(255)

2)新增函數

create or replace 
Function FindRLP RETURN ttype
 IS
   rtn ttype := ttype();
   idx integer := 0;
 BEGIN
  for r in (SELECT TUSER FROM UR_UIR WHERE RLNO='G05')
   loop
      rtn.extend;
      idx := idx+1;
      rtn(idx) := r.TUSER;
   end loop;
   return rtn;
 END;

使用方式

SELECT * FROM TableName
WHERE TUSER IN (SELECT * FROM TABLE(FindRLP))

沒有留言:

張貼留言