오라클에 테이블 정보등을 검색하고 거기 테이블의 데이터 개수를 구하라는 미션이 떨어졌습니다.
갑님들이 하는게 다 그렇지 뭐...
그리하여 아래와 같이 함수를 만들었습니다.
CREATE OR REPLACE FUNCTION FN_GET_ROW_CNT(strTABLE_NAME IN VARCHAR2) RETURN VARCHAR2
IS
ROW_CNT VARCHAR2(300);
v_sql VARCHAR2(1000);
BEGIN
v_sql := 'SELECT COUNT(*) FROM '||strTABLE_NAME;
EXECUTE IMMEDIATE v_sql INTO ROW_CNT;
RETURN ROW_CNT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN(' ');
WHEN OTHERS THEN
RETURN('ERROR');
END FN_GET_ROW_CNT;
상단함수에서 생각해 보아야할 내용은 v_sql 이라고 쿼리를 변수로 따로 담은 부분입니다.
오라클에서는 테이블명은입력받은 변수로 바로 사용을 못합니다.
그래서 위와 같이 변수로 입력받은 값에 쿼리 전체 문구를 만들어서 하나의 변수에 다시 넣어주어야 합니다.
그러고 나서
SELECT
A.TABLE_NAME,
(SELECT B.COMMENTS FROM USER_TAB_COMMENTS B WHERE A.TABLE_NAME = B.TABLE_NAME ) AS TABLE_COMMENTS,
'' AS TABLE_DESC,
(SELECT COUNT(C.COLUMN_NAME) FROM USER_TAB_COLUMNS C WHERE A.TABLE_NAME = C.TABLE_NAME ) AS COL_CNT,
FN_GET_ROW_CNT(TABLE_NAME) AS ROW_CNT
FROM USER_TABLES A
위에 처럼 빨간색으로 함수를 호출하여 쓰면... 변수로 넘긴 테이블명을 이용하여 전체 갯수를 검색해줍니다.
댓글