Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2022-12-20 | 15 |
5.00
из
|
Заказать работу |
|
|
Все переменные в 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!