【问题标题】:oracle stored procedure : variable is considered as *oracle 存储过程:变量被视为 *
【发布时间】:2018-01-08 19:20:59
【问题描述】:

请帮忙,我正在尝试使用一个将变量作为参数然后在 SELECT INTO 中使用它的 oracle 程序,问题是程序不将此变量视为一个值。 这是一个简单的代码,可以解释我的意思。 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;

这是我在执行程序之前的表 当我执行它时

 BEGIN 
 annuler_res(1);
 END; 

并且在执行后所有记录都被更新而不是一个

PS:在此之前我已经创建了一个程序,该程序在某种程度上模拟了自动递增主键。

【问题讨论】:

    标签: oracle stored-procedures


    【解决方案1】:

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

    【讨论】:

    • 我试过你说的,效果很好,非常感谢:)
    【解决方案2】:

    您应该始终在调用 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 变量名称与表列名称冲突的问题。

    【讨论】:

    • 投反对票,因此没有 Oracle 文档说我们应该 ALWAYS 使用调用 SQL 的 ALIASES。它总是一个可选的,当然有时它在使用时会带来一些价值。回答时必须说明为什么要使用别名
    • 您的评论仍然没有详细说明为什么我们应该使用别名。您必须在解析时告诉 oracle 如何处理名称解析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多