es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DECLARACIÓN SELECT INTO DENTRO DE UN PROCEDIMIENTO SQL GENERANDO UN ERROR

Hola, quiero almacenar el valor de una instrucción SELECT en una variable y luego actualizar mi tabla utilizando esa variable dentro del procedimiento, pero hay un error. Todavía no sé si solo devuelve una columna y aún existe el siguiente error:

“exact fetch returns more than requested number of rows”.

Aquí hay un ejemplo del código demostrativo. ¿Alguien puede darme una alternativa de qué más puedo hacer aquí para hacer que funcione, ya que tengo muchas declaraciones PLSQL similares para poblar las columnas de la tabla?

create or replace procedure pcountry (country IN varchar) is
var_date Date;
begin

select date into var_date from countrytable where country=country;

update newtable
set date=var_date
where country=country
commit;

end pcountry;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error “exact fetch returns more than requested number of rows” ocurre cuando una sentencia SELECT devuelve varias filas, pero el código espera solo una fila.

    Para resolver este error, puedes modificar tu código para que use un cursor para recuperar los resultados y luego recorrer cada fila para almacenar el valor en una variable. Aquí hay un ejemplo de cómo puedes modificar tu código:

    CREATE OR REPLACE PROCEDURE pcountry (p_country IN VARCHAR2) IS
       var_date DATE;
       CURSOR c_date IS
          SELECT date FROM countrytable WHERE country = p_country;
    BEGIN
       OPEN c_date;
       LOOP
          FETCH c_date INTO var_date;
          EXIT WHEN c_date%NOTFOUND;
       END LOOP;
       CLOSE c_date;
    
       UPDATE newtable
       SET date = var_date
       WHERE country = p_country;
       COMMIT;
    END pcountry;
    

    En este código modificado, usamos un cursor para recuperar el valor de fecha de la tabla countrytable basado en el parámetro de entrada “p_country”. Luego almacenamos el valor de fecha en la variable “var_date” usando un bucle para recuperar cada fila del cursor. Finalmente, actualizamos la nueva tabla con el valor de fecha almacenado para el país especificado.

    Ten en cuenta que también debes usar el tipo de datos VARCHAR2 en lugar de VARCHAR en la declaración del parámetro de entrada para evitar posibles problemas.

Comments are closed.