Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
|
из
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.
|
|
|
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!