PL / SQL - zmienne
W tym rozdziale omówimy zmienne w Pl / SQL. Zmienna to nic innego jak nazwa nadana obszarowi pamięci, którym nasze programy mogą manipulować. Każda zmienna w PL / SQL ma określony typ danych, który określa rozmiar i układ pamięci zmiennej; zakres wartości, które mogą być przechowywane w tej pamięci, oraz zbiór operacji, które można zastosować do zmiennej.
Nazwa zmiennej PL / SQL składa się z litery, po której opcjonalnie może następować więcej liter, cyfr, znaków dolara, podkreśleń i znaków liczbowych i nie powinna przekraczać 30 znaków. Domyślnie w nazwach zmiennych wielkość liter nie jest rozróżniana. Nie można użyć zastrzeżonego słowa kluczowego PL / SQL jako nazwy zmiennej.
Język programowania PL / SQL pozwala na zdefiniowanie różnych typów zmiennych, takich jak typy danych daty i godziny, rekordy, zbiory itp., Które omówimy w kolejnych rozdziałach. W tym rozdziale przyjrzyjmy się tylko podstawowym typom zmiennych.
Deklaracja zmiennej w PL / SQL
Zmienne PL / SQL muszą być zadeklarowane w sekcji deklaracji lub w pakiecie jako zmienna globalna. Kiedy deklarujesz zmienną, PL / SQL alokuje pamięć dla wartości zmiennej, a miejsce przechowywania jest identyfikowane przez nazwę zmiennej.
Składnia deklarowania zmiennej to -
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]
Gdzie nazwa_zmiennej jest poprawnym identyfikatorem w PL / SQL, typ danych musi być prawidłowym typem danych PL / SQL lub dowolnym typem danych zdefiniowanym przez użytkownika, który omówiliśmy już w poprzednim rozdziale. Poniżej przedstawiono niektóre prawidłowe deklaracje zmiennych wraz z ich definicją -
sales number(10, 2);
pi CONSTANT double precision := 3.1415;
name varchar2(25);
address varchar2(100);
Kiedy podajesz rozmiar, skalę lub limit precyzji z typem danych, jest to nazywane constrained declaration. Deklaracje ograniczone wymagają mniej pamięci niż deklaracje nieograniczone. Na przykład -
sales number(10, 2);
name varchar2(25);
address varchar2(100);
Inicjalizacja zmiennych w PL / SQL
Za każdym razem, gdy deklarujesz zmienną, PL / SQL przypisuje jej domyślną wartość NULL. Jeśli chcesz zainicjować zmienną o wartości innej niż wartość NULL, możesz to zrobić podczas deklaracji, używając jednego z następujących -
Plik DEFAULT słowo kluczowe
Plik assignment operator
Na przykład -
counter binary_integer := 0;
greetings varchar2(20) DEFAULT 'Have a Good Day';
Możesz również określić, że zmienna nie powinna mieć rozszerzenia NULL wartość przy użyciu NOT NULLprzymus. Jeśli używasz ograniczenia NOT NULL, musisz jawnie przypisać wartość początkową dla tej zmiennej.
Dobrą praktyką programistyczną jest prawidłowe inicjowanie zmiennych, w przeciwnym razie czasami programy mogą dawać nieoczekiwane rezultaty. Wypróbuj następujący przykład, który wykorzystuje różne typy zmiennych -
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;
/
Wykonanie powyższego kodu daje następujący wynik -
Value of c: 30
Value of f: 23.333333333333333333
PL/SQL procedure successfully completed.
Zmienny zakres w PL / SQL
PL / SQL umożliwia zagnieżdżanie bloków, tj. Każdy blok programu może zawierać inny blok wewnętrzny. Jeśli zmienna jest zadeklarowana w bloku wewnętrznym, nie jest dostępna dla bloku zewnętrznego. Jeśli jednak zmienna jest zadeklarowana i dostępna dla bloku zewnętrznego, jest również dostępna dla wszystkich zagnieżdżonych bloków wewnętrznych. Istnieją dwa rodzaje zakresu zmiennych -
Local variables - Zmienne zadeklarowane w bloku wewnętrznym i niedostępne dla bloków zewnętrznych.
Global variables - Zmienne zadeklarowane w najbardziej zewnętrznym bloku lub pakiecie.
Poniższy przykład pokazuje użycie Local i Global zmienne w swojej prostej formie -
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;
/
Wykonanie powyższego kodu daje następujący wynik -
Outer Variable num1: 95
Outer Variable num2: 85
Inner Variable num1: 195
Inner Variable num2: 185
PL/SQL procedure successfully completed.
Przypisywanie wyników zapytania SQL do zmiennych PL / SQL
Możesz użyć SELECT INTOinstrukcja SQL w celu przypisania wartości do zmiennych PL / SQL. Dla każdego elementu wSELECT list, w pliku musi znajdować się odpowiednia zmienna zgodna z typem INTO list. Poniższy przykład ilustruje tę koncepcję. Utwórzmy tabelę o nazwie CUSTOMERS -
(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
Wstawmy teraz kilka wartości do tabeli -
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 );
Poniższy program przypisuje wartości z powyższej tabeli do zmiennych PL / SQL za pomocą SELECT INTO clause 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;
/
Wykonanie powyższego kodu daje następujący wynik -
Customer Ramesh from Ahmedabad earns 2000
PL/SQL procedure completed successfully