というオブジェクトがありますcot_ntn_pi_v
。これは同義語だと言われました。all_synonymsテーブルには表示されません。ビューまたはテーブルのように見えますが、すべてのオブジェクトのテーブルにはありません。そこから選択できますが、「存在しない」ためドロップできず、「この名前はすでに別のオブジェクトで使用されています」と同じ名前で新しいテーブルを作成できません。
私は怒っていますか、それとも本当に愚かなことをしていますか?
というオブジェクトがありますcot_ntn_pi_v
。これは同義語だと言われました。all_synonymsテーブルには表示されません。ビューまたはテーブルのように見えますが、すべてのオブジェクトのテーブルにはありません。そこから選択できますが、「存在しない」ためドロップできず、「この名前はすでに別のオブジェクトで使用されています」と同じ名前で新しいテーブルを作成できません。
私は怒っていますか、それとも本当に愚かなことをしていますか?
回答:
テーブルと同じ名前空間のオブジェクトタイプは次のとおりです。
したがって、おそらくこれらのタイプの1つです。それから選択できる場合、最初の5つは除外され、テーブル、ビュー、プライベートシノニム、またはマテリアライズドビューのいずれかになります。
all_objects
などで検索したときに大文字を使用しましたか?例えば、
select *
from ALL_OBJECTS
where OBJECT_NAME = 'COT_NTN_PI_V';
SQL DeveloperやToadなどのツールを使用している場合は、ツールでオブジェクトを説明できます。ツールで名前を強調表示し、Shift-F4
DeveloperまたはF4
Toadでヒットします。Toadはオブジェクトに関する多くの説明を提供しますが、Developerの[Details]タブには、その行TABLE_NAME
または行が含まMVIEW_NAME
れ、それが何であるかを示します。
それが何であるかがわかったら、それをドロップする方法を簡単に知ることができます。
オブジェクト自体に対する権限がない場合、ALL_%テーブルでオブジェクトを表示できない可能性があるため、DBA_OBJECTSテーブルを確認します(これを行うには、権限/適切に権限が付与されたユーザーが必要です)。
select *
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';
それでも出力が生成されない場合は、次のクエリで生のOracleデータディクショナリテーブルをチェックインできます。
select u.name as owner, o.name as object_name,
decode(o.type#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE',
7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
11, 'PACKAGE BODY', 12, 'TRIGGER',
13, 'TYPE', 14, 'TYPE BODY',
19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB',
22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE',
28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30, 'JAVA RESOURCE',
32, 'INDEXTYPE', 33, 'OPERATOR',
34, 'TABLE SUBPARTITION', 35, 'INDEX SUBPARTITION',
39, 'LOB PARTITION', 40, 'LOB SUBPARTITION',
43, 'DIMENSION',
44, 'CONTEXT', 47, 'RESOURCE PLAN',
48, 'CONSUMER GROUP',
51, 'SUBSCRIPTION', 52, 'LOCATION', 56, 'JAVA DATA', 'UNKNOWN') as type,
o.ctime, o.mtime,
to_char(o.stime, 'YYYY-MM-DD:HH24:MI:SS'),
decode(o.status, 0, 'N/A', 1, 'VALID', 'INVALID') as status
from sys.obj$ o, sys.user$ u
where o.owner# = u.user#
and o.linkname is null
and (o.type# not in (1 , 10) or
(o.type# = 1 and 1 = (select 1
from sys.ind$ i
where i.obj# = o.obj#
and i.type# in (1, 2, 3, 4, 6, 7, 9))))
and o.name = 'COT_NTN_PI_V';