生成包含更新的过程时出现问题



当我试图在Oracle中创建一个存储过程时,我需要的是用插入用户的id1更新一个表,另一个id2和id3用于相同的函数,但我不能用一个来完成,我为此使用更新,然后我使用这个案例,因为它必须是随机的,然后我创建一个变量,分配从1到3的数字,根据这个变量,我选择要执行的案例

我想做的代码是这个

CREATE OR REPLACE PROCEDURE AERO_COR(ID1 IN INT, ID2 IN INT, ID3 IN INT) IS
ID         INT;
NOMBRE     VARCHAR2(50);
ID_PA      INT;
ID_PR      INT;
CONTADOROP INT;
CURSOR CURSOR_AEROPUERTO IS
SELECT * FROM TABLE(AEROPUERTO);
FILA_CURSOR CURSOR_AEROPUERTO%ROWTYPE;
BEGIN
OPEN CURSOR_AEROPUERTO;
CONTADOROP := ROUND(DBMS_RANDOM.VALUE(1, 3));
LOOP
FETCH CURSOR_AEROPUERTO
INTO FILA_CURSOR;
EXIT WHEN CURSOR_AEROPUERTO%NOTFOUND;

UPDATE AEROPUERTO
SET AEROPUERTO.ID_PRINCIPAL = CASE  WHEN CONTADOROP = '1' THEN ID1
WHERE AEROPUERTO.ID BETWEEN 1 AND 7,  WHEN CONTADOROP = '2' THEN ID1
WHERE AEROPUERTO.ID BETWEEN 7 AND 14, WHEN CONTADOROP = '3' THEN ID1
WHERE AEROPUERTO.ID BETWEEN 14 AND 20,
--ELSE 3 WHERE AEROPUERTO.ID BETWEEN 14 AND 20
WHERE AEROPUERTO.ID != NULL;
END LOOP;
CLOSE CURSOR_AEROPUERTO;
END;
/

我想我今天已经看到了查询,即使在那时我也没有得到逻辑。

我已经告诉过你,你的查询没有意义,因为WHen没有

但是你可以把条件安到何时,你需要一个,正如我在早些时候评论中的链接中向你展示的那样

所以使用这个,看看它是否有效。

它通常试图建立互斥条件,所以我还添加了一个ELSE,因为如果AEROPUERTO,你会怎么做。ID为15,但CONTADOROP为'2'

所以我认为你需要再次检查逻辑。

UPDATE AEROPUERTO SET AEROPUERTO.ID_PRINCIPAL =
CASE
WHEN CONTADOROP = '1' AND AEROPUERTO.ID BETWEEN 1 AND 7 THEN
ID1 
WHEN CONTADOROP = '2' AND AEROPUERTO.ID BETWEEN 7 AND 14 THEN
ID1 
WHEN CONTADOROP = '3' AND AEROPUERTO.ID BETWEEN 14 AND 20 THEN
ID1 
ELSE -1  --maybe you need also one of the, because the condotions are not exclusive
END 
--ELSE 3 WHERE AEROPUERTO.ID BETWEEN 14 AND 20
WHERE AEROPUERTO.ID != NULL;

最新更新