0

私はテーブル T の助成金を持っています。この助成金を次の後に関連付けたいと考えています。

drop table T;
create table T(...);

出来ますか?

4

2 に答える 2

2

いいえ。オブジェクトをドロップした時点で、そのオブジェクトに対する許可はすべて削除されます。新しいオブジェクトを作成するとき、そのオブジェクトがたまたま古いオブジェクトと同じ名前を持っていたとしても、新しいオブジェクトに対して必要な権限を再付与する必要があります。これが、オブジェクトを削除して再作成することがあまり良い考えではない理由の 1 つです。テーブルを削除して再作成する必要があるのはなぜでしょうか。

もちろん、オブジェクトを削除する前にすべての許可を特定し、新しいオブジェクトを作成した後にそれらを再作成することもできます。などのさまざまなデータ ディクショナリ テーブルにクエリを実行するか、関数dba_tab_privsを使用して許可の DDL を取得することで、これを行うことができます。dbms_metadata.get_dependent_ddl

于 2013-04-25T16:05:00.093 に答える
2

Oracle Database SQL言語リファレンスから(強調は私のものです):

表を削除すると、依存オブジェクトが無効になり、表に対するオブジェクト権限が削除されます。表を再作成する場合は、表に対するオブジェクト権限を再付与し、表の索引、整合性制約およびトリガーを再作成して、記憶域パラメータを再指定する必要があります。切り捨てと置換には、これらの影響はありません。したがって、TRUNCATE ステートメントを使用して行を削除する方が、テーブルを削除して再作成するよりも効率的です。

grantしたがって、ステートメントの後にステートメントをスクリプトに明示的に追加する必要がありますcreate table

于 2013-04-25T16:03:04.757 に答える