1

Oracle 11 と という名前のスキーマを含む製品ボックスがありますA。テスト目的で、製品データのローカル スナップショットが必要です。データはそれほど大きくないので、エクスポートは問題ありません。A次のような内容のテーブルごとに 1 つずつ、(DBeaver を使用して) SQL ファイルのバンドルにエクスポートしました。

INSERT INTO A.TABLE1 (F1, F2, F3) VALUES ('v11', 'v21', 'v31');
INSERT INTO A.TABLE1 (F1, F2, F3) VALUES ('v12', 'v22', 'v32');

等々。問題は、開発目的で という名前Bのスキーマを使用しているため、インポート中に次のような挿入が必要なことです。

INSERT INTO B.TABLE1 (F1, F2, F3) VALUES ('v11', 'v21', 'v31');
INSERT INTO B.TABLE1 (F1, F2, F3) VALUES ('v12', 'v22', 'v32');

INSERT INTO A.すべてを見つけて置き換えることができINSERT INTO B.、これで問題が解決することはわかっていますが、スキーマの何らかのエイリアスを作成して、次のようにすることができるかもしれませんB(疑似コード):

CREATE ALIAS 'A' FOR SCHEMA 'B'
@TABLE1.sql
@TABLE2.sql
DELETE ALIAS 'A'
4

2 に答える 2

5

スキーマ名を完全に省略してスクリプトを記述します。または、愚かなツールによって生成された場合は、スキーマ名を編集してください:)

ドライバー スクリプトでALTER SESSION SET CURRENT_SCHEMA x、挿入スクリプトを呼び出す前に実行します。

于 2013-03-05T06:46:03.057 に答える
2

あるスキーマを別のスキーマにマップするエイリアスを作成することはできません。

  • スクリプトを生成しているツールがスキーマ名を完全に省略してしまう可能性があります。INSERT次に、任意のスキーマでステートメントを実行できます
  • 別のツールを使用できます。たとえば、Oracleのエクスポートおよびインポートユーティリティ(classicまたはDataPump)には、あるスキーマから別のスキーマにマップできるパラメータがあります。

ただし、本番環境とは異なるスキーマ名を使用して開発するという知恵に強く疑問を投げかけます。これにより、コードのプロモートなどの実行が大幅に複雑になります。誰か(またはいくつかのツール)が、クエリのテーブル名にスキーマプレフィックスを誤って追加します。ある環境から別の環境にスクリプトを昇格させる前に、スクリプトを手動で編集する必要があります。そうすると、昇格プロセス中に誰かが間違いを犯してコードの機能を変更することになります。

于 2013-03-04T19:12:36.990 に答える