Sql INSERT INTO插入一行空值
我有以下代码(一个调用另一个函数的函数)。在我的第二个函数中,“INSERT-INTO”行尝试插入一行空值。为什么会发生这种情况Sql INSERT INTO插入一行空值,sql,postgresql,plpgsql,database-cursor,Sql,Postgresql,Plpgsql,Database Cursor,我有以下代码(一个调用另一个函数的函数)。在我的第二个函数中,“INSERT-INTO”行尝试插入一行空值。为什么会发生这种情况 CREATE OR REPLACE FUNCTION LIMPIA_REPETIDOS() RETURNS VOID AS $$ DECLARE REP RECORD; cursor1 CURSOR FOR SELECT DISTINCT usuario, fecha_hora_ret, tiempo_us
CREATE OR REPLACE FUNCTION LIMPIA_REPETIDOS()
RETURNS VOID AS $$
DECLARE
REP RECORD;
cursor1 CURSOR FOR SELECT DISTINCT usuario, fecha_hora_ret, tiempo_uso FROM auxi ORDER BY tiempo_uso DESC;
begin
open cursor1;
LOOP
FETCH cursor1 INTO REP;
EXIT WHEN NOT FOUND;
PERFORM GUARDA(REP.usuario, REP.fecha_hora_ret);
END LOOP;
CLOSE cursor1;
end;
$$ LANGUAGE PLPGSQL;
CREATE OR REPLACE FUNCTION GUARDA
(myid auxi.usuario%TYPE, my_time auxi.fecha_hora_ret%type) RETURNS VOID AS $$
DECLARE
mycursor CURSOR FOR
SELECT * FROM auxi
WHERE myid = usuario AND my_time = fecha_hora_ret
ORDER BY tiempo_uso;
CANT INT;
mystruct RECORD;
BEGIN
OPEN mycursor;
CANT = 0;
LOOP
FETCH mycursor INTO mystruct;
EXIT WHEN NOT FOUND;
IF CANT = 2 THEN
INSERT INTO RECORRIDO_FINAL VALUES(mystruct.periodo, mystruct.usuario, mystruct.fecha_hora_ret, mystruct.est_origen, mystruct.est_origen, crear_fecha_hora_devolucion(mystruct.tiempo_uso, mystruct.fecha_hora_ret));
END IF;
CANT := CANT + 1;
END LOOP;
IF CANT = 1 THEN
INSERT INTO RECORRIDO_FINAL VALUES(mystruct.periodo, mystruct.usuario, mystruct.fecha_hora_ret, mystruct.est_origen, mystruct.est_destino, crear_fecha_hora_devolucion(mystruct.tiempo_uso, mystruct.fecha_hora_ret) );
END IF;
CLOSE mycursor;
END;
$$ LANGUAGE PLPGSQL;
我在这里要做的是从一个名为“auxi”的表中选择行,然后将它们转移到另一个表中。问题是,当我在“auxi”中有两行或更多行的“usuario”和“fecha_hora_ret”值相同时,我必须按“tiempo_uso”对它们进行排序,然后选择第二行。当执行EXIT when NOT FOUND时,变量
mystruct
将不包含任何值,因为您已经遍历了列表中的所有行光标
因此,当您退出游标仅包含一行的情况下的循环时,INSERT将使用一个空的mystruct
执行