[Tip] Alcance de variables

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Notael Mié, 26 May 2004 6:55 pm

Vea Qué interesante esto: he creado 2 bloques (uno dentro del otro) para declarar la misma variable. Encontré que el oráculo funciona como Java en términos de "alcance" de las variables: las variables en su valor de su alcance.

Código: Seleccionar todo
DECLARE VTEMP NUMBER:=5;
BEGIN
  DBMS_OUTPUT.PUT_LINE(VTEMP);

  DECLARE VTEMP NUMBER:=10;
  BEGIN
    DBMS_OUTPUT.PUT_LINE(VTEMP);
  END;

  DBMS_OUTPUT.PUT_LINE(VTEMP);
END;
/

5
10
5

PL/SQL procedure successfully completed.
dr_gori
Ubicación: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Notael Sab, 26 May 2012 9:41 am

Po super cool.
¿Podría detalle cómo funciona estos anidar bloques?
En delphi se utiliza mucho, pero lo dudo el plsql con el uso de lo.

Agradçeo.
abarbosa

Notael Lun, 28 May 2012 9:09 am

Entonces, un anidados cuando no hay declaración de variables del bloque, para administrar las excepciones a ese bloque.
El valor de las variables definidas fuera del bloque, son válido y pueden ser manejados normalmente dentro del bloque.
Ejemplo:
Código: Seleccionar todo
SQL> set serveroutput on
SQL> DECLARE
  2     vtemp  NUMBER:=10;
  3  BEGIN
  4 
  5    DBMS_OUTPUT.PUT_LINE ( vtemp );
  6    --nao tem outra declaracao!
  7    BEGIN
  8      DBMS_OUTPUT.PUT_LINE ( vtemp );
  9      vtemp := 20;
10      --aqui  vai um select...
11      EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
12    END;
13    DBMS_OUTPUT.PUT_LINE ( vtemp );
14  END;
15  /

10
10
20

PL/SQL procedure successfully completed

SQL>
tiene este otro ejemplo, cuando tenemos una declaración dentro del otro. Si variable diferentes nombres, es lo mismo. La única diferencia y que la variable declarada dentro del bloque desde el interior existe sólo dentro de ese bloque. Aquí está la prueba:
Código: Seleccionar todo
SQL> DECLARE
  2    vtemp  NUMBER:=10;
  3  BEGIN
  4    DECLARE outra NUMBER:=20;
  5    BEGIN
  6      DBMS_OUTPUT.PUT_LINE ( outra );
  7    END;
  8 
  9    DBMS_OUTPUT.PUT_LINE ( outra );   --citando fora do seu bloco!
10  END;
11  /

DECLARE
  vtemp  NUMBER:=10;
BEGIN
  DECLARE outra NUMBER:=20;
  BEGIN
    DBMS_OUTPUT.PUT_LINE ( outra );
  END;

  DBMS_OUTPUT.PUT_LINE ( outra );   --citando fora do seu bloco!
END;

ORA-06550: line 9, column 26:
PLS-00201: identifier 'OUTRA' must be declared
ORA-06550: line 9, column 3:
PL/SQL: Statement ignored

SQL>
ver que citando a la otra variable fuera de su bloque, no existe!

Y todavía tenemos ese ejemplo desde arriba, donde se declara dos variables con el mismo nombre, por lo tanto, el valor de la segunda sólo existe dentro de su bloque.
dr_gori
Ubicación: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered


  • See also
    Replies
    Views
    Last Post


Volver a PL/SQL

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados