본문 바로가기
Database

티베로 패키지 내 프로시저, 함수 오브젝트 이름 조회

by jayden-lee 2019. 4. 22.
728x90

티베로 데이터베이스 패키지 내에는 프로시저(Procedure), 함수(Function)이 정의되어 있다. 현재, 패키지 내에 어떤 프로시저와 함수가 있는지 조회하기 위해서는 ALL_PROCEDURES 또는 ALL_ARGUMENTS 정적 뷰 둘 중 하나를 사용하면 된다.

 

먼저, ALL_PROCEDURES는 테이블 또는 프로시저가 소유하고 있는 모든 프로시저 정보를 보여주는 뷰이다.

 

티베로 ALL_PROCEDURES 뷰 컬럼 정보
패키지 내 프로시저 오브젝트 조회

-- 패키지 내 프로시저 정보 조회
SELECT * 
FROM ALL_PROCEDURES
WHERE object_name = :package_name;

 

ALL_ARGUMENTS는 함수 또는 프로시저의 모든 파라미터 정보를 보여주는 뷰이다.

 

티베로 ALL_ARGUMENTS 뷰 컬럼 정보

ALL_ARGUMENTS 뷰에 package_name 컬럼이 있다. 조건절에서 package_name을 이용해서 조회하면, 함수 또는 프로시저 파라미터 목록이 출력된다.

-- 패키지 내 함수 또는 프로시저 파라미터 정보 조회
SELECT * FROM ALL_ARGUMENTS WHERE package_name = :package_name;

 

쿼리를 실행하면 파라미터 정보이기 때문에 object_name 컬럼 값에 동일한 함수 또는 프로시저 이름이 출력된다. 파라미터가 한 개인 경우에는 하나만 출력되지만, 파라미터 개수에 따라 동일한 object_name이 출력 되는 것은 당연한 것이다.


그리고 쿼리를 조회하면 함수인지 프로시저인지 구분할 수 있는 컬럼의 값이 없다. 그래서 어떤 오브젝트가 함수 또는 프로시저인지 구분하기가 어렵다.


position 컬럼 설명을 보면, 함수 오브젝트의 경우에 반환 파라미터는 Null 이라고 설명되어 있다.

 

티베로 ALL_ARGUMENTS 패키지 내부 파라미터 조회

티베로 데이터베이스 클라이언트 툴 프로그램에서 조회한 결과 패널을 보면, object_name 컬럼의 값이 XX_FUNCTION 인 경우에 position 값이 0이 있는 행이 있다. position 컬럼의 값이 0인 파라미터는 바로 반환값이다.


position 값이 0인 것을 이용해서 패키지 내에서프로시저와 함수를 각각 조회하려면 아래 쿼리를 이용하면 된다.

-- 패키지 내 함수 오브젝트 이름 조회
SELECT
    object_name
FROM
    all_arguments
WHERE
    owner = :owner
    AND package_name = :package_anme
GROUP BY
    object_name
HAVING
    MIN(position) = 0

-- 패키지 내 프로시저 오브젝트 이름 조회
SELECT
    object_name
FROM
    all_arguments
WHERE
    owner = :owner
    AND package_name = :package_anme
GROUP BY
    object_name
HAVING
    MIN(position) != 0

참고자료

댓글