Oacle group in 바 인 딩 변수 사용

2120 단어 OaclesqlC++cC#
1.SQL> create or replace type vartabletype as table of varchar2(1000);  2  /
Type created.
2.SQL> create or replace function str2varList( p_string in varchar2 ) return VarTableType  2  as  3  v_str long default p_string || ',';  4  v_n varchar2(2000);  5  v_data VarTableType := VarTableType();  6  begin  7     loop  8        v_n :=instr( v_str, ',' );  9      exit when (nvl(v_n,0) = 0); 10      v_data.extend; 11     v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1))); 12      v_str := substr( v_str, v_n+1 ); 13     end loop; 14     return v_data; 15  end; 16  /
Function created.위의 함 수 를 실행 한 후 변수 S 로 테스트 합 니 다:SQL>var s varchar 2(100)SQL>exec:s:='a,b,c';
PL/SQL procedure successfully completed.
SQL> print s
S--------------------------------------------------------------------------------a,b,c
SQL> select * from table(str2varList(:s)) a;
COLUMN_VALUE--------------------------------------------------------------------------------abc 
바 인 딩 변 수 를 사용 할 때 IN(select*from table(str2varList(:s)a 를 사용 할 수 있 습 니 다.)
지금 수정 을 해 야 돼 요.1.ARTICLECONTENT 에 있 는 ARTICLEID.  화해시키다
ANALYZE TABLE ARTICLECONTENT  COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;
create or replace function str2varList( p_string in varchar2 ) return VarTableType  2  as  3  v_str long default p_string || ',';  4  v_n varchar2(2000);  5  v_data VarTableType := VarTableType();  6  begin  7     loop  8        v_n :=instr( v_str, ',' );  9      exit when (nvl(v_n,0) = 0); 10      v_data.extend; 11     v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1))); 12      v_str := substr( v_str, v_n+1 ); 13     end loop; 14     return v_data; 15  end;
프로그램 에서 사용 하 는 방법:
select v.articleid, v.zsturl, v.content, v.groupid, v.arr_gcid, v.path from v_csteel_news v where v.path in(select * from table(str2varList('xyzx,fdc,jx,sh,zc,dl,jd,dj,jcjs,xysj,xyzx,gjbz,jj,byq,qc,xyzs') )a) and v.rootgroupid =395 and rownum<=5 

 
 실제 테스트 에 따 르 면 속 도 는 많이 올 랐 다!

좋은 웹페이지 즐겨찾기