我正在尝试学习一些PLSQL,并且我发现自己试图解决一个简单的问题,如果COD编号字段为Odd或Even,则需要在TEXT字段中写入'Odd'或'Even'。非常直截了当,对吧?
DECLARE
TYPE possible_values IS VARRAY(3) OF VARCHAR2(10);
v_values possible_values;
BEGIN
v_values := possible_values('Even','Odd');
UPDATE ORG_TAB_PNU t
SET t.text = v_values(MOD(t.cod, 2) + 1);
DBMS_OUTPUT.PUT_LINE(v_values(MOD(20, 2) + 1));
END;
现在,问题似乎是这行代码:
SET t.text = v_values(MOD(t.cod, 2) + 1);
如果我说
就好了SET t.text = v_values(MOD(1, 2));
或
SET t.text = MOD(t.cod, 2) + 1;
我可以使用数组的任何元素,或者字段t.cod的值,但我不能一起使用它们,因为它会返回:
Error report -
ORA-06550: line 8, column 31:
PLS-00201: identifier 'T.COD' must be declared
ORA-06550: line 8, column 18:
PL/SQL: ORA-00904: : invalid identifier
ORA-06550: line 7, column 5:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
我在这里缺少什么?我是否误解了数组在plsql中的工作原理?
答案 0 :(得分:0)
ANSI SQL将表引用(相关名称)限定为只有一个级别。
答案 1 :(得分:0)
PL / sql引擎首先尝试解析v_values(MOD(t.cod, 2) + 1)
并将值传递给SQL引擎。但是{/ 1}}对于pl / sql引擎是未知的。
解决方法:
创建存储函数
t.cod