본문 바로가기

데이터베이스/Oracle

[Oracle] 테이블명으로 Select쿼리문 자동생성

테이블명 가지고 crud쿼리문을 자동으로 생성해주는 툴 같은게 있는지 찾아보다가.. 마땅치않아서
잊혀져가는 oracle stored procedure 사용법 상기시킬겸 select 쿼리문만 자동으로 생성되도록 작성해봤다.
예제는 입력파라미터로 테이블영문명을 받고, 결과로 dbms콘솔에 select쿼리문이 출력된다.

create or replace procedure generateSELECT 
( pTableName IN ALL_TAB_COMMENTS.TABLE_NAME%TYPE) 
is 
-- 로컬변수 선언 
allTabColumns ALL_TAB_COLUMNS%rowtype; 
allColComments ALL_COL_COMMENTS%rowtype;  
vcnt number; 
vstr varchar2(500); 

-- 커서 선언 
cursor columnCursor 
is 
SELECT A.COLUMN_NAME, A.DATA_TYPE, A.DATA_DEFAULT 
    , B.COMMENTS 
FROM ALL_TAB_COLUMNS A 
    INNER JOIN ALL_COL_COMMENTS B 
    ON A.TABLE_NAME = B.TABLE_NAME 
    AND A.COLUMN_NAME = B.COLUMN_NAME 
WHERE A.TABLE_NAME = pTableName 
ORDER BY A.COLUMN_ID ASC; 

   begin 
   -- 수행로직 
    dbms_output.put_line('테스트 프로시져 입니다.'); 
    vcnt := 0; 
     
    -- 커서오픈 
    open columnCursor; 
     
    -- 루프시작 
    loop 
        fetch columnCursor into allTabColumns.COLUMN_NAME, allTabColumns.DATA_TYPE, allTabColumns.DATA_DEFAULT, allColComments.COMMENTS; 
        exit when columnCursor%NOTFOUND; 
    if vcnt = 0  then 
        vstr := 'SELECT '||allTabColumns.COLUMN_NAME || '               /* ' ||allTabColumns.COLUMN_NAME ||' */'; 
    else  
        vstr := '      ,'||allTabColumns.COLUMN_NAME || '               /* ' ||allTabColumns.COLUMN_NAME ||' */'; 
    -- 첫번째에만 , 안붙이고 이외에는 ,를 앞에 붙여준다. 
    -- LOOP 다돌면 FROM 테이블명으로 해준다. TABLE명은 INPUT으로 받아온다. 
    end if; 
    DBMS_OUTPUT.put_line(vstr); 
    vcnt := vcnt + 1; 
    end loop; 
    DBMS_OUTPUT.put_line('FROM  '||pTableName); 
    -- 커서 닫아줌. 
    close columnCursor; 
 end ; 
/


execute generateSELECT('TBL_BOARD');  

 

- DMBS 출력 결과(sql developer)

'데이터베이스 > Oracle' 카테고리의 다른 글

[오라클] EXISTS 활용 예제  (0) 2019.05.10
오라클 계정생성  (0) 2019.05.08
Java 코드, Oracle stored procedure의 성능 비교  (1) 2016.05.24
Oracle cursor  (0) 2016.05.12
Oracle Stored Procedure  (0) 2016.05.12