【发布时间】:2018-03-24 03:36:36
【问题描述】:
我需要执行一个查询,在执行查询之前我需要检查以下两个条件, 1)表格行数为0 2) 存在一个表列。
所以根据我的要求,我写了如下程序,
DECLARE
rowCount INT;
column_not_exists exception;
pragma exception_init (column_not_exists , -00904);
BEGIN
SELECT count(*) INTO rowCount FROM Settings;
IF (rowCount = 0) THEN
Insert into Settings (ID,PROCESSID,AREA) select ID,PROCESSID,AREA from POINT WHERE CLASSNAME = 'ENDPOINT' and PROCESSID IS NOT NULL;
END IF;
exception WHEN column_not_exists THEN NULL;
END;
/
但不知何故没有处理异常,我仍然可以在日志中看到错误消息
PL/SQL: ORA-00904: "PROCESSID": invalid identifier
ORA-06550: line 8, column 1:
PL/SQL: SQL Statement ignored
有人可以在这里帮我验证这两个条件吗?
【问题讨论】:
-
关于行数,您可以使用 dba_tab_statistics (它显示来自最后一个数据库收集统计信息的表的统计信息,如果关闭行数很重要,则不合适)。关于列,您可以从 dba_tab_columns 查询表的列并检查该列是否存在。
-
你能从你的数据库中扩展你的点(表)结构吗!!!
-
ora-00904 是编译时异常。异常部分捕获运行时异常。简单地说,ora-00904 不能被静态 SQL 捕获,但它可以被动态 SQL 捕获。无论如何,为静态 SQL 处理该异常没有任何意义。您应该知道要向/从中插入/选择数据的表的结构。
标签: sql oracle plsql oracle11g procedure