Table 정보 조회하기

select * from all_tables
- 모든 테이블 조회
select * from user_tables
- 로그인된 user의 테이블 조회
(= select * from tab)


Column 정보 조회하기

select * from user_tab_columns



이거 찾아서 한참 헤맸다는.. 쿨럭... -_-;;


예를 들어서..

여러테이블에 특정 필드의 값을 수정해야 하는 프로시져를 작성한다면..

다음과 같이 작성할수 있지 않을까..

CREATE OR REPLACE Procedure sp_field_change
(
R_TEXT OUT VARCHAR2
,V_F_1 IN VARCHAR2 --변경대상 값
,V_T_2 IN VARCHAR2 --변경할 값
) IS
V_SQL VARCHAR2(1000);
T_RET VARCHAR2(5000);

begin

DECLARE
CURSOR TAB_INFO IS
SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE
FROM USER_TAB_COLUMNS A, TAB B
WHERE A.TABLE_NAME = B.TNAME
AND B.TABTYPE = 'TABLE';
BEGIN

T_RET := '';

FOR TAB_INFO_VAL IN TAB_INFO
LOOP
IF TAB_INFO_VAL.DATA_TYPE = 'VARCHAR2' THEN
-- 변경 대상 값과 데이터 타입이 같은것만 체크
V_SQL := 'UPDATE ' || TAB_INFO_VAL.TABLE_NAME || ' SET ' || TAB_INFO_VAL.COLUMN_NAME || ' = ''' || V_T_2 || '''';
V_SQL := V_SQL || ' WHERE ' || TAB_INFO_VAL.COLUMN_NAME || ' = ''' || V_F_1 || '''';

EXECUTE IMMEDIATE V_SQL;
IF SQL%FOUND THEN
T_RET := T_RET || '_' || V_SQL;
END IF;

END IF;
END LOOP;
END;
IF T_RET = '' THEN
R_TEXT := V_F_1;
ELSE
R_TEXT := T_RET;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
R_TEXT := 'ERROR => ' || SQLERRM;
end sp_field_change;


물론 잘짜진 건지는 모르겠다.

제대로 동작하니 뭐.. ㅋㅋㅋ

어짜피 프로그램에 쓸건 아니구 갠적으로 업무처리 할때만 쓸꺼니깐..

쩝..

+ Recent posts