为什么 plsql 中的 while 循环不起作用?

Why while loop in plsql not working?

菜鸟问题,为什么会这样:

CREATE OR REPLACE FUNCTION Get_tipo_aula ( nm IN VARCHAR2, n IN NUMBER)
RETURN VARCHAR2
IS
type array_t is varray(3) of varchar2(11);
array array_t := array_t('Conferenze','Laboratorio','Aula');
Aula varchar2(11);
i NUMBER;
BEGIN
i:=1;
SELECT tipo_modulo
INTO Aula
FROM Modulo
WHERE Nome_modulo = nm;
--
WHILE Aula <> array_t(i)
LOOP
i := i+1;
END LOOP;
RETURN array_t(1 + mod(i+n-1,3));
END;
/

给我这些错误:

15/1     PL/SQL: Statement ignored
15/12    PLS-00306: wrong number or types of arguments in call to '!='
19/1     PL/SQL: Statement ignored
19/8     PLS-00382: expression is of wrong type

知道第一个 select 的目的是将与上面数组相同值的字符串加载到 aula 中吗?我想要的结果是从 while 中获取 Aula 中包含的字符串数组中第一次出现的索引,然后 return 数组的值移动了某个位置。

例如:

输入值..., 2

selection 结果 Aula

while 的预期结果:i = 3

预期 returned 值:array_t(1+mod(3+2-1,3)) = array_t(2) = 'Laboratorio')

老实说,我不知道我犯了什么样的语法错误。

这是一个简单的错字。您需要在代码中使用 变量名称 ,而不是类型。所以,更正这两行...

WHILE Aula <> array(i)
....
RETURN array(1 + mod(i+n-1,3));   

...您的代码将编译。


顺便说一句,array 是一个非常糟糕的变量名称,因为它很容易与数据类型混淆。即使使用玩具代码,使用清晰的名称也是值得的。即使 l_array 也会有所改善。