1
resposta

[Dúvida] BLOCOS PAIS POSSUEM ACESSO AS VARIÁVEIS DOS BLOCOS FILHOS ?

CREATE OR REPLACE FUNCTION primeiraPL() RETURNS INTEGER AS $$
    DECLARE
      primeiraVariavel INTEGER DEFAULT 3;
    BEGIN
  primeiraVariavel := primeiraVariavel * 2;
      -- Vários Comandos em SQL
    DECLARE
        segundaVariavel INTEGER;
        BEGIN
      primeiraVariavel := 7;
      END;

      RETURN primeiraVariavel;
  END
$$ LANGUAGE plpgsql

Pois bem, foi ensinado que, por exemplo, o segundo bloco dessa função em PlPgSql possui acesso as variáveis do bloco pai, porém, os blocos pais possuem acesso as variáveis dos blocos filhos ??

Por exemplo, é perceptível que o bloco filho possui acesso a primeiraVariavel, variavel essa criada no bloco pai, porém, a segundaVariavel pode ser acessada pelo bloco pai ??

1 resposta

Oi, Davi! Tudo bem?

Os blocos pais não possuem acesso às variáveis dos blocos filhos. No seu exemplo, a segundaVariavel só pode ser acessada dentro do bloco filho onde ela foi declarada. Já a primeiraVariavel pode ser acessada tanto no bloco pai quanto no bloco filho, pois ela foi declarada dentro do bloco pai.

Isso ocorre em virtude da ideia de escopo, muito comum em várias linguagens de programação. Os escopos são espaços específicos em que são criadas variáveis, tudo declarado dentro desses locais não é acessível fora deles — e os blocos pai e filho que você trouxe são justamente escopos da função primeiraPL, sendo que o segundo (filho) tem acesso às informações do primeiro (pai), porém o contrário é inválido.

Espero ter ajudado, Davi. Se surgirem novas dúvidas, fico à disposição.

Um forte abraço!!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.