Oracle APEX Beginner - ORA-00900运行SQL脚本时出错

qnakjoqk  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(105)

我是Oracle APEX的新手,我试图在应用程序中运行一个简单的SQL脚本来更新数据库中的一些数据。下面是我使用的脚本:

START TRANSACTION;
SELECT MAX(SAL) FROM Employee;
UPDATE Employee SET SAL = SAL * 100;
COMMIT;

但是,我遇到了以下错误:

ORA-00900: invalid SQL statement
ORA-06512: at "SYS.WWV_DBMS_SQL_APEX_230100", line 797
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1658
ORA-06512: at "SYS.WWV_DBMS_SQL_APEX_230100", line 782
ORA-06512: at "APEX_230100.WWV_FLOW_DYNAMIC_EXEC", line 2035

我在互联网上寻找解决方案。但我找不到任何类似的东西。我想知道为什么这不管用。

lyr7nygr

lyr7nygr1#

如果你在SQL Workshop中运行这段代码(看起来是这样),请注意:

  • Oracle中没有start transaction(正如您已经被告知的那样;这不是MySQL)
  • 命令可以一次运行一个。换句话说,你可以在窗口中有几个语句,但是如果你只按Run按钮,你会得到一个错误。

标记一个命令(例如,用鼠标),然后运行它

  • 最后,commit在此上下文中是无用的。如果你执行它,你会得到

提交声明不适用。所有语句都自动提交。

euoag5mw

euoag5mw2#

START TRANSACTION;在Oracle中不是有效语句。
事务是从您使用的第一个语句隐式启动的,您不能显式声明事务。
剩下的语句都是Oracle方言中的有效SQL语句。
fiddle

BEGIN
  DECLARE
    max_salary NUMBER;
  BEGIN
    SELECT MAX(SAL) INTO max_salary FROM Employee;
    UPDATE Employee SET SAL = SAL * 2;
    COMMIT;
  END;
END;

而且很有效。我不知道为什么
如果您使用的编辑器只能运行单个语句,那么您已经使用PL/SQL匿名块将多个SQL语句 Package 到单个PL/SQL语句中,并且您的编辑器正在运行单个PL/SQL语句并将其传递给使用PL/SQL引擎运行每个SQL语句的数据库。

  • 注意:您不需要初始BEGIN和最终END。*

相关问题