Oracle pl / sql:遇到符号""

时间:2018-04-07 14:01:36

标签: sql oracle plsql

所以我试图创建这个触发器,检查可用票数是否大于0,如果它不是,它会在预订时抛出错误,但在创建触发器时,我收到以下错误< / p>

PLS-00103: Encountered the symbol ""

这是我的代码:

create or replace trigger booked_ticket before insert OR UPDATE on booking for each row
declare
    v_available NUMBER;
begin
  SELECT AVAILABLETICKETS into v_available from HALLSEAT WHERE HALLSEAT .STAGEID=:NEW.STAGEID;
IF v_available<1 THEN
 Raise_Application_Error(-20343, 'You cant book');
END IF;
end;​

2 个答案:

答案 0 :(得分:0)

实际上,它编译好(我创建了虚拟表,只是为了使触发器编译)。我根本没有修改你的代码,只需将其复制/粘贴到我的SQL * Plus会话中。

虽然,我建议你

  • 了解如何格式化代码并使其更易于阅读。
  • 编辑您的问题并复制/粘贴您的 SQL * Plus会话,以便我们可以看到您的确切操作以及Oracle的响应方式。它会指出你收到错误的地方,只是说有一个没有帮助
SQL> create table booking (stageid number);

Table created.

SQL> create table hallseat (availabletickets number, stageid number);

Table created.

SQL> create or replace trigger booked_ticket before insert OR UPDATE on booking for each row
  2  declare
  3      v_available NUMBER;
  4  begin
  5    SELECT AVAILABLETICKETS into v_available from HALLSEAT WHERE HALLSEAT .STAGEID=:NEW.STAGEID;
  6  IF v_available<1 THEN
  7   Raise_Application_Error(-20343, 'You cant book');
  8  END IF;
  9  end;
 10  /

Trigger created.

SQL>

<强> [修改

虽然,是的 - GUI(SQL Developer)在第7行+第7列报告错误。正是这一行:

 Raise_Application_Error(-20343, 'You cant book');
      ^
      here

好像有一些“未被识别”的角色。我在Notepad ++中查看了该代码,将其设置为显示所有字符,但没有出现(CR / LF除外),所以我不确定该错误的真正原因是什么。

“修复”它的最简单方法是删除你拥有的所有东西(我的意思是,触发器)并再次写入(键入)它。应该没问题(至少在我试过的时候)。

答案 1 :(得分:0)

非常粗略的错误:在第9行&#34;结束后,您有一个不可见的字符ASCII(8203);&#34;声明。复制并粘贴此触发器,您就可以了。

create or replace trigger booked_ticket before insert OR UPDATE on booking for each row
declare
    v_available NUMBER;
begin
  SELECT AVAILABLETICKETS into v_available from HALLSEAT 
  WHERE HALLSEAT .STAGEID=:NEW.STAGEID;
IF v_available<1 THEN
 Raise_Application_Error(-20343, 'You cant book');
END IF;
end;​