所以我试图创建这个触发器,检查可用票数是否大于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;
答案 0 :(得分:0)
实际上,它编译好(我创建了虚拟表,只是为了使触发器编译)。我根本没有修改你的代码,只需将其复制/粘贴到我的SQL * Plus会话中。
虽然,我建议你
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;