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.

TABLA DE VARCHAR2 en la cláusula WHERE.

El código está simplificado. Tengo un tipo:

CREATE TYPE str_tab_t IS TABLE OF VARCHAR2(20);

Aquí está una función:

FUNCTION MYFUNCTION(myVar IN str_tab_t ) RETURN VARCHAR
myVar2 NUMBER; 
BEGIN
  SELECT MYCOLUMN INTO myVar2  FROM MYTABLE WHERE MYCOLUMN IN(SELECT * FROM myVar );
  RETURN myVar2 ;
END MYFUNCTION;

Me pregunto si es posible llamar a la función así:

MYFUNCTION(str_tab_t ('abc'));

Como estoy obteniendo el error ORA-01722. No creo que sea por una consulta incorrecta. Creo que estoy pasando el argumento de manera incorrecta. ¿Podría alguien darme alguna pista? ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error ORA-01722 está relacionado con la conversión de datos. Significa que el código está intentando convertir una cadena no numérica en un número. En este caso, podría ocurrir porque la variable MYCOLUMN en la sentencia SELECT es de tipo numérico, pero la función está tratando de seleccionar valores de una tabla de cadenas (str_tab_t).

    Para llamar a la función correctamente, es necesario pasar una tabla de cadenas como argumento. Esto se puede hacer creando una nueva instancia del tipo str_tab_t y agregando las cadenas como elementos de la tabla. Aquí hay un ejemplo de código:

    DECLARE
      myVar str_tab_t := str_tab_t('abc');
      result VARCHAR2(100);
    BEGIN
      result := MYFUNCTION(myVar);
      dbms_output.put_line(result);
    END;
    

    En este código, declaramos una nueva variable myVar del tipo str_tab_t e inicializamos con un solo elemento de cadena 'abc'. Luego llamamos a la función MYFUNCTION con myVar como argumento y almacenamos el resultado en la variable result. Finalmente, imprimimos el valor de result usando el procedimiento dbms_output.put_line.

    Este código debería funcionar correctamente siempre y cuando la variable MYCOLUMN en la sentencia SELECT sea del mismo tipo que los elementos en la tabla str_tab_t. De lo contrario, puede ser necesario hacer alguna conversión de datos dentro de la función para asegurarse de que los tipos coincidan.

Comments are closed.