Baza
DVD Rental Service
source
restore
CASE
SELECT
SUM (
CASE
WHEN rental_rate = 0 . 99 THEN
1
ELSE
0
END
) AS "Mass" ,
SUM (
CASE
WHEN rental_rate = 2 . 99 THEN
1
ELSE
0
END
) AS "Economic" ,
SUM (
CASE
WHEN rental_rate = 4 . 99 THEN
1
ELSE
0
END
) AS "Luxury"
FROM film
COALESCE
SELECT COALESCE ( NULL , 2 , 1 );
SELECT COALESCE ( NULL , 'ab' , 'xy' );
SELECT COALESCE ( NULL , 'ab' , 1 );
NULLIF
SELECT NULLIF ( 1 , 1 )
SELECT NULLIF ( 1 , 0 )
SELECT NULLIF ( 'A' , 'B' )
CAST
SELECT '100' :: INTEGER , '01-OCT-2015' :: DATE
SELECT CAST ( '100' AS INTEGER ), CAST ( '01-OCT-2015' AS DATE ) SELECT
CAST ( 'true' AS BOOLEAN ),
CAST ( 'false' as BOOLEAN ),
CAST ( 'T' as BOOLEAN ),
CAST ( 'F' as BOOLEAN )
Function
CREATE FUNCTION add ( integer , integer ) RETURNS integer
AS 'select $1 + $2;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT ; CREATE FUNCTION increment ( i integer ) RETURNS integer AS $$
begin
return i + 1 ;
end ;
$$ LANGUAGE plpgsql ;
CREATE OR REPLACE FUNCTION increment ( i integer ) RETURNS integer AS $$
begin
return i + 2 ;
end ;
$$ LANGUAGE plpgsql ; CREATE OR REPLACE FUNCTION dup ( int ) RETURNS TABLE ( f1 int , f2 text ) AS $$
SELECT $ 1 , CAST ( $ 1 AS text ) || ' is text'
$$ LANGUAGE SQL ;
CREATE OR REPLACE FUNCTION dup ( in int , out f1 int , out f2 text ) AS $$
SELECT $ 1 , CAST ( $ 1 AS text ) || ' is text'
$$ LANGUAGE SQL ; CREATE FUNCTION trigger_function ()
RETURNS trigger AS
Trigger
CREATE TRIGGER trigger_name
{ BEFORE | AFTER | INSTEAD OF } { event [ OR ...] }
ON table_name
[ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE trigger_function CREATE TABLE employees (
id SERIAL PRIMARY KEY ,
first_name VARCHAR ( 40 ) NOT NULL ,
last_name VARCHAR ( 40 ) NOT NULL
); CREATE TABLE employee_audits (
id SERIAL PRIMARY KEY ,
employee_id INT NOT NULL ,
last_name VARCHAR ( 40 ) NOT NULL ,
changed_on TIMESTAMP ( 6 ) NOT NULL
) CREATE OR REPLACE FUNCTION log_last_name_changes ()
RETURNS trigger AS
$ BODY$
BEGIN
IF NEW . last_name <> OLD . last_name THEN
INSERT INTO employee_audits ( employee_id , last_name , changed_on )
VALUES ( OLD . id , OLD . last_name , now ());
END IF ;
RETURN NEW ;
END ;
$ BODY$ CREATE TRIGGER last_name_changes
BEFORE UPDATE
ON employees
FOR EACH ROW
EXECUTE PROCEDURE log_last_name_changes (); INSERT INTO employees ( first_name , last_name )
VALUES ( 'John' , 'Doe' );
INSERT INTO employees ( first_name , last_name )
VALUES ( 'Lily' , 'Bush' ); UPDATE employees SET last_name = 'Brown' WHERE ID = 2 ; SELECT * FROM employee_audits ;
Ćwiczenia
Uruchomic przykłady.
Napisać trigger, który będzie zapisywał do tabeli log (“actor_id-#-film_id”
(string ), timestamp) zmiany w tabeli film_actor