我有一个这样的程序:
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语句替换每个实例都会很痛苦。提前谢谢。
答案 0 :(得分:2)
您将参数作为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
答案 1 :(得分:2)
有两种方法可以解决这个问题:
将您的程序重新声明为:PROCEDURE UPDATE_STAT(p_STAT IN OUT STATS.STATID%TYPE)
。请注意,这也会在调用PL / SQL块中更改p_stat的值,因此这可能会产生不必要的副作用!
PROCEDURE UPDATE_STAT(p_STAT STATS.STATID%TYPE)
IS
l_stat STATS.STATID%TYPE := p_stat;
BEGIN
...
if (X = 5)
THEN
l_Stat := 17;
END IF;
...
UPDATE TBL_A SET STATUS = l_Stat WHERE ...
...
END;
/