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. Hola buenas a todos tengo el siguiente problema, tengo la siguiente función de oracle: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Oracle: Ver original CREATE OR REPLACE FUNCTION cantidadSuministrada( ...
  #1 (permalink)  
Antiguo 20/01/2012, 07:13
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Función en Oracle

Hola buenas a todos tengo el siguiente problema, tengo la siguiente función de oracle:
Código Oracle:
Ver original
  1. CREATE OR REPLACE FUNCTION cantidadSuministrada(
  2.   p_pnom PIEZA.PNOMBRE%TYPE,
  3.   p_snom SUMINISTRADOR.SNOMBRE%TYPE
  4. )
  5.   return SP.CANT%TYPE
  6. AS
  7.   v_cant SP.CANT%TYPE;
  8. BEGIN
  9.   SELECT SUM(cant) INTO v_cant
  10.   FROM sp, suministrador, pieza
  11.   WHERE suministrador.snombre=p_snom
  12.   AND pieza.pnombre=p_pnom
  13.   AND suministrador.sno=sp.sno
  14.   AND pieza.pno=sp.pno;
  15.   return v_cant;
  16. END cantidadSuministrada;

Se crea correctamente, el problema es cuando la ejecuto. Lo hago con el siguiente código para que pregunte los parámetros de la función al usuario:

Código ORACLE:
Ver original
  1. DECLARE
  2.   v_pnom PIEZA.PNOMBRE%TYPE;
  3.   v_snom SUMINISTRADOR.SNOMBRE%TYPE;
  4. BEGIN
  5.   cantidadSuministrada('&v_pnom','&v_snom');
  6. END;

Pero cuando pongo los valores al ejecutarla me devuelve el siguiente error:

Código ERROR:
Ver original
  1. antiguo 5: cantidadSuministrada('&v_pnom','&v_snom');
  2. nuevo 5: cantidadSuministrada('Tuerca','Smith');
  3.  
  4.   cantidadSuministrada('Tuerca','Smith');
  5.   *
  6.  
  7. ERROR en línea 5:
  8. ORA-06550: línea 5, columna 3:
  9. PLS-00221: 'CANTIDADSUMINISTRADA' no es un procedimiento o no se ha definido
  10. ORA-06550: línea 5, columna 3:
  11. PL/SQL: Statement ignored

¿Alguien puede hecharme un cable? Seguramente sea alguna chorrada, pero como estoy aprendiendo y me e bloqueado ahí...


Un saludo y gracias!!
  #2 (permalink)  
Antiguo 20/01/2012, 09:50
Avatar de bitbow  
Fecha de Ingreso: julio-2006
Ubicación: Distrito Federal
Mensajes: 635
Antigüedad: 17 años, 9 meses
Puntos: 34
Respuesta: Función en Oracle

Hola!

por que no intentas ejecutarla con SELECT FUNCION(PARAM01, PARAM02) FORM DUAL

Saludos.
__________________
El ego es el mayor enemigo de un hombre inteligente.
  #3 (permalink)  
Antiguo 21/01/2012, 10:24
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Función en Oracle

Buenas, lo probé así tambien y me sale error tambien :(
  #4 (permalink)  
Antiguo 21/01/2012, 13:09
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Función en Oracle

Si haces así la llamada debería funcionar :

SELECT FUNCION ( PARAM1, PARAM2 ) INTO VARIABLE FROM DUAL;

O

var := FUNCION ( PARAM1, PARAM2 ) ;
  #5 (permalink)  
Antiguo 22/01/2012, 10:10
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Función en Oracle

Cita:
Iniciado por jc3000 Ver Mensaje
Si haces así la llamada debería funcionar :

SELECT FUNCION ( PARAM1, PARAM2 ) INTO VARIABLE FROM DUAL;

O

var := FUNCION ( PARAM1, PARAM2 ) ;
SELECT cantidadSuministrada('Tuerca','Smith') INTO v_cant FROM DUAL;

No funciona, probe a pasar los parámetros sin comillas y tampoco. Da el siguiente error:

Código ERROR:
Ver original
  1. SELECT cantidadSuministrada('Tuerca','Smith') INTO v_cant FROM DUAL
  2.                                                    *
  3.  
  4. ERROR en línea 1:
  5. ORA-00905: falta una palabra clave

v_cant := cantidadSuministrada(Tuerca,Smith);

tampoco me funciona, error:
Código ERROR:
Ver original
  1. SP2-0851: El comando que empieza por "v_cant := ..." no está disponible en iSQL*Plus


Un saludo :S
  #6 (permalink)  
Antiguo 22/01/2012, 10:16
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Función en Oracle

Así me funciona la ejecución de la función aparentemente, pero no me retorna el valor 'v_cant' que es la cantidad suministrada de una pieza de un suministrador

Haciendolo de la siguiente manera:
Código PL-SQL:
Ver original
  1. DECLARE
  2.       v_pnom PIEZA.PNOMBRE%TYPE;
  3.       v_snom SUMINISTRADOR.SNOMBRE%TYPE;
  4.       v_cant SP.CANT%TYPE;
  5. BEGIN
  6.     SELECT  cantidadSuministrada('&v_pnom','&v_snom') INTO v_cant FROM dual;
  7.     dbms_output.put_line(v_cant);
  8. END;

Me devuelve el siguiente mensaje:
Código Salida:
Ver original
  1. antiguo 6: SELECT cantidadSuministrada('&v_pnom','&v_snom') INTO v_cant FROM dual;
  2. nuevo 6: SELECT cantidadSuministrada('Tuerca','Smith') INTO v_cant FROM dual;
  3. Procedimiento PL/SQL terminado correctamente.

Pero debería mostrarme el v_cant... ¿qué hago mal?

Un saludo!!
  #7 (permalink)  
Antiguo 22/01/2012, 14:17
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Función en Oracle

Que falló más tonto, se me olvido el
Código PLSQL:
Ver original
  1. SET SERVEROUTPUT ON;

Un saludo y gracias a todos :)

Etiquetas: select, sql
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 22:49.