![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Desde SQL el problema es el parametro ese que es de salida (OUT)
hago lo que me pusiste: select XXX(2,2,2,2,2,:cod) from dual; pero me devuelve : ORA-06572: La función XXX tiene argumentos externos Y luego desde el codigo lo mismo:
(probe a acabar la sentencia con ; y sin el, probe con ftFloat,ftInteger..., probe con open() y con execsql() y nada ... )me devuelve el mismo error: ORA-06572: La función XXX tiene argumentos externos segun este error no se puede invocar a funciones con parametros de salida sin embargo si defino primero la variable y luego lo invoco desde un bloque sql si que funciona ( ?¿?¿?¿?¿ )
Este codigo funciona bien. A alguien le ha pasado algo parecido ? Empiezo a odiar esto xD Gracias. |
|
#2
|
|||
|
|||
|
Hola de nuevo. Al final se ha modificado la funcion para que solo tenga parametros de entrada (plsql no permite parametros de salida para funciones).
Ejecuto la sentencia: declare ret number; begin ret := null; ret := nombre_funcion (); dbms_output.put_line('ret = ' || to_char(ret)); end; esto me muestra el resultado que yo espero, sin embargo no me lo muestra cuando hago desde codigo: select nombre_funcion() from dual (en ambos casos utilizo los mismos parametros). Nota: dentro de la funcion se hace un insert en una tabla, el primer caso lo hace bien por eso me devuelve lo que esperaba pero la segunda forma no hace bien el insert y por eso me devuelve una excepcion. a q puede ser debido esto? (Si intento hacer el insert a secas tambien me lo permite pero desde la funcion cuando utilizo la forma "select funcion() from dual" no). Gracias pos su ayuda, un saludo. |
|
#3
|
|||
|
|||
|
Bueno finalmente os comento como lo he solucionado.
Lo primero decir que las unicas funciones que se pueden llamar de la forma: Select nombrefuncion() FROM dual, son las funciones que ya vienen compiladas como AVG,SUM,MAX,sysdate... pero las funciones externas que crea el usuario no. Por lo tanto ante la dificultad de recoger la salida de la funcion he optado por cambiar las funciones por procedimientos almacenados, mucho mas sencillos de tratar gracias al componente TADOStoredProc. Aqui tb se me ha planteado otro problema ya que la asignacion del nombre del procedimiento la hago en tiempo de ejecución por lo que los parámetros de entrada no se generan automáticamente como me comentaba jachgyate y hay q crearlos desde codigo. Espero que a alguien le sirva de algo la explicación.Si alguien quiere algun trozo de codigo solo tiene que pedirlo. Un saludo ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Llamada a Procedimiento Almacenado desde dentro de un Thread | MontarazAE | MS SQL Server | 2 | 29-05-2007 17:46:34 |
| Problema con la llamada a un Procedimiento almacenado | Choclito | Firebird e Interbase | 3 | 06-12-2005 19:00:27 |
| Ayuda, como llamar a un procedimiento desde otro procedimiento? | Ariatna | Varios | 1 | 01-02-2005 04:05:35 |
| LLamada a un Procedimiento de un Paquete de Oracle | samuvk | JAVA | 11 | 18-05-2004 13:04:36 |
| Insertar un array en un procedimiento de Oracle con JDBC | samuvk | JAVA | 2 | 17-05-2004 17:59:48 |
|