Problema con Oracle y PL/SQL, resultados distintos para la misma query

galansinchance

enajenao
Se incorporó
3 Enero 2006
Mensajes
7.424
Hola colegas,

Estoy pasando rabias con este pequeño procedimiento:

El procedimiento consiste en sacar los datos de una vista y meterlos en otra tabla, pero al encontrar conflictos con la llave única de la tabla me puse a ver un poco más arriba de dónde viene el problema y revisando me encuentro que si ejecuto la query directo en la BD, me trae un resultado que es el esperado (un rut), y si lo ejecuto en un statement me trae cualquier otro resultado menos lo que estoy buscando:

La query:

Código:
SELECT CLIENTE FROM "clientes_jde" WHERE RUT = '76950693-4' AND TIPOCLIENTE = 'C';
-- me trae el código de cliente que es el rut sin el guión (ej: 76950693)

El statement:

Código:
SET SERVEROUTPUT ON
DECLARE
rut NCHAR(20) := '76950693-4';
exist NUMBER;
an8 NUMBER;
BEGIN
  SELECT COUNT(1) INTO exist FROM "clientes_sgv" WHERE "rut" = rut;
  DBMS_OUTPUT.put_line ('El rut '|| TRIM(rut) || ' aparece ' || exist || ' veces');
  SELECT CLIENTE INTO an8 FROM "clientes_jde" WHERE RUT = rut AND TIPOCLIENTE = 'C' AND ROWNUM =1;
  DBMS_OUTPUT.put_line ('El an8 del rut '|| rut || ' es '|| an8);
END;

Si le saco la sentencia ROWNUM = 1, me reclama que trae muchos resultados, si se la dejo puesta, me trae un número ná que ver, asociado al rut de otro cliente.
 

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.768
¿Puedo conectarme remoto? Se ve interesante.
 
Upvote 0

galansinchance

enajenao
Se incorporó
3 Enero 2006
Mensajes
7.424
Ya lo resolví, el rut con minúscula oracle lo toma como mayúsculas, tuve que cambiar el nombre de la variable de rut a rutc y listo


Enviado desde mi JKM-LX3 mediante Tapatalk
 
Upvote 0

galansinchance

enajenao
Se incorporó
3 Enero 2006
Mensajes
7.424
No se puede editar, para ser más especifico, como puse rut como nombre de variable y oracle convierte en mayúscula confundiendo la variable con el nombre de la columna (que se llama RUT) y retorna todo

Enviado desde mi JKM-LX3 mediante Tapatalk
 
Upvote 0

brujoadr

Capo
Se incorporó
24 Septiembre 2019
Mensajes
488
Para evitar esos dolores de cabeza, usa como nombre de variable que comience con "_", a modo ejemplo rut pasa a _rut y así te evitas el conflicto q la variable tenga el mismo nombre q el campo de la tabla.
 
Upvote 0
Subir