PL / SQL - Variáveis
Neste capítulo, discutiremos Variáveis em Pl / SQL. Uma variável nada mais é que um nome dado a uma área de armazenamento que nossos programas podem manipular. Cada variável no PL / SQL possui um tipo de dado específico, que determina o tamanho e o layout da memória da variável; a faixa de valores que podem ser armazenados nessa memória e o conjunto de operações que podem ser aplicadas à variável.
O nome de uma variável PL / SQL consiste em uma letra seguida opcionalmente por mais letras, números, cifrões, sublinhados e sinais numéricos e não deve exceder 30 caracteres. Por padrão, os nomes das variáveis não fazem distinção entre maiúsculas e minúsculas. Você não pode usar uma palavra-chave PL / SQL reservada como nome de variável.
A linguagem de programação PL / SQL permite definir vários tipos de variáveis, como tipos de dados de data e hora, registros, coleções, etc. que abordaremos nos capítulos subsequentes. Para este capítulo, vamos estudar apenas os tipos básicos de variáveis.
Declaração de variável em PL / SQL
As variáveis PL / SQL devem ser declaradas na seção de declaração ou em um pacote como uma variável global. Quando você declara uma variável, o PL / SQL aloca memória para o valor da variável e o local de armazenamento é identificado pelo nome da variável.
A sintaxe para declarar uma variável é -
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]
Onde nome_variável é um identificador válido em PL / SQL, tipo de dados deve ser um tipo de dados PL / SQL válido ou qualquer tipo de dados definido pelo usuário que já discutimos no último capítulo. Algumas declarações de variáveis válidas junto com sua definição são mostradas abaixo -
sales number(10, 2);
pi CONSTANT double precision := 3.1415;
name varchar2(25);
address varchar2(100);
Quando você fornece um limite de tamanho, escala ou precisão com o tipo de dados, ele é chamado de constrained declaration. As declarações restritas requerem menos memória do que as declarações irrestritas. Por exemplo -
sales number(10, 2);
name varchar2(25);
address varchar2(100);
Inicializando Variáveis em PL / SQL
Sempre que você declara uma variável, o PL / SQL atribui a ela um valor padrão NULL. Se você deseja inicializar uma variável com um valor diferente do valor NULL, você pode fazer isso durante a declaração, usando um dos seguintes -
o DEFAULT palavra chave
o assignment operador
Por exemplo -
counter binary_integer := 0;
greetings varchar2(20) DEFAULT 'Have a Good Day';
Você também pode especificar que uma variável não deve ter um NULL valor usando o NOT NULLrestrição. Se você usar a restrição NOT NULL, deverá atribuir explicitamente um valor inicial para essa variável.
É uma boa prática de programação inicializar as variáveis corretamente, caso contrário, às vezes os programas produziriam resultados inesperados. Experimente o seguinte exemplo que usa vários tipos de variáveis -
DECLARE
a integer := 10;
b integer := 20;
c integer;
f real;
BEGIN
c := a + b;
dbms_output.put_line('Value of c: ' || c);
f := 70.0/3.0;
dbms_output.put_line('Value of f: ' || f);
END;
/
Quando o código acima é executado, ele produz o seguinte resultado -
Value of c: 30
Value of f: 23.333333333333333333
PL/SQL procedure successfully completed.
Escopo variável em PL / SQL
PL / SQL permite o aninhamento de blocos, ou seja, cada bloco de programa pode conter outro bloco interno. Se uma variável é declarada dentro de um bloco interno, ela não é acessível ao bloco externo. No entanto, se uma variável for declarada e acessível a um bloco externo, ela também será acessível a todos os blocos internos aninhados. Existem dois tipos de escopo de variável -
Local variables - Variáveis declaradas em um bloco interno e não acessíveis aos blocos externos.
Global variables - Variáveis declaradas no bloco mais externo ou um pacote.
O exemplo a seguir mostra o uso de Local e Global variáveis em sua forma simples -
DECLARE
-- Global variables
num1 number := 95;
num2 number := 85;
BEGIN
dbms_output.put_line('Outer Variable num1: ' || num1);
dbms_output.put_line('Outer Variable num2: ' || num2);
DECLARE
-- Local variables
num1 number := 195;
num2 number := 185;
BEGIN
dbms_output.put_line('Inner Variable num1: ' || num1);
dbms_output.put_line('Inner Variable num2: ' || num2);
END;
END;
/
Quando o código acima é executado, ele produz o seguinte resultado -
Outer Variable num1: 95
Outer Variable num2: 85
Inner Variable num1: 195
Inner Variable num2: 185
PL/SQL procedure successfully completed.
Atribuição de resultados de consulta SQL a variáveis PL / SQL
Você pode usar o SELECT INTOinstrução de SQL para atribuir valores a variáveis PL / SQL. Para cada item noSELECT list, deve haver uma variável compatível com o tipo correspondente no INTO list. O exemplo a seguir ilustra o conceito. Vamos criar uma tabela chamada CLIENTES -
(For SQL statements, please refer to the SQL tutorial)
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
Table Created
Vamos agora inserir alguns valores na tabela -
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
O programa a seguir atribui valores da tabela acima para variáveis PL / SQL usando o SELECT INTO clause de SQL -
DECLARE
c_id customers.id%type := 1;
c_name customers.name%type;
c_addr customers.address%type;
c_sal customers.salary%type;
BEGIN
SELECT name, address, salary INTO c_name, c_addr, c_sal
FROM customers
WHERE id = c_id;
dbms_output.put_line
('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal);
END;
/
Quando o código acima é executado, ele produz o seguinte resultado -
Customer Ramesh from Ahmedabad earns 2000
PL/SQL procedure completed successfully