oracle存储过程:变量被视为*

时间:2017-12-30 15:29:54

标签: oracle stored-procedures

请帮助,我尝试使用oracle过程作为参数变量然后在SELECT INTO中使用它,问题是过程不将此变量视为一个值。 这是一个简单的代码,解释了我的意思。 ps:id_res是主键。

 CREATE OR REPLACE PROCEDURE annuler_res(id_res in number) 
 AS
 BEGIN
 UPDATE reservation SET etat_res='annulé' WHERE reservation.id_res= id_res;
 END;

在执行程序之前,这是我的表 enter image description here 当我执行它时

 BEGIN 
 annuler_res(1);
 END; 

执行后,所有记录都会更新,而不是一个 enter image description here

PS:我之前创建了一个程序,在某些程序中模拟了一个自动增量主键。enter image description here

2 个答案:

答案 0 :(得分:2)

更改变量的名称,Oracle将 id_res 视为表格列,以便您的查询类似于 WHERE 1 = 1

答案 1 :(得分:-1)

在调用SQL时,总是使用别名。

CREATE OR REPLACE PROCEDURE annuler_res(id_res in number) 
AS
BEGIN
  UPDATE reservation SET etat_res='annulé' WHERE reservation.id_res= annuler_res.id_res;
END;

如果您始终使用别名,则永远不会遇到PL / SQL变量名称与表列名称冲突的问题。