0

このようなシナリオがありました。これに似た既存の手順があります。

PROCEDURE A_DATA_B( p_ID IN SCHEMA1.TABLE1.ID%TYPE,
                    p_MATCH IN SCHEMA1.TABLE2.MATCH%TYPE, 
                    p_STATUS IN SCHEMA1.TABLE3.STATUS%TYPE,  
                    p_MSG IN SCHEMA1.TABLE1.MSG%TYPE, 

                    The list goes on...

SCHEMA1 は、以前は同じデータベースに存在していました。これを別のサーバーの別のデータベースに移動する必要があります。ただし、スキーマ名は異なりますが、テーブル名と列名は同じままです。

だから私はこのように見えるように手順を変更しました

PROCEDURE A_DATA_B( p_ID IN SCHEMA2.TABLE1.ID%TYPE,
                    p_MATCH IN SCHEMA2.TABLE2.MATCH%TYPE, 
                    p_STATUS IN SCHEMA2.TABLE3.STATUS%TYPE,  
                    p_MSG IN SCHEMA2.TABLE1.MSG%TYPE, 

                    The list goes on..

しかし、コンパイルするとエラーが発生しました

PLS-00201: 識別子'SCHEMA2.TABLE1'を宣言する必要があります PL/SQL: 宣言は無視されました

このエラーから、SCHEMA2 がエラーを発生させるデータベースにないことがわかります。では、どのように対処すればよいのでしょうか。この SCHEMA2 を使用しているパッケージ本体では、@db_link が続いています。それで、これを解決するためにその db_link を利用できますか?

ある記事を調べて、SYNONYM も使用できることを知りました。これは、シノニムを作成する正しい方法でしょうか?

CREATE SYNONYM SCHEMA2 FOR SCHEMA2@db_link;

この点で誰かが私を助けてくれますか。

注 : %type を varchar2 や数値などに変換できない場合があります。

前もって感謝します..

4

2 に答える 2

1

シノニムは、スキーマではなくオブジェクトに対して作成されます。

ローカル データベース内の各テーブル (オブジェクト、ビューなど) のシノニムを作成し、それを使用してアンカー型を宣言できます。

CREATE SYNONYM schema2.table1 
   FOR schema1.table1@db_link

CREATE SYNONYM schema2.table2 
   FOR schema1.table2@db_link

CREATE SYNONYM schema2.table3 
   FOR schema1.table3@db_link
于 2013-10-11T06:41:12.153 に答える
0

サブプログラムのパラメータとして使用する参照項目は、次の句%TYPEを追加することで、データベース リンクを介してリモート オブジェクトを指すことができます。@DBLINK_NAME

PROCEDURE A_DATA_B( p_ID IN SCHEMA2.TABLE1.ID@DBLINK_NAME%TYPE,
于 2013-10-11T06:48:25.633 に答える