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

[SOLUCIONADO] NO guarda valor correcto en variable oracle psql

Estas en el tema de NO guarda valor correcto en variable oracle psql en el foro de Oracle en Foros del Web. Hola estoy haciendo un trabajo de U, Tengo una funcion en oracle 11g que trae concatenado varios telefonos. La prueba de mi consulata va así: ...
  #1 (permalink)  
Antiguo 25/07/2013, 13:57
Avatar de eaanillol  
Fecha de Ingreso: septiembre-2010
Ubicación: Bogota - Colombia
Mensajes: 25
Antigüedad: 13 años, 7 meses
Puntos: 0
NO guarda valor correcto en variable oracle psql

Hola estoy haciendo un trabajo de U,

Tengo una funcion en oracle 11g que trae concatenado varios telefonos. La prueba de mi consulata va así:
Código SQL:
Ver original
  1. SELECT vxe.telefono1||'@'||vxe.telefono2  
  2.      FROM vehiculo vn, vehiculosxvitrina vxv, vitrinasxempresa vxe
  3.     WHERE vn.id=vxv.idvehiculo  AND vxv.idvitrina= vxe.id
  4.       AND vn.id= *id de mi vehiculo* AND rownum = 1;

y obtengo: 2787777@3138008024 que son los tels que necesito.

Ahora en el psql tengo:
Código SQL:
Ver original
  1. CREATE OR REPLACE
  2. FUNCTION traertelvendedorusado_2 (idVehiculo INTEGER) RETURN VARCHAR2 IS
  3.     resultado VARCHAR2(9999);
  4.   telefono VARCHAR2(99);
  5.   telefono1 VARCHAR2(99);
  6.   tam INTEGER;
  7.   tam1 INTEGER;
  8.   tam2 INTEGER;
  9.   bandera INTEGER :=0;
  10.   existe INTEGER:=0;
  11. BEGIN
  12. resultado := 0;
  13. dbms_output.put_line('inicio');
  14. --verifico que se concesionario
  15. SELECT COUNT(*) INTO existe FROM visitor vi
  16. INNER JOIN vehiculo v ON v.id_usuario = vi.visitorid
  17. WHERE v.id = idVehiculo AND vi.company IS NOT NULL;
  18. dbms_output.put_line('existe es '||existe||' resultado es '||resultado);
  19.  
  20. --Si no es concesionario
  21. IF existe = 0 THEN
  22.     SELECT vi.cell   INTO resultado
  23.     FROM vehiculo ve, visitor vi
  24.     WHERE ve.id_usuario = vi.visitorid AND ve.id= idVehiculo;
  25. ELSE
  26.    /*Esta es la consulta implementada en el sql*/
  27.    SELECT  tel INTO resultado FROM (
  28.     SELECT vxe.telefono1||'@'||vxe.telefono1 AS tel  
  29.      FROM vehiculo vn
  30.      INNER JOIN vehiculosxvitrina vxv ON vn.id=vxv.idvehiculo
  31.      INNER JOIN vitrinasxempresa vxe ON vxv.idvitrina= vxe.id
  32.     WHERE vn.id= idVehiculo AND rownum = 1
  33.       )sub;
  34. END IF;
  35.  
  36. RETURN resultado;
  37. EXCEPTION
  38. WHEN others THEN
  39. RETURN ' ';
  40. END traertelvendedorusado_2;

al ejecutar me devuelve otros telefonos:
Código SQL:
Ver original
  1. SELECT traertelvendedorusado_2(*id de mi vehiculo*) FROM dual;
--el mismo que ejecute en consola

y me sale: 4473800@4473800
que es un telefono que nada que ver.

Alguna sugerencia.

GRacias
  #2 (permalink)  
Antiguo 25/07/2013, 14:32
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: NO guarda valor correcto en variable oracle psql

Ejecuta esto sin el procedimiento:
Código SQL:
Ver original
  1. SELECT vxe.telefono1||'@'||vxe.telefono1 AS tel  
  2.      FROM vehiculo vn
  3.      INNER JOIN vehiculosxvitrina vxv ON vn.id=vxv.idvehiculo
  4.      INNER JOIN vitrinasxempresa vxe ON vxv.idvitrina= vxe.id
  5.     WHERE vn.id= idVehiculo AND rownum = 1

Si te fijas, estas concatenando 2 veces vxe.telefono1. en la de arriba lo haces con vxe.telefono2.

Verifica que efectivamente es el resultado que esperas.

el resto del procedure lo veo bien.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/07/2013, 16:33
Avatar de eaanillol  
Fecha de Ingreso: septiembre-2010
Ubicación: Bogota - Colombia
Mensajes: 25
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: NO guarda valor correcto en variable oracle psql

Hola Sr. Huesos, sip se me escapo que en el código sql va es el valor de la de telefono 1 cpon telefono mil disculpas es por el corre corre.

Ejecuto la consulta que me das sin el procedimiento en el sqldeveloper:

Código SQL:
Ver original
  1. SELECT vxe.telefono1||'@'||vxe.telefono2 AS tel  
  2.          FROM vehiculo vn
  3.          INNER JOIN vehiculosxvitrina vxv ON vn.id=vxv.idvehiculo
  4.          INNER JOIN vitrinasxempresa vxe ON vxv.idvitrina= vxe.id
  5.         WHERE vn.id= idVehiculo AND rownum = 1;

y efectivamente me vota: 4473800@4473800

Estoy empezando a sospechar de ese valor que recibo en la función.
  #4 (permalink)  
Antiguo 25/07/2013, 16:53
Avatar de eaanillol  
Fecha de Ingreso: septiembre-2010
Ubicación: Bogota - Colombia
Mensajes: 25
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: NO guarda valor correcto en variable oracle psql

Ya lo solucioné ...
El problema era que el nombre de la variable que recibo es el mismo de una de las columnas de las tablas que cruzo y obviamente por el rownum trae lo primero que aparezca.

Cambie el nombre de la variable y ya funciona.


Gracias ¿Donde se dan puntos?
  #5 (permalink)  
Antiguo 26/07/2013, 07:53
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: NO guarda valor correcto en variable oracle psql

Me alegra que lo hayas solucionado.

Debajo de cada mensaje hay un link "Me gustó, !gracias!"
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: 11g, correcto, sql, valor, variable
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:11.