В этой главе мы обсудим переменные в Pl / SQL. Переменная — это не что иное, как имя, данное области памяти, которой могут манипулировать наши программы. Каждая переменная в PL / SQL имеет определенный тип данных, который определяет размер и структуру памяти переменной; диапазон значений, которые можно сохранить в этой памяти, и набор операций, которые можно применить к переменной.
Имя переменной PL / SQL состоит из буквы, за которой, возможно, следуют дополнительные буквы, цифры, знаки доллара, подчеркивания и цифры и не должно превышать 30 символов. По умолчанию имена переменных не чувствительны к регистру. Вы не можете использовать зарезервированное ключевое слово PL / SQL в качестве имени переменной.
Язык программирования PL / SQL позволяет определять различные типы переменных, такие как типы данных даты и времени, записи, коллекции и т. Д., Которые мы рассмотрим в следующих главах. Для этой главы давайте изучим только основные типы переменных.
Объявление переменных в PL / SQL
Переменные PL / SQL должны быть объявлены в разделе объявлений или в пакете как глобальная переменная. Когда вы объявляете переменную, PL / SQL выделяет память для значения переменной, и место хранения идентифицируется по имени переменной.
Синтаксис объявления переменной —
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]
Где variable_name является допустимым идентификатором в PL / SQL, тип данных должен быть действительным типом данных PL / SQL или любым типом данных, определенным пользователем, который мы уже обсуждали в предыдущей главе. Некоторые допустимые объявления переменных вместе с их определением показаны ниже —
sales number(10, 2); pi CONSTANT double precision := 3.1415; name varchar2(25); address varchar2(100);
Когда вы предоставляете ограничение размера, масштаба или точности для типа данных, оно называется ограниченным объявлением . Ограниченные объявления требуют меньше памяти, чем неограниченные объявления. Например —
sales number(10, 2); name varchar2(25); address varchar2(100);
Инициализация переменных в PL / SQL
Всякий раз, когда вы объявляете переменную, PL / SQL присваивает ей значение по умолчанию NULL. Если вы хотите инициализировать переменную значением, отличным от значения NULL, вы можете сделать это во время объявления, используя одно из следующих действий:
-
Ключевое слово ПО УМОЛЧАНИЮ
-
Оператор присваивания
Ключевое слово ПО УМОЛЧАНИЮ
Оператор присваивания
Например —
counter binary_integer := 0; greetings varchar2(20) DEFAULT 'Have a Good Day';
Вы также можете указать, что переменная не должна иметь значение NULL, используя ограничение NOT NULL . Если вы используете ограничение NOT NULL, вы должны явно назначить начальное значение для этой переменной.
Хорошей практикой программирования является правильная инициализация переменных, в противном случае программы могут привести к неожиданным результатам. Попробуйте следующий пример, который использует различные типы переменных —
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; /
Когда приведенный выше код выполняется, он дает следующий результат —
Value of c: 30 Value of f: 23.333333333333333333 PL/SQL procedure successfully completed.
Область переменных в PL / SQL
PL / SQL допускает вложение блоков, т. Е. Каждый программный блок может содержать другой внутренний блок. Если переменная объявлена во внутреннем блоке, она не доступна для внешнего блока. Однако, если переменная объявлена и доступна для внешнего блока, она также доступна для всех вложенных внутренних блоков. Существует два типа переменной области видимости —
-
Локальные переменные — переменные, объявленные во внутреннем блоке и недоступные для внешних блоков.
-
Глобальные переменные — переменные, объявленные во внешнем блоке или пакете.
Локальные переменные — переменные, объявленные во внутреннем блоке и недоступные для внешних блоков.
Глобальные переменные — переменные, объявленные во внешнем блоке или пакете.
В следующем примере показано использование локальных и глобальных переменных в простом виде.
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; /
Когда приведенный выше код выполняется, он дает следующий результат —
Outer Variable num1: 95 Outer Variable num2: 85 Inner Variable num1: 195 Inner Variable num2: 185 PL/SQL procedure successfully completed.
Присвоение результатов SQL-запросов переменным PL / SQL
Вы можете использовать инструкцию SELECT INTO SQL для присвоения значений переменным PL / SQL. Для каждого элемента в списке SELECT должна быть соответствующая, совместимая с типом переменная в списке INTO . Следующий пример иллюстрирует концепцию. Давайте создадим таблицу с именем CUSTOMERS —
( Для операторов SQL, пожалуйста, обратитесь к учебнику по SQL )
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
Давайте теперь вставим некоторые значения в таблицу —
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 );
Следующая программа присваивает значения из вышеприведенной таблицы переменным PL / SQL, используя предложение SQL SELECT INTO —
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; /
Когда приведенный выше код выполняется, он дает следующий результат —