Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema En Oracle Con Insert Dentro De Una Funcion

Estas en el tema de Problema En Oracle Con Insert Dentro De Una Funcion en el foro de Oracle en Foros del Web. hola de nuevo... tengo un problema al ejecutar una funcion mediante la siguiente manera: - SELECT funcion('parametro') FROM DUAL Oracle me envia el siguiente error: ...
  #1 (permalink)  
Antiguo 25/05/2006, 11:54
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
Problema En Oracle Con Insert Dentro De Una Funcion

hola de nuevo...

tengo un problema al ejecutar una funcion mediante la siguiente manera:

- SELECT funcion('parametro') FROM DUAL

Oracle me envia el siguiente error:

ORA-14551: no se puede realizar una operación DML dentro de una consulta
ORA-06512: en "SHEMA.FUNCION", línea 7 

mi funcion lo que hace es insertar un registro, por lo tanto se que significa este error pero, si no se puede ejecutar una operacion de DML en un select, como llamo a mi funcion??? ya que debo ocuparla en una JSP...

Consulto al foro pq creo que es el mejor de TODOS....
DE Antemano Gracias
  #2 (permalink)  
Antiguo 25/05/2006, 12:11
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
Sabes compañero, mejor ese insert hazlo en un procedure, el parámetro será tu valor de entrada. En JSP debe haber comandos que permitan llamar al procedure que haz hecho, y bueno, eso si no sabria decirte.
En programación quizás puedan ayudarte en el comando, si es que no lo sabes claro.
Saludos....
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #3 (permalink)  
Antiguo 25/05/2006, 12:20
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 11 meses
Puntos: 11
Definitivamente las funciones son para realizar calculos y no transacciones; las transacciones dejalas a los procedmientos. Si necesitas que tu procedimiento te regrese alguna variable debes definirla de entrada y salida IN OUT y asunto arreglado
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #4 (permalink)  
Antiguo 25/05/2006, 12:36
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
ok, me queda claro, ahora entonces deberia ejecutar el procedimiento asi?

CALL procedimiento(parametro_in_out)

???
  #5 (permalink)  
Antiguo 25/05/2006, 13:13
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 11 meses
Puntos: 11
simplemente CALL procedimiento(parametro)

en el procedimiento cuando lo creas seria algo asi:

Create or Replace Procedure miprocedimiento ( parametro1 in out varchar2) is
begin
null;
End;
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #6 (permalink)  
Antiguo 25/05/2006, 14:15
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
Por lo que he encontrado me parece que con estos comando ejecutas tu procedimiento:
CallableStatement cs = con.prepareCall("{call nom_procedimiento(parametros)}");
ResultSet rs = cs.executeQuery();

Pero antes debes crear el procedure en la BD, tal como te lo dijo Linterns. Aunque si vas a hacer un insert nada mas, mejor seria que ejecutes ese insert desde JSP.

Dos links:
http://java.sun.com/docs/books/tutor...asics/sql.html
Para llamar a stored procedure, guiate de la segunda parte.

http://www.programacionfacil.com/javajsp/ocho8.htm
Para el insert.

Saludos....
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #7 (permalink)  
Antiguo 30/05/2006, 16:37
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
Gracias

Gracias Por Todo Se Pasaron, Son Muy Utiles Sus Consejos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:42.