热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:SQLDeveloper触发器错误报告ORA00942:表或视图不存在

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SQLDeveloper触发器错误报告-ORA-00942:表或视图不存在相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SQLDeveloper触发器错误报告 - ORA-00942:表或视图不存在相关的知识,希望对你有一定的参考价值。



我将此代码放入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?


答案

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

最后一种方法但不是最安全的避免别名。是使用与架构同名的用户登录。

希望它可以帮助


另一答案

我遇到了同样的问题。解决方案:我观察到我创建的表格被双引号括起来,这使得它区分大小写。因此,每次我参考我的桌子时,我需要用双引号括起来。

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;

请参考此链接:What exactly do quotation marks around the table name do?



推荐阅读
author-avatar
手机用户2502853201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有