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!
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 variableMYCOLUMN
en la sentenciaSELECT
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:En este código, declaramos una nueva variable
myVar
del tipostr_tab_t
e inicializamos con un solo elemento de cadena'abc'
. Luego llamamos a la funciónMYFUNCTION
conmyVar
como argumento y almacenamos el resultado en la variableresult
. Finalmente, imprimimos el valor deresult
usando el procedimientodbms_output.put_line
.Este código debería funcionar correctamente siempre y cuando la variable
MYCOLUMN
en la sentenciaSELECT
sea del mismo tipo que los elementos en la tablastr_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.