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

Función en Oracle

Estas en el tema de Función en Oracle en el foro de Oracle en Foros del Web. Haber si alguien me puede ayudar. Estoy iniciando con oracle y solamente me han instalado el cliente de este; así que uso el Sql plus ...
  #1 (permalink)  
Antiguo 24/10/2007, 17:36
 
Fecha de Ingreso: septiembre-2005
Mensajes: 73
Antigüedad: 19 años, 3 meses
Puntos: 0
Función en Oracle

Haber si alguien me puede ayudar. Estoy iniciando con oracle y solamente me han instalado el cliente de este; así que uso el Sql plus para realizar consultas y creación de tablas y otras cosas.

En esta ocasión estoy intentando crear una función pero no me deja crearla. lo que hago es teclear lo siguiente en el sql plus pero no me deja salir del modo de edición... me sigue poniendo numeros para seguir escribiendo.. no se si deba poner alguna instrucción en especial para hacerle saber que mi consulta a finalizado. Gracias de antemano

Código:
SQL> CREATE OR REPLACE FUNCTION CONVERT(Tipo IN VARCHAR2, Fecha IN DATE, Formato IN NUMBER)
  2  RETURN VARCHAR2
  3  IS
  4  sFecha VARCHAR2(10);
  5  BEGIN
  6  CASE Formato 
  7  WHEN 101 THEN sFecha := TO_CHAR(Fecha, 'MM/DD/YYYY');
  8  WHEN 105 THEN sFecha:=TO_CHAR(Fecha, 'DD-MM-YY');
  9  WHEN 112 THEN sFecha:= TO_CHAR(Fecha, 'YYMMDD');
 10  ELSE sFecha :='';
 11  END CASE;
 12  RETURN sFecha;
 13  END CONVERT;
 14 
 15
__________________
Henry :-D
  #2 (permalink)  
Antiguo 25/10/2007, 00:18
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Re: Función en Oracle

En la linea 14 pon la barrita de dividir : /
  #3 (permalink)  
Antiguo 25/10/2007, 08:14
 
Fecha de Ingreso: septiembre-2005
Mensajes: 73
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo Re: Función en Oracle

Gracias, me funcionó bien, ahora si ya me dice que la función se creó correctamente.
__________________
Henry :-D
  #4 (permalink)  
Antiguo 25/10/2007, 08:45
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Re: Función en Oracle

De nada, pa eso estamos.

La barrita de dividir al final, mas o menos viene a decir : Sr. Oracle, ya he terminado, verifica que el pl está correcto y oracle hace un parse del pl y si ve algo raro te lo dice, en caso contrario te dice : Todo OK

Si tienes mas dudas ya sabes.
  #5 (permalink)  
Antiguo 25/10/2007, 08:57
 
Fecha de Ingreso: septiembre-2005
Mensajes: 73
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Función en Oracle

OK, ya andando por estos lugares... como te comente estoy empezando con Oracle. Quisiera saber si es posible tener varias funciones con el mismo nombre y que sólo cambien en los parámetros de entrada y el valor devuelto.???
__________________
Henry :-D
  #6 (permalink)  
Antiguo 25/10/2007, 10:19
 
Fecha de Ingreso: octubre-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Función en Oracle

Si, se puede, aunque creo que esto te devuelve un warning.
  #7 (permalink)  
Antiguo 25/10/2007, 10:37
 
Fecha de Ingreso: septiembre-2005
Mensajes: 73
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Función en Oracle

Haber haber, he estado leyendo un poco y segun esto solamente se puede hacer esto por medio de paquetes.
El paquete si puede contener funciones con el mismo nombre y diferentes parámetos.
Si es que no hay otra forma entonces supongo que tendre que hacer paquetes, porque ya intenté generar dos funciones con el mismo nombre y me reemplaza la anterior o me da el error de que ya existe.
Aprovechando. la siguiente función me da un el error:

"Warning: Function created with compilation errors."

