mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
136 lines
2.9 KiB
SQL
136 lines
2.9 KiB
SQL
#
|
|
# SET-UP - Creation of various non-nested stored programs
|
|
#
|
|
|
|
--source include/no_protocol.inc
|
|
--source include/have_innodb.inc
|
|
|
|
--echo # SET-UP
|
|
|
|
CREATE DATABASE stored_programs;
|
|
USE stored_programs;
|
|
|
|
CREATE TABLE t1(
|
|
i INT NOT NULL,
|
|
j INT
|
|
) engine=innodb;
|
|
|
|
CREATE TABLE t2(
|
|
name CHAR(16) NOT NULL DEFAULT '',
|
|
id INT NOT NULL
|
|
) engine=innodb;
|
|
|
|
CREATE TABLE t3(
|
|
d DATE,
|
|
n INT,
|
|
f DOUBLE,
|
|
s VARCHAR(32)
|
|
);
|
|
|
|
CREATE TABLE t4(
|
|
`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`word` varchar(100) NOT NULL,
|
|
`mean` varchar(300) NOT NULL,
|
|
PRIMARY KEY (`k`)
|
|
);
|
|
|
|
|
|
--echo ############################
|
|
--echo # Creating Stored Programs #
|
|
--echo ############################
|
|
|
|
--echo # Stored Routine ( Procedure & Function )
|
|
|
|
DELIMITER |;
|
|
CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
|
|
BEGIN
|
|
INSERT INTO t1 VALUES (x1, y);
|
|
INSERT INTO t1 VALUES (x2, y);
|
|
END|
|
|
|
|
CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
|
|
BEGIN
|
|
DECLARE z1, z2 INT;
|
|
SET z1 = y;
|
|
SET z2 = z1+2;
|
|
INSERT INTO t2 VALUES (x, z2);
|
|
END|
|
|
|
|
CREATE PROCEDURE SampleProc3()
|
|
BEGIN
|
|
DECLARE ld DATE;
|
|
DECLARE li INT;
|
|
DECLARE lf DOUBLE;
|
|
DECLARE ls VARCHAR(32);
|
|
|
|
SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
|
|
INSERT INTO t3 VALUES (ld, li, lf, ls);
|
|
|
|
INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
|
|
((li IS NULL), 1, "li is null"),
|
|
((li = 0), NULL, "li = 0"),
|
|
((lf IS NULL), 1, "lf is null"),
|
|
((lf = 0), NULL, "lf = 0"),
|
|
((ls IS NULL), 1, "ls is null");
|
|
END|
|
|
|
|
|
|
CREATE PROCEDURE SampleProc4()
|
|
BEGIN
|
|
DECLARE x INT;
|
|
SET x = 1;
|
|
WHILE x <= 2 DO
|
|
INSERT INTO t4(word, mean) VALUES('a','a mean');
|
|
SET x = x + 1;
|
|
END WHILE;
|
|
END|
|
|
|
|
CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
|
|
RETURN concat(s1, s2)|
|
|
|
|
CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
|
|
RETURNS INT
|
|
DETERMINISTIC
|
|
BEGIN
|
|
DECLARE avg INT;
|
|
SET avg = (n1+n2+n3*2+n4*4)/8;
|
|
RETURN avg;
|
|
END|
|
|
|
|
CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
|
|
BEGIN
|
|
DECLARE f BIGINT UNSIGNED DEFAULT 1;
|
|
WHILE n > 1 DO
|
|
SET f = f * n;
|
|
SET n = n - 1;
|
|
END WHILE;
|
|
RETURN f;
|
|
END|
|
|
|
|
--echo # Triggers
|
|
|
|
# INSERT triggers
|
|
CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
|
|
BEGIN
|
|
if isnull(new.j) then
|
|
SET new.j:= new.i * 10;
|
|
END if;
|
|
END|
|
|
|
|
CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
|
|
BEGIN
|
|
UPDATE t1 SET i=new.id+i ;
|
|
END|
|
|
|
|
# UPDATE trigger
|
|
CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
|
|
SET @change:= @change + new.id - old.id|
|
|
|
|
# DELETE triggers
|
|
CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
|
|
SET @del:= @del + 1|
|
|
|
|
CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
|
|
SET @del:= @del + 8 + old.j|
|
|
|
|
DELIMITER ;|
|