Примеры
CREATE VIEW ENTRY_LEVEL_JOBS AS
SELECT JOB_CODE, JOB_TITLE
FROM JOB
WHERE MAX_SALARY < 15000;
Создание представления возвращающего столбцы JOB_CODE и JOB_TITLE только для тех работ, где MAX_SALARY меньше $15000.При вставке новой записи или изменении существующей будет осуществляться проверка условия MAX_SALARY < 15000, если условие не выполняется, то вставка/изменение будет отвергнуто.
CREATE VIEW ENTRY_LEVEL_JOBS AS
SELECT JOB_CODE, JOB_TITLE
FROM JOB
WHERE MAX_SALARY < 15000
WITH CHECK OPTIONS;
CREATE VIEW PRICE_WITH_MARKUP (
CODE_PRICE,
COST,
COST_WITH_MARKUP
) AS
SELECT
CODE_PRICE,
COST,
COST * 1.1
FROM PRICE;
CREATE VIEW PRICE_WITH_MARKUP AS
SELECT
CODE_PRICE,
COST,
COST * 1.1 AS COST_WITH_MARKUP
FROM PRICE;
CREATE VIEW GOODS_PRICE AS
SELECT
goods.name AS goodsname,
price.cost AS cost,
b.quantity AS quantity
FROM
goods
JOIN price ON goods.code_goods = price.code_goods
LEFT JOIN sp_get_balance(goods.code_goods) b ON 1 = 1;
-- базовые таблицы
RECREATE TABLE t_films(id INT PRIMARY KEY, title VARCHAR(100));
RECREATE TABLE t_sound(id INT PRIMARY KEY, audio BLOB);
RECREATE TABLE t_video(id INT PRIMARY KEY, video BLOB);
COMMIT;
-- создание необновляемого представления
RECREATE VIEW v_films AS
SELECT f.id, f.title, s.audio, v.video
FROM t_films f
LEFT JOIN t_sound s ON f.id = s.id
LEFT JOIN t_video v ON f.id = v.id;
/* Для того чтобы сделать представление обновляемым создадим
триггер, который будет производить манипуляции над базовыми
таблицами.
*/
SET TERM ^;
CREATE OR ALTER TRIGGER v_films_biud FOR v_films
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0 AS
BEGIN
IF (INSERTING) THEN
new.id = COALESCE(new.id, GEN_ID(g_films, 1));
IF (NOT DELETING) THEN
BEGIN
UPDATE OR INSERT INTO t_films(id, title)
VALUES(new.id, new.title)
MATCHING(id);
UPDATE OR INSERT INTO t_sound(id, audio)
VALUES(new.id, new.audio)
MATCHING(id);
UPDATE OR INSERT INTO t_video(id, video)
VALUES(new.id, new.video)
MATCHING(id);
END
ELSE
BEGIN
DELETE FROM t_films WHERE id = old.id;
DELETE FROM t_sound WHERE id = old.id;
DELETE FROM t_video WHERE id = old.id;
END
END^
SET TERM ;^
/*
* Теперь мы можем производить манипуляции над
* этим представлением как будто мы работаем с таблицей
*/
INSERT INTO v_films(title, audio, video)
VALUES('007 coordinates skyfall', 'pif-paf!', 'oh! waw!');