la función:
Código:
CREATE OR REPLACE FUNCTION CONVERT(Tipo IN VARCHAR2, Dato IN VARCHAR2)
RETURN NUMBER(9)
IS
sEntero NUMBER(9);
BEGIN
CASE Tipo
WHEN 'INT' THEN sEntero := TO_NUMBER(Dato, '999,999,999.00');
ELSE sEntero := 0;
END CASE;
RETURN (sEntero);
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,'Ocurrió un error en función CONVERT(Tipo, Dato) - '|| SQLCODE || ' -ERROR- '|| SQLERRM);
END CONVERT;
Alguien puede decirme a que se puede deber.
__________________
Henry :-D
  #8 (permalink)  
Antiguo 25/10/2007, 12:43
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Re: Función en Oracle

Pues no vendría mal que pusieras el error que te dá y adelantandome a tu pregunta te diré que eso lo ves tecleando en el plus esto :

show err

Pero así a bote pronto veo dos cosas "raras" :

RETURN NUMBER(9) : Cambialo por RETURN NUMBER

Y esto :

(-20001,'Ocurrió un error en función CONVERT(Tipo, Dato) - '|| SQLCODE || ' -ERROR- '|| SQLERRM);

Cambialo por esto :

error_char := sqlerrm;
error_number := sqlcode;
(-20001,'Ocurrió un error en función CONVERT(Tipo, Dato) - '|| error_number|| ' -ERROR- '|| error_char);

Ya nos contarás
  #9 (permalink)  
Antiguo 26/10/2007, 08:00
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 9 meses
Puntos: 7
Re: Función en Oracle

Cita:
Iniciado por jc3000 Ver Mensaje
Pues no vendría mal que pusieras el error que te dá y adelantandome a tu pregunta te diré que eso lo ves tecleando en el plus esto :

show err

Pero así a bote pronto veo dos cosas "raras" :

RETURN NUMBER(9) : Cambialo por RETURN NUMBER

Y esto :

(-20001,'Ocurrió un error en función CONVERT(Tipo, Dato) - '|| SQLCODE || ' -ERROR- '|| SQLERRM);

Cambialo por esto :

error_char := sqlerrm;
error_number := sqlcode;
(-20001,'Ocurrió un error en función CONVERT(Tipo, Dato) - '|| error_number|| ' -ERROR- '|| error_char);

Ya nos contarás

nunca me ha gustado crear variables inecesarias, tal y como estaba deberia de correr, si manda error tal vez solo sea necesario una conversion con to_char y punto
__________________
Blogzote.com :-) Mi blog
  #10 (permalink)  
Antiguo 26/10/2007, 10:06
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Re: Función en Oracle

Pues creo -- aunque no lo aseguro al 100x100 -- que estás equivocado kikolice.
Creo recordar -- hace mucho que no tiro código -- que el sqlerrm y el sqlcode no se podían utilizar directamente, si no que habia que metrelas en variables.

Me suena mucho que el hacer esto :

insert into tabla ( campo_error ) values (sqlerrm)

Oracle te chillaba y te daba error, de ahí la asignación a las variables.

No es lo mismo, pero si parecido. De todas maneras, nada tan facil como probarlo, eso no te chilla en ejecución , si no en compilación.

El Lunes cuando esté en el curro , si me acuerdo y me lo permiten mis tareas lo pruebo y lo posteo.

Buen finde
  #11 (permalink)  
Antiguo 29/10/2007, 03:02
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Re: Función en Oracle

Pues tienes razón kikolice.
El codigo que pone en el raise es correcto. Lo que te da error es utilizar el sqlerrm en un insert, para eso tienes que utilizar variables.
Si haces esto :
INSERT INTO TABLA
(CAMPO_ERROR)
VALUES
(SQLERRM);

Oracle te suelta esto :

ORA-00984: columna no permitida aquí
  #12 (permalink)  
Antiguo 02/11/2007, 17:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 73
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Función en Oracle

OK. Ya lo hice. lo que pasaba es que esto:
RETURN NUMBER(9)
lo tenía que reemplazar por:
RETURN NUMBER

Gracias
__________________
Henry :-D
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 11:23.