АРГУМЕНТ [{IN 1 OUT | IN OUT} ]
ТЕЛО_ПРОЦЕДУРЫ
Вот пример оператора, создающего достаточно простую процедуру.
CREATE PROCEDURE NEW_PRODUCT
(PROD_ID IN VARCHAR2, PROD_DESC IN VARCHAR2, COST IN NUMBER)
AS
BEGIN
INSERT INTO PRODUCTS_TBL
VALUES (PRODJT.D, PROD_DESC, COST);
COMMIT;
END;
Процедура создана.
Эту процедуру можно использовать для добавления новых строк в таблицу PRODUCTS_TBL.
В Microsoft SQL Server сохраненные процедуры используются следующего образом.
EXECUTE [ @ВОЗВРАЩАЕМОЕ_СОСТОЯНИЕ = ]
[WITH RECOMPILE]
В Oracle синтаксис следующий.
EXECUTE [ @ВОЗВРАЩАЕМОЕ_СОСТОЯНИЕ = ]
OUTPUT ]]
[WITH RECOMPILE]
Давайте выполним только что созданную процедуру.
EXECUTENEW_PRODUCT ('9999','INDIAN CORN',1.99);
PL/SQL процедура успешно выполнена.
Вы обнаружите, что синтаксис команд, используемых при работе с процедурами в базах данных разных производителей, сильно варьирует Базовые команды SQL остаются одинаковыми, но вот программные конструкции (такие как переменные, условные выражения, курсоры, циклы) могут отличаться существенно
Использовать сохраненные ранее процедуры удобнее, чем отдельные операторы SQL по целому ряду причин. Некоторые из этих причин перечислены ниже.
• Операторы сохраненной процедуры уже сохранены в базе данных.
• Операторы сохраненной процедуры уже проверены и находятся в готовом для использования виде
• Возможность сохранения процедур позволяет использовать модульное программирование
• Сохраненные процедуры могут вызывать другие процедуры и функции.
• Сохраненные процедуры могут вызываться другими программами.
• При использовании сохраненных процедур результат ответ от базы данных обычно получается быстрее
• Использовать процедуры очень просто.
Чаще всего триггеры использовать очень удобно, однако, их использование приводит к значительному увеличению числа операций ввода-вывода. Триггеры не следует использовать тогда, когда сохраненная процедура или программа может добиться тех же результатов с меньшими накладными расходами.
Триггер можно создать с помощью оператора CREATE TRIGGER. Стандарт ANSI предлагает для этого оператора следующий синтаксис.
CREATE TRIGGER
[REFERENCING VALUES ALIAS LIST ]
[TRIGGERED ACTION TRIGGER EVENT ::=
INSERT UPDATE | DELETE {OF TRIGGER COLUMN LIST]
TRIGGER COLUMN LIST ::=
VALUES ALIAS LIST ::=
VALUES ALIAS LIST ::=
OLD [ROW] [AS] OLD VALUES
NEW {ROW} {AS} NEW VALUES
OLD TABLE {AS} OLD VALUES TABLE ALIAS |
NEW TABLE {AS} NEW VALUES TABLE ALIAS
OLD VALUES TABLE ALIAS ::= IDENTIFIER
NEW VALUES TABLE ALIAS ::= IDENTIFIER
TRIGGERED ACTION ::=
[FOR EACH [ROW | STATEMENT] [WHEN SEARCH CONDITION]]
TRIGGERED SQL STATEMENT
TRIGGERED SQL STATEMENT ::=
SQL STATEMENT | BEGIN ATOMIC [SQL STATEMENT;]
END
В Microsoft SQL Server синтаксис оператора для создания триггера выглядит следующим образом.
CREATE TRIGGER
ON
FOR { INSERT | UPDATE | DELETE [, ..]}
AS
OnEPATOPH_SQL
[ RETURN ]
В Oracle базовый синтаксис оператора следующий.
CREATE [ OR REPLACE ] TRIGGER
[ DELETE I INSERT | UPDATE]
ON [ ПОЛЬЗОВАТЕЛЬ.ИМЯ_ТАБЛИЦЫ ]
[ FOR EACH ROW ]
[ WHEN
[
Вот пример создания триггера.
CREATE TRIGGER EMP_PAY_TRIG
AFTER UPDATE ON EMPLOYEE_PAY_TBL
FOR EACH ROW
BEGIN
INSERT INTO EMPLOYEE_PAY_HISTORY
(EMP_ID, PREV_PAY_RATE, PAY_RATE, DATE_LAST_RAISE,
TRANSACTION_TYPE)
VALUES
(:NEW.EMP_ID, :OLD.PAY_RATE, :NEW.PAY_RATE,