티베로 데이터베이스 패키지 내에는 프로시저(Procedure), 함수(Function)이 정의되어 있다. 현재, 패키지 내에 어떤 프로시저와 함수가 있는지 조회하기 위해서는 ALL_PROCEDURES 또는 ALL_ARGUMENTS 정적 뷰 둘 중 하나를 사용하면 된다.
먼저, ALL_PROCEDURES는 테이블 또는 프로시저가 소유하고 있는 모든 프로시저 정보를 보여주는 뷰이다.
-- 패키지 내 프로시저 정보 조회
SELECT *
FROM ALL_PROCEDURES
WHERE object_name = :package_name;
ALL_ARGUMENTS는 함수 또는 프로시저의 모든 파라미터 정보를 보여주는 뷰이다.
ALL_ARGUMENTS 뷰에 package_name 컬럼이 있다. 조건절에서 package_name을 이용해서 조회하면, 함수 또는 프로시저 파라미터 목록이 출력된다.
-- 패키지 내 함수 또는 프로시저 파라미터 정보 조회
SELECT * FROM ALL_ARGUMENTS WHERE package_name = :package_name;
쿼리를 실행하면 파라미터 정보이기 때문에 object_name 컬럼 값에 동일한 함수 또는 프로시저 이름이 출력된다. 파라미터가 한 개인 경우에는 하나만 출력되지만, 파라미터 개수에 따라 동일한 object_name이 출력 되는 것은 당연한 것이다.
그리고 쿼리를 조회하면 함수인지 프로시저인지 구분할 수 있는 컬럼의 값이 없다. 그래서 어떤 오브젝트가 함수 또는 프로시저인지 구분하기가 어렵다.
position 컬럼 설명을 보면, 함수 오브젝트의 경우에 반환 파라미터는 Null 이라고 설명되어 있다.
티베로 데이터베이스 클라이언트 툴 프로그램에서 조회한 결과 패널을 보면, 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
참고자료
'Database' 카테고리의 다른 글
MySQL ERROR 1217 (23000) Cannot delete or update a parent row: a foreign key constraint fails (0) | 2019.04.22 |
---|---|
티베로 함수, 패키지, 프로시저 등 저장 오브젝트 쿼리 추출하기 (0) | 2019.04.22 |
Oracle 현재 접속한 세션 정보 조회 (0) | 2019.04.14 |
티베로 데이터베이스 버전 확인 (1) | 2019.04.12 |
티베로 테이블스페이스(Tablespace) 조회 (0) | 2019.04.12 |
댓글