오라클 내장함수에서 테이블명을 변수로 사용하기..?
sizers 수험생

답변 채택시 : 0코아

답변 4 추천 0 조회 7563 2004.02.19
안녕하세요 수고가 많으십니다. 다름이 아니오라... 코드를 YYMMDD0001 형식의 char(10)문자열로 해달라는 요구를 받아서 프로그래밍에서 해당 필드의 맥스값을 구해서 다시 insert하는 방식이 구차한거 같아 함수를 만들려고 합니다. 문제는 위와같은 형태의 코드를 여러 테이블에서 사용하여 함수에서는 테이블, 칼럼명을 동적으로 입력받아서 해당 코드칼럼의 새로운 코드값을 구하려고 합니다. 그러나 오라클함수에 관련된 어떠한 서적, 글을 봐도 변수로 테이블 명을 받아서 그 변수에 해당하는 테이블에서 데이타를 가져오는 내용이 없습니다. 제가 사용하려고 하는 함수는 SQL> create or replace function F_GET_CODE0 2 (v_table in varchar2,v_column in varchar2,v_len in int) RETURN varchar2 3 is 4 v_ncd varchar2(20):='no result'; 5 begin 6 select 7 decode( 8 max(v_column),null,TO_CHAR(sysdate, 'YYMMDD') || LPAD('1', v_len-6,'0'), 9 TO_CHAR(sysdate, 'YYMMDD') || LPAD(substr(max(v_column),7,v_len-6)+1, v_len-6, '0') 10 ) newcode 11 into v_ncd 12 from v_table 13 where v_column like TO_CHAR(sysdate, 'YYMMDD') ||'%'; 14 return(v_ncd); 15 end; 16 / 에러메시지는 SQL> show error Errors for FUNCTION F_GET_CODE0: LINE/COL ERROR -------- ----------------------------------------------------------------- 6/2 PL/SQL: SQL Statement ignored 12/7 PLS-00201: 'V_TABLE' 식별자가 정의되어야 합니다 입니다. 이문제에 대해서 해결해주셨으면 감사하겠습니다. 그럼 좋은 하루 되십시여~ 꾸벅~
댓글 (0)
목록 답변등록
오라클 내장함수에서 테이블명을 변수로 사용하기..?
sizers 2004.02.20
감사합니다. 덕분에 또 새로운 것을 알게 됬네요..
댓글 (0)
오라클 내장함수에서 테이블명을 변수로 사용하기..?
disclose 2004.02.19
ORACLE Package "DBMS_SQL "를 참조 하시면 될 것입니다.
댓글 (0)
오라클 내장함수에서 테이블명을 변수로 사용하기..?
sizers 2004.02.20
좋은 답변 감사드립니다. 아직 코딩은 않해봤지만 벌써 개발을 끝낸듯한 기분이네요.. >11902번 글에서 조웅희 님께서 작성한 글입니다. > >저도 그 글에 답변을 달려고 글을 올리려고 보니까 조웅희 님하고 답변이 와전히 같아서 올리지 않았었는데. 아래의 글을 참고해 보시면 해결 방안이 쉽게 보일거 같습니다. > >dbms_sql을 쓰는 것 보다는 좀더 쉽게 해결할 수 있을 것입니다. > >CREATE OR REPLACE PROCEDURE proc_test >IS >TYPE t_table IS TABLE of VARCHAR2(20) INDEX BY BINARY_INTEGER; >v_table t_table; >v_temp_value NUMBER; >v_sql VARCHAR2(1000); > >BEGIN >v_table(1) := 'a'; >v_table(2) := 'b'; >v_table(3) := 'c'; >v_table(4) := 'd'; > >FOR r IN 1..v_table.count LOOP > >v_sql := 'SELECT NVL(MAX(seq), 0) '|| >'FROM '||v_table(r)||'_table' ; > >EXECUTE IMMEDIATE v_sql INTO v_temp_value; > >dbms_output.put_line(to_char(v_temp_value)); > >END LOOP; >END;
댓글 (0)
오라클 내장함수에서 테이블명을 변수로 사용하기..?
autraskim 2004.02.20
11902번 글에서 조웅희 님께서 작성한 글입니다. 저도 그 글에 답변을 달려고 글을 올리려고 보니까 조웅희 님하고 답변이 와전히 같아서 올리지 않았었는데. 아래의 글을 참고해 보시면 해결 방안이 쉽게 보일거 같습니다. dbms_sql을 쓰는 것 보다는 좀더 쉽게 해결할 수 있을 것입니다. CREATE OR REPLACE PROCEDURE proc_test IS TYPE t_table IS TABLE of VARCHAR2(20) INDEX BY BINARY_INTEGER; v_table t_table; v_temp_value NUMBER; v_sql VARCHAR2(1000); BEGIN v_table(1) := 'a'; v_table(2) := 'b'; v_table(3) := 'c'; v_table(4) := 'd'; FOR r IN 1..v_table.count LOOP v_sql := 'SELECT NVL(MAX(seq), 0) '|| 'FROM '||v_table(r)||'_table' ; EXECUTE IMMEDIATE v_sql INTO v_temp_value; dbms_output.put_line(to_char(v_temp_value)); END LOOP; END;
댓글 (0)