为什么 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
也会有所改善。
菜鸟问题,为什么会这样:
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
也会有所改善。