0

SQL*Plus を使用して複数のデータベースにクエリを実行する方法は何ですか?

MySQL では、次のようなことが可能です。

create table WK_LINK_JOINT_IDEOREQ AS
select k.constraint_name cn, k.table_name tl, l.column_name lc
     , k.referenced_table_name tg, k.column_name cg, l.referenced_table_name td
     , l.referenced_column_name cd
  from information_schema.KEY_COLUMN_USAGE k

これは単なる例であり、完全ではありません: しかし、ご覧のとおり、INFORMATION_SCHEMA ともう 1 つの 2 つのデータベースで作業しています。

SQL*Plus を使用してこのようなことを行いたいのですが、問題は、SQL*Plus を使用して接続するときにデータベース (SID) を指定することです。これは、他のデータベースにアクセスできないことを意味します。

それを行う方法はありますか?

4

1 に答える 1

1

Oracle は、MySQL とは異なる DATABASE の解釈をしています。Oracle では、同じデータベースに複数のユーザーまたはスキーマがあります。

したがって、別のスキーマからオブジェクトにアクセスすることが本当に必要な場合は、そのスキーマが権限を付与するだけで済みます。その後、SQL でテーブル (または何でも) を参照できます。

ユーザー JOE は、自分のテーブルで選択した権限を付与します

SQL>  conn JOE/SOAP
SQL>  grant select on my_table to ABC;

その後、クエリを実行できます。

SQL>  conn ABC/DEF
SQL>  select * from joe.my_table;

あなたの例では、INFORMATION_SCHEMA を使用しました。これに相当する Oracle は、膨大なビューのライブラリであるデータ ディクショナリです。 詳細をご覧ください。

ほとんどの場合、デフォルトでパブリック アクセスが許可されます。したがって、USER_TABLES、USER_CONSTRAINTS、および USER_CONS_COLUMNS から選択して、そのクエリを再作成できます (正しく理解していると仮定します)。

于 2013-06-26T14:46:37.963 に答える