Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这些触发错误意味着什么_Sql_Database_Oracle_Triggers - Fatal编程技术网

Sql 这些触发错误意味着什么

Sql 这些触发错误意味着什么,sql,database,oracle,triggers,Sql,Database,Oracle,Triggers,嘿,伙计们,谢谢你们早些时候的帮助。我现在遇到了一个新问题。几步之后,在我的家庭作业中,我需要为这个触发器添加一个额外的部分。触发器需要从副本数中减去一个。当副本数达到0时,应显示不可用。在过去的几个小时里,我一直在努力想办法,这就是我想到的。任何帮助或建议都将不胜感激 CREATE or REPLACE Trigger Unavailable_Rule BEFORE INSERT ON Transaction FOR EACH ROW BEGIN IF :new.Date_Rente

嘿,伙计们,谢谢你们早些时候的帮助。我现在遇到了一个新问题。几步之后,在我的家庭作业中,我需要为这个触发器添加一个额外的部分。触发器需要从副本数中减去一个。当副本数达到0时,应显示不可用。在过去的几个小时里,我一直在努力想办法,这就是我想到的。任何帮助或建议都将不胜感激

CREATE or REPLACE Trigger Unavailable_Rule
 BEFORE INSERT ON Transaction
 FOR EACH ROW

BEGIN


IF :new.Date_Rented_Out  is not null AND :new.Date_Returned is NULL AND Num_Copies=1 
 THEN 
   UPDATE Video
   set Num_Copies = Num_Copies - 1,
    Status = 'Unavailable'
   where Vid_Num = :new.Vid_Num;

ELSE

 Num_Copies = Num_Copies - 1;
 End IF;
 END;
/
show errors;

6/4  PL/SQL: SQL Statement ignored  
7/15  PL/SQL: ORA-00971: missing SET keyword  
13/13  PLS-00103: Encountered the symbol "=" when expecting one of the f ollowing: := . ( @ % ;  
14/2  PLS-00103: Encountered the symbol "END"  

您的
update
语句格式不正确。而不是:

UPDATE Video
   Num_Copies = Num_Copies -1
   set Status = 'Unavailable'
where Vid_Num = :new.Vid_Num;
集合中分配
Num\u拷贝数

UPDATE Video
   set Num_Copies = Num_Copies - 1,
       Status = 'Unavailable'
   where Vid_Num = :new.Vid_Num;
编辑:

您的
if
语句可以替换为:

UPDATE Video
    set Num_Copies = Num_Copies - 1,
        Status = (case when :new.Date_Rented_Out  is not null AND :new.Date_Returned is NULL AND Num_Copies = 1 then 'Unavailable'
                       else status
                  end)
    where Vid_Num = :new.Vid_Num;

感谢您将错误范围缩小到这两个方面:13/13 PLS-00103:在期待以下其中一个时遇到符号“=”:=。(@%;14/2 PLS-00103:遇到符号“结束”“Num_Copies=Num_Copies-1;”您是否需要此处更新stmt的其余部分?更新视频集Num_Copies=Num_Copies-1,其中Vid_Num=:new.Vid_Num;9/3 PL/SQL:SQL语句忽略了11/3 PL/SQL:ORA-01747:无效的user.table.column、table.column或co-column规范这是我要做的got@BS123 . 是的,你需要一个更新声明。