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

Problemas con IF-ELSE y variables de usuario

Estas en el tema de Problemas con IF-ELSE y variables de usuario en el foro de Oracle en Foros del Web. Hola estudiosos ORACLE: Soy nuevo en estos asuntos y estoy haciendo un script en PL/SQL. Mi problema es que al ejecutar mi código no se ...
  #1 (permalink)  
Antiguo 10/11/2010, 12:24
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Información Problemas con IF-ELSE y variables de usuario

Hola estudiosos ORACLE:

Soy nuevo en estos asuntos y estoy haciendo un script en PL/SQL. Mi problema es que al ejecutar mi código no se respetan mis IF-ELSE y siempre se piden todas las variables de usuario que están, dando un resultado que no deseo. Alguien me comentó que eso se debe a que antes de ejecutar cualquier cosa primero se hace un parsing de todas las variables, de modo que los IF-ELSE de nada me sirven. ¿Alguien sabe cómo arreglarlo o modificarlo para que corra como lo muestra la lógica del script?


set serveroutput on

DECLARE
CURSOR c_dba IS SELECT username FROM dba_users WHERE username='&Usuario';
temp varchar2(30);
num_reg int:=0;
login varchar2(8);
pass varchar2(20);
nom varchar2(20);
secnom varchar2(20);
apa varchar2(20);
ama varchar2(20);
num varchar2(20);
opcion varchar(10);

BEGIN
-----VALIDANDO AL USUARIO-----
OPEN c_dba;
LOOP
FETCH c_dba INTO temp;
EXIT WHEN c_dba%NOTFOUND;
num_reg:=num_reg+1;
END LOOP;
CLOSE c_dba;
DBMS_OUTPUT.put_line('Numero de reg : '||num_reg);
IF (num_reg=1) THEN
DBMS_OUTPUT.put_line('Ya existe el usuario.');
opcion:='&Baja_o_cambio';
IF opcion='baja' THEN temp:='BAJA';
ELSIF opcion='cambio' THEN temp:='CAMBIO';
END IF;
DBMS_OUTPUT.put_line(temp);
ELSE
DBMS_OUTPUT.put_line('No existe el usuario. Se creará...');
nom:='&Nombre';
apa:='&aPaterno';
ama:='&aMaterno';
num:='&Numero';
IF(LENGTH(REPLACE(nom, ' ', ''))<>LENGTH(nom))
THEN
secnom:=SUBSTR(nom, INSTR(nom, ' ')+1, LENGTH(nom));
login:= SUBSTR(apa, 1, 1)||SUBSTR(ama, 1, 1)||SUBSTR(nom, 1, 1)||SUBSTR(secnom, 1, 1)||num;
ELSE
login:= SUBSTR(apa, 1, 2)||SUBSTR(ama, 1, 1)||SUBSTR(nom, 1, 1)||num;
END IF;
login:=UPPER(login);
DBMS_OUTPUT.put_line(login);
pass:='metlife'||SUBSTR(TO_CHAR(SYSDATE, 'DD/MM/YYYYY'), 1, 2);
DBMS_OUTPUT.put_line(pass);
END IF;
END;


Les doy las gracias anticipadamente.
  #2 (permalink)  
Antiguo 17/11/2010, 09:51
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años, 8 meses
Puntos: 6
Respuesta: Problemas con IF-ELSE y variables de usuario

Hola,

No veo error en el script. Si puedes plantea el funcionamiento.

Probe: Un usuario que exista con opcion baja, con opcion cambio y un usuario que no existe y los if funcionan bien, mas no se exactamente cual es el flujo de funcionamiento que tu requieres.

Saludos,
  #3 (permalink)  
Antiguo 17/11/2010, 11:15
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Problemas con IF-ELSE y variables de usuario

Gracias por responder 8vio:

El flujo es tal como creo que lo estás entendiendo. Se pide por un usuario, si existe te da la opción de baja o cambio; si no existe, se piden sus datos para crearle un login y contraseña. Eso es todo.

Mi problema es que al ejecutarlo me pide &usuario, &baja_o_cambio, &nombre, &aPaterno, &aMaterno y &Numero, lo cual no debería de pasar. O bien debe pedir unas variables u otras, pero no todas.

Espero puedas ayudarme.
  #4 (permalink)  
Antiguo 17/11/2010, 16:23
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Problemas con IF-ELSE y variables de usuario

El unperson lo entiende el parseador de Oracle como variables a las que hay que dar un valor, pase el programa por ahí o no pase.

Prueba esto y lo veras mas claro :

DECLARE
-- &FECHA
A DATE;
BEGIN
SELECT SYSDATE INTO A FROM DUAL;
END;
/

SQL > introduzca valor para fecha
&FECHA
valor anterior
valor posterior


Te lo digo de corrido ( no estoy en el curro ) y me puedo confundir en el orden que lo he puesto, pero en el contexto general es así
  #5 (permalink)  
Antiguo 17/11/2010, 16:42
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Problemas con IF-ELSE y variables de usuario

Gracias por tu respuesta jc3000.

Sin embargo, lo que tu comentas ya lo sabía. Es por eso que les pido una orientación acerca de cómo modificar mi script de modo que corra tal y como la lógica del código lo indica.

Me han dicho que necesito hacerlo por medio de bind variables (variables de enlace), pero la verdad no se me ocurre cómo. Si saben algo, se los agradeceré.

Etiquetas: if_else, plsql, variables, usuarios
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 16:12.