oracle - 覆盖/更改 Oracle 存储过程中的参数

标签 oracle stored-procedures

我有一个这样的程序:

PROCEDURE UPDATE_STAT(p_STAT STATS.STATID%TYPE)
IS
 ...   
BEGIN
 ... 
        if (X = 5)
    THEN
        p_Stat := 17;
    END IF;
...
    UPDATE TBL_A SET STATUS = p_Stat WHERE ...
...
END

问题是当我尝试编译它时出现错误:

PLS-00363: Expression 'p_Stat' cannot be used as assignment target.

有人有解决方法或解决方案吗?局部变量是唯一可以以这种方式使用的东西吗?该参数在函数体中被大量使用,因此用 case 语句替换每个实例将是一件痛苦的事情。提前致谢。

最佳答案

您将参数作为 IN 参数传递 - 这意味着您无法更改它,如果您考虑一下,这是有道理的。实际上,它是一个常数。

根据您想要执行的操作,您可以这样做:

PROCEDURE UPDATE_STAT(p_STAT STATS.STATID%TYPE)
IS
    v_stat stats.statid%type;
 ...   
BEGIN
    v_stat := p_stat;
 ... 
    if (X = 5) THEN
        v_Stat := 17;
    END IF;
...
    UPDATE TBL_A SET STATUS = v_Stat WHERE ...
...
END

关于oracle - 覆盖/更改 Oracle 存储过程中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37325466/

相关文章:

sql - 如何根据 Oracle 11g+ 中聚合元素的数量改变 LISTAGG() 的结果?

oracle - Groovy/Grails无法加载oracle.jdbc.driver.OracleDriver

java - 在 Java 代码中启动 Oracle 存储过程

sql - T-SQL SELECT TOP 值和增量

mysql - 我想在 "Numbers Of Courses"列中计算 CourseName like(4,2,5),但输出显示的是完整的 courseName

sql - 带 IF 条件的 PL/SQL 游标

Oracle SQL*Plus : How to include current schema in prompt?

MySQL。程序,语法错误

mysql - 如何从 Rails 中的 MySQL 存储过程获取输出参数?

sql-server - 如何在Azure数据工厂上使用查询If Else条件?