【问题标题】:Creating a view in PLSQL [closed]在 PLSQL 中创建视图 [关闭]
【发布时间】:2014-05-20 15:54:30
【问题描述】:

我正在尝试做这样的事情:

CREATE VIEW FOO AS SELECT ...;
/

BEGIN
    SELECT ...;
    INSERT ...;
    UPDATE ...;
    DELETE ...;
END
/

DROP VIEW FOO;
/

但这不起作用:

'ERROR at line 14: ORA-00911: invalid character' 在创建视图语句的末尾。

'第 4 行出现错误:ORA-06550:第 4 行,第 2 列:PLS-00103:在预期以下之一时遇到符号“CREATE”......'

分号或斜线的正确数量和位置是多少?

【问题讨论】:

  • 去掉CREATE VIEWDROP VIEW语句末尾的分号——在SQL*Plus中执行SQL语句时不使用分号。
  • 这个错误最终是一个分号后面的“--”注释。 SQLplus 出于某种不明原因不允许这些。
  • 旧线程,但当前设置为sqlterminator 的字符肯定会用于终止SQL*Plus 中的SQL 语句。此外,它一次解析一行,并期望 SQL 终止符位于末尾,不包括空格。如果当前终止符嵌入在多个语句或 cmets 等之间,它不会解析整行。

标签: oracle plsql syntax-error sqlplus


【解决方案1】:
CREATE VIEW FOO AS SELECT 1 NUM FROM DUAL;
DECLARE
    i NUMBER;
BEGIN
    SELECT 1 INTO i FROM DUAL;
END;
/

DROP VIEW FOO;

对我来说没有任何问题。请添加您的整个CREATE VIEW 声明。

【讨论】:

  • 当我执行您的示例时,我得到:视图已创建。 CREATE VIEW FOO AS SELECT 1 "num" FROM dual * 第 1 行出现错误:ORA-00955:名称已被现有对象使用 PL/SQL 过程已成功完成。视图下降。 DROP VIEW FOO * 第 1 行出现错误:ORA-00942:表或视图不存在
  • 也许我应该补充说我在sqlplus中执行它:sqlplus user/pass@instance @script.sql
  • 我在“创建视图”命令之后立即删除了“/”。这不是必需的,它正在重新执行“创建视图”。第一次“创建视图”成功,第二次执行,视图 FOO 已经存在,你得到 ORA-00955。与“drop view”后面的“/”相同。我也摆脱了那个。代码现在应该可以正常运行了。
  • 小写(和混合)大小写的列名不是一个好主意。现在您需要始终引用该列名称并进行完全匹配。
  • @RobvanWijk:只要不使用带引号的标识符,大小写混合就不是问题。
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多