0

このコードをSQL Developerのワークシートに入れました:

CREATE TRIGGER T_testDSNa
before INSERT
on testDSNa
referencing new as new
for each ROW
BEGIN
  SELECT S_testDSN.nextval INTO :NEW.SYSID FROM dual;
END;

私はこれを得る:

Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:

誰かが理由を知っていますか?DDLを実行して4番目のテーブルを作成しようとするまで、これは以前の3つのテーブルで機能しました。または、自動インクリメント PK を設定するより良い方法はありますか?

4

2 に答える 2

0

問題はスキーマの欠如でした。スキーマのOracle定義:

テーブル、ビュー、シーケンス、ストアド プロシージャ、シノニム、インデックス、クラスタ、データベース リンクなどの論理構造を含む、データベース オブジェクトのコレクション。スキーマには、それを制御するユーザーの名前があります。

エイリアスなしでアクセスできるオブジェクトを知りたい場合。[USER_OBJECTS] を確認する必要があります。現在のユーザーが所有するリレーショナル オブジェクトについて説明します。

SELECT 
 OBJECT_NAME
 , OBJECT_TYPE
 , LAST_DDL_TIME
FROM USER_OBJECTS;

現在のユーザーがアクセスできるオブジェクトを知りたい場合:

SELECT 
    OWNER
    , OBJECT_NAME
    , OBJECT_TYPE
    , LAST_DDL_TIME 
FROM ALL_OBJECTS;

あなたの場合、必要な使用可能なテーブルのリストにオブジェクトを表示するには:

SELECT * FROM ALL_OBJECTS WHERE OWNER = 'USER';

セッションを変更して alias を回避することもできます。

ALTER SESSION SET current_schema = User;

権限/役割のビューについては、次を参照してください。

SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

エイリアスを回避するための最後の方法ですが、最も安全ではありません。スキーマと同じ名前を持つユーザーでログオンすることです。

それが役立つことを願って

于 2014-08-02T20:14:32.773 に答える