oracle SQLDeveloper触发器错误报告- ORA-00942:表或视图不存在

o2gm4chl  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(360)

我将以下代码放入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:

有人知道为什么吗?这对前面的3个表都有效,直到我试图运行DDL来创建第4个表。或者,有没有更好的方法来设置自动递增的PK?

bkhjykvo

bkhjykvo1#

问题是缺少架构。架构的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';

您还可以更改会话以避免别名:

ALTER SESSION SET current_schema = User;

有关权限/角色视图,您可以查看:

SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

避免别名的最后一种方法,但不是最安全的方法。就是以与纲要同名的使用者登入。
希望能帮上忙

j1dl9f46

j1dl9f462#

我也遇到了同样的问题。解决方案:我注意到我创建的表被双引号括起来,这使得它区分大小写,所以每次我引用我的表时,我都需要用双引号括起来。

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;

引用此链接:表名前后的引号有什么作用?

相关问题