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