문제

프로 시저 / 기능 및 패키지를 개별 파일 (백업)으로 프로그래밍 방식으로 내보내고 Oracle 9.2를 사용하고 싶습니다.

내가 찾은 가장 가까운 솔루션은 dbms_metadata.get_ddl을 사용하는 것이었지만 부품을 잃지 않고 (길이 나 들여 쓰기로 인해) 텍스트 파일에 클로브를 어떻게 출력합니까?

아니면 패키지 또는 다른 기능을 개별적으로 백업 할 수있는 다른 솔루션이 있습니까 (내가 원하는 것이 아니라 내가 원하는 것만)?

감사

도움이 되었습니까?

해결책

SQL*Plus와 같은 명령 라인 유틸리티에서 클로브 (및 오래)를 얻으려고하면 항상 서식/잘림 문제가 생깁니다. 내 솔루션은 DBMS_METADATA 클로브를 끈으로 다시 가져옵니다.

단편:

...

$sthRef = $dbhRef->prepare("select dbms_metadata.get_ddl(?,?) from dual");

$sthRef->execute('PACKAGE', $thisName);

while (($thisDDL) = $sthRef->fetchrow()) {

  print $thisDDL;

}

$sthRef->finish;

...

다른 팁

DDL을 받고 싶다면 실제로는 방법이 없습니다. DBMS_METADATA 당신이 이미 말했듯이.

일반적으로 이런 종류의 백업은 exp (또는 expdp), 이것은 대부분의 다른 DBMS 시스템에서 얻을 수있는 SQL 파일을 생성하지는 않지만.

SET pages 0
spool proclist.sql
SELECT
CASE line
WHEN 1 THEN
'CREATE OR REPLACE ' || TYPE || ' ' || NAME || CHR(10) || text
ELSE
text
END
FROM user_source
WHERE TYPE IN ( 'PROCEDURE','FUNCTION')
ORDER BY name, line;
spool OFF
exit 

RAS에 감사드립니다. 그의 답변에 대한 게스트는 일부 절차에 대한 코드를 가져와야했기 때문에 코드를 시도하여 코드를 시도하여 코드의 첫 줄에서 절차 이름 후 코드를 자르고 3 개의 점으로 바꾸는 것을 찾았습니다. ... ''

그래서 코드를 다음으로 변경했습니다.

   SELECT CASE line
      WHEN 1 THEN 'CREATE OR REPLACE ' -- || TYPE || ' ' || NAME || --CHR(10) || ' (' 
            || text
   ELSE
      text
   END
   FROM user_source
   WHERE TYPE IN ( 'PROCEDURE') and name like 'SomeThing%'
   ORDER BY name, line;

그리고이 페이지수출 절차 및 트리거매우 사용하는 Faul 코드가 있습니다.

   connect fred/flintstone;

   spool procedures_punch.lst

   select
      dbms_metadata.GET_DDL('PROCEDURE',u.object_name)
      from
      user_objects u
   where
      object_type = 'PROCEDURE';

   spool off;

Toad Schema 브라우저를 사용하여 최종 수행 한 다음 필요한 모든 절차를 선택하고 마우스 마우스 오른쪽 버튼을 클릭 한 다음 메뉴에서 내보내기를 선택하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top