기술 정보
home
채널 소개
home

Procedure, Function 구문 추출 방안

문서 유형
장애 해결
분야
관리/환경설정
키워드
dbms_metadata
function추출
get_ddl
procedure추출
적용 제품 버전
6FS07
6FS07PS
7FS01
7FS02
7FS02PS
1 more property

현상

Tibero6 FS07_CS_2005 이하 버전에서 PROCEDURE  구문 추출 시, 아래와 같은 두 에러가 발생합니다.
SQL> select to_char( dbms_metadata.get_ddl('PROCEDURE','SYSDATE_COUNT','TIBERO')) from dual; TBR-14001: Not yet implemented. TBR-15163: Unhandled exception at SYS.DBMS_METADATA, line 1874.
SQL
복사

원인

Tibero6 FS07_CS_2005 이하 버전에서는 dbms_metadata.get_ddl를 지원하지 않으므로 에러가 발생합니다.

해결

Tibero6 FS07_CS_2005 이하 버전에서는 DBA_SOURCE 뷰를 활용한 수동 구문 추출 방식으로 대체 가능합니다.

1. 테스트 테이블 생성

SQL> CREATE TABLE DAY_CK (DD VARCHAR2(10)); Table 'DAY_CK' created.
SQL
복사

2. 프로시저 생성

SQL> CREATE OR REPLACE PROCEDURE SYSDATE_COUNT( Test_Date IN VARCHAR2 ) IS TEMP VARCHAR(8); BEGIN TEMP := TO_CHAR(TO_DATE(Test_Date,'YYYYMMDD'),'DY'); INSERT INTO DAY_CK(DD) VALUES(TEMP); COMMIT; END; /
SQL
복사

3. 프로시저 수행

SQL> call SYSDATE_COUNT(20250219); PSM called. SQL> select * from DAY_CK; DD ----------1 row selected.
SQL
복사

4. 구문 추출

4.1 Tibero6 FS07_CS_2005 이상 버전: dbms_metadata.get_ddl 사용

--구문형식 SQL> select to_char(dbms_metadata.get_ddl('오브젝트타입', '오브젝트명', '스키마명')) from dual;
SQL
복사
SQL> select to_char( dbms_metadata.get_ddl('PROCEDURE','SYSDATE_COUNT','TIBERO')) from dual; TO_CHAR(DBMS_METADATA.GET_DDL('PROCEDURE','SYSDATE_COUNT','TIBERO')) -------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE "TIBERO".SYSDATE_COUNT( Test_Date IN VARCHAR2 ) IS TEMP VARCHAR(8); BEGIN TEMP := TO_CHAR(TO_DATE(Test_Date,'YYYYMMDD'),'DY'); INSERT INTO DAY_CK(DD) VALUES(TEMP); COMMIT; END 1 row selected.
SQL
복사

4.2. Tibero6 FS07_CS_2005 이하 버전: DBA_SOURCE  테이블에서 구문 추출

--구문형식 SQL> SELECT TEXT FROM DBA_SOURCE WHERE owner = '스키마명' AND name = '오브젝트명' AND type = '오브젝트타입';
SQL
복사
SQL> SELECT text FROM DBA_SOURCE WHERE owner = 'TIBERO' AND name = 'SYSDATE_COUNT' AND type = 'PROCEDURE'; TEXT -------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE SYSDATE_COUNT( Test_Date IN VARCHAR2 ) IS TEMP VARCHAR(8); BEGIN TEMP := TO_CHAR(TO_DATE(Test_Date,'YYYYMMDD'),'DY'); INSERT INTO DAY_CK(DD) VALUES(TEMP); COMMIT; END; 13 rows selected.
SQL
복사