Объявление переменных и постоянных — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Объявление переменных и постоянных

2022-12-20 15
Объявление переменных и постоянных 0.00 из 5.00 0 оценок
Заказать работу

Все переменные в PL/SQL должны быть описаны:

 

имя_переменной [CONSTANT] тип_данных [NOT NULL] [{:= | DEFAULT} выражение ]

 

Примеры:

 

surname VARCHAR2 (40);

detector BOOLEAN NOT NULL DEFAULT FALSE;

 

Указание CONSTANT задает неизменяемую «переменную», то есть постоянную, константу. (Неизменность значения отслеживается синтаксически, запретом присвоения).

 

При отсутствии указания DEFAULT (:=) начальное значение переменной всегда NULL.

 

В выражении DEFAULT (:=) можно ссылаться на выше описанные переменные, если им были присвоены собственные умолчательные значения:

 

DECLARE

x NUMBER := 1;

y NUMBER:= SIN (x);

z VARCHAR2 (10);

BEGIN

DBMS_OUTPUT.PUT_LINE (x);

DBMS_OUTPUT.PUT_LINE (y);

DBMS_OUTPUT.PUT_LINE ('When no DEFAULT value is NULL: ' || z);

END;

/

 

 

Записи

Записи являются более сложными, чем скалярные, структурами данных; данными составного типа. В PL/SQL они бывают трех видов:

 

n повторяющими структуру таблицы в БД

n повторяющими структуру курсора в программе

n явно заданными пользователем в программе

 

 

Объявление записей в программе

Записи в PL/SQL могут объявляться в разделе объявлений блока или в разделе глобальных описаний пакета. Записи, повторяющие структуру таблицы или курсора, объявляются с помощью атрибута %ROWTYPE. Записи, задаваемые пользователем, объявляются через предложение TYPE:

 

DECLARE

TYPE name_rectype IS RECORD

(first_name VARCHAR2 (30)

, last_name VARCHAR2 (30)

);

 

TYPE employee_rectype IS RECORD

(emp_id NUMBER (10) NOT NULL DEFAULT 1000

, dept_no dept.deptno%TYPE

, title VARCHAR2 (20)

, name name_rectype

, hire_date DATE:= SYSDATE

, fresh_out BOOLEAN

);

 

new_emp_rec employee_rectype;

BEGIN

new_emp_rec.fresh_out:= TRUE;

new_emp_rec.name.last_name:= 'Scott';

END;

/

 

Из примера видно, что записи могут быть вложенными.

 

 

Присвоения

Индивидуальные поля указываются через точку (например, new_emp_rec.name.first_name) и могут выставляться, читаться и сравниваться самостоятельно. 

 

Записи как целое могут только присваиваться друг другу, но не могут сравниваться логическими операциями (=). 

 

Присвоение значений записи может также выполняться:

 

- конструкцией SELECT … INTO имя_записи FROM …

- конструкцией FETCH имя_курсора INTO { имя_записи | список_полей_записи }

 

(примеры см. ниже).

 

 

Ссылка на типы уже имеющихся данных

Атрибут %TYPE в описании скалярной переменной позволяет указать для нее тип, имеющийся у другой переменной или у столбца в таблице. Атрибут %ROWTYPE в описании записи позволяет указать для нее тип, имеющийся у курсора или строки таблицы.

 

Примеры:

 

DECLARE

total_sales NUMBER(20, 2);

monthly_sales total_sales%TYPE; -- привязка к типу другой переменной

 

var_ename emp.ename %TYPE;  -- привязка к типу столбца таблицы из БД

 

var_emp_rec emp %ROWTYPE;  -- привязка к типу таблицы из БД

 

CURSOR mycur IS SELECT * FROM emp;

myrec mycur%ROWTYPE;      -- привязка к типу курсора

BEGIN NULL; END;

/

 

 

Пользовательские подтипы

Для скаляров в программе можно определять собственные подтипы:

 

- без дополнительных ограничений:

 

SUBTYPE dollar_amount_type IS NUMBER;

credit dollar_amount_type;

SUBTYPE names_typ IS emp.ename%TYPE;

name1 names_typ;

name2 names_typ;

...

 

- с дополнительными ограничениями:

 

var_dollar NUMBER (10, 2);

SUBTYPE dollar_amount_type IS var_dollar%TYPE;

 

 

Выражения

Выражения в PL/SQL допускаются над данными простых (не составных) типов. С версии 9 они подчиняются тем же правилам, что и в диалекте SQL в Oracle (до этого правила в PL/SQL были более ограничительны). Кроме этого в выражениях на PL/SQL могут участвовать скалярные типы, отсутствующие в Oracle SQL.

 

Примеры:

 

DECLARE

i NUMBER;

n CONSTANT VARCHAR2 (255):= 'Scott';

c BOOLEAN;

 

 BEGIN

i:= SIN (3) / COS (3);

DBMS_OUTPUT.PUT_LINE ('Tangens of 3 radians: ' || TO_CHAR (i));

-- неявное преобразование возможно, но не рекомендуется:

DBMS_OUTPUT.PUT_LINE ('The same tangens: ' || i);

 

c:= USER LIKE 'S%';

IF c THEN DBMS_OUTPUT.PUT_LINE (USER || ' begins with S'); END IF;

DBMS_OUTPUT.PUT_LINE

     ('User ' ||

       CASE INITCAP (USER)                               -- вариант CASE для версии >= 9

          WHEN n THEN 'is SCOTT'

          WHEN 'Scott' THEN 'is SCOTT too'

          WHEN INITCAP (USER) THEN 'is SCOTT again'

       ELSE 'SCOTT is not here'

       END

    );

 

-- для версии >= 9

IF TIMESTAMP '2003-04-14 15:16:17' > SYSTIMESTAMP THEN

      DBMS_OUTPUT.PUT_LINE (‘OK’);

END IF;

END;

/

 

Обратите внимание на использование функций, системных переменных и на неявное преобразование типов в выражениях выше, в соответствии с правилами Oracle SQL. 

 

Тем не менее, изредка встречаются исключения из общего правила. Так, в отличие от NVL, стандартная функция NVL2 в выражениях PL/SQL невозможна (пример для версии 9.2):

 

SQL> VARIABLE n number

SQL> BEGIN:n:= NVL (1, 2); END;

2 /

 

PL/SQL procedure successfully completed.

 

SQL> BEGIN:n:= NVL2 (1, 2, 3); END;

2 /

BEGIN:n:= NVL2 (1, 2, 3); END;

       *

ERROR at line 1:

ORA-06550: line 1, column 13:

PLS-00201: identifier 'NVL2' must be declared

ORA-06550: line 1, column 7:

PL/SQL: Statement ignored

 

 

SQL> BEGIN SELECT NVL2 (1, 2, 3) INTO:n FROM dual; END;

2 /

 

PL/SQL procedure successfully completed.

 

 


Поделиться с друзьями:

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.019 с.