3

Oracle 9.2 を使用して、プロシージャ / 関数とパッケージを個別のファイル (バックアップとして) にプログラムでエクスポートしたいと考えています。

私が見つけた最も近い解決策は DBMS_METADATA.GET_DDL を使用することでしたが、(長さやインデントのために) 部分を失うことなく、CLOB をテキスト ファイルに出力するにはどうすればよいでしょうか?

または、パッケージやその他の機能を個別にバックアップする他のソリューションがありますか (すべてではなく、必要なもののみ)。

ありがとう

4

4 に答える 4

3

SQL*Plus などのコマンド ライン ユーティリティから CLOBS (および LONGS) を取得しようとすると、常に書式設定/切り捨ての問題が発生するようです。DBMS_METADATA私の解決策は、CLOB を文字列に戻すために使用する単純なユーティリティを非型チェック言語 (Perl) で作成することでした。

スニペット:

...

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

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

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

  print $thisDDL;

}

$sthRef->finish;

...

于 2009-04-02T19:38:06.103 に答える
1

DDL を取得したい場合は、DBMS_METADATA既に述べた以外に方法はありません。

通常、この種のバックアップはexp(またはexpdp) を使用して実行されますが、他のほとんどの DBMS システムで得られるような SQL ファイルは作成されません。

于 2009-04-02T15:45:27.083 に答える
1
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 
于 2013-11-28T09:53:15.733 に答える