Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql INSERT INTO插入一行空值_Sql_Postgresql_Plpgsql_Database Cursor - Fatal编程技术网

Sql 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

我有以下代码(一个调用另一个函数的函数)。在我的第二个函数中,“INSERT-INTO”行尝试插入一行空值。为什么会发生这种情况

    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
执行