1

私は次のような単純なPl/Sql体を持っています:

begin 
  ------------------- deletes -------------------------       
  delete from ticket.KC4ENTKEY where  KC2ENTID200 in ('ETICKET');

  ------------------- inserts -------------------------       
  insert into host.kc4achmap(kc4srl467,kc4hst468,kc4id455)
              values('AUTHENTICATION',1,'TICKET');
end;

サンプルのスキーマ名をticket変更する場合があります。スキーマは に変更される場合がありますticket_2。私の質問は次のとおりです:スキーマ名のパラメーターまたはプレースホルダーを設定するにはどうすればよいですか (ハードコードされたスキーマ名を削除するため)?

4

1 に答える 1

3

Oracle はコンパイル時にスキーマ/テーブル/列が存在するかどうか、およびそれらにアクセスできるかどうかをチェックするため、スキーマ名 (またはテーブル名または列名) のプレースホルダーを使用することはできません。

柔軟性を追加するために、シノニムまたはビューを介して間接レイヤーを追加できます。

CREATE SYNONYM my_kc4entkey FOR ticket.kc4entkey;
CREATE SYNONYM my_kc4achmap FOR host.kc4achmap;

コードでは、完全修飾テーブルの代わりにシノニムを参照します。

begin
  delete from my_kc4entkey where kc2entid200 in ('ETICKET');
  insert into my_kc4achmap(kc4srl467,kc4hst468,kc4id455) values('AUTHENTICATION',1,'TICKET'); 
end;

後でスキーマ名を変更する必要がある場合は、シノニムを変更してコードを変更しないでください。

CREATE OR REPLACE SYNONYM my_kc4entkey FOR ticket2.kc4entkey;
于 2012-12-01T09:24:38.583 に答える