CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# CONTAINS SQL ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# NO SQL ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# READS SQL DATA ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# MODIFIES SQL DATA ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# CONTAINS SQL COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# NO SQL COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# READS SQL DATA COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# MODIFIES SQL DATA COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# CONTAINS SQL ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# NO SQL ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# READS SQL DATA ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# MODIFIES SQL DATA ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# CONTAINS SQL COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# NO SQL COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# READS SQL DATA COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# MODIFIES SQL DATA COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# CONTAINS SQL SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# NO SQL SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# READS SQL DATA SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# MODIFIES SQL DATA SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# CONTAINS SQL SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# NO SQL SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# READS SQL DATA SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# MODIFIES SQL DATA SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# CONTAINS SQL SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# NO SQL SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# READS SQL DATA SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# MODIFIES SQL DATA SQL SECURITY INVOKER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# CONTAINS SQL SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# NO SQL SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# READS SQL DATA SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# MODIFIES SQL DATA SQL SECURITY INVOKER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# CONTAINS SQL SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# NO SQL SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# READS SQL DATA SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# MODIFIES SQL DATA SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# CONTAINS SQL SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# NO SQL SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# READS SQL DATA SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 #DET# MODIFIES SQL DATA SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# CONTAINS SQL SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# NO SQL SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# READS SQL DATA SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# MODIFIES SQL DATA SQL SECURITY DEFINER ;
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# CONTAINS SQL SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# NO SQL SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# READS SQL DATA SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
CREATE TABLE t1 (id INTEGER NULL , data INTEGER NULL, KEY(id));
CREATE TABLE t2 (i INTEGER NULL);
CREATE TABLE t3 (id INTEGER NULL, data INTEGER NULL, KEY(id));
CREATE TABLE t4 (i INTEGER NULL);
INSERT INTO t1 VALUES(1,1),(2,1),(3,4),(4,5);
INSERT INTO t2 VALUES(1),(2),(3);
CREATE FUNCTION sf1() RETURNS INTEGER
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c; IFNOT done THEN IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2; RETURN0;
END//
ALTER FUNCTION sf1 LANGUAGE SQL #DET# MODIFIES SQL DATA SQL SECURITY DEFINER COMMENT 'comment';
SELECT sf1();
sf1() 0
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 21 33
INSERT INTO t4 VALUES(sf1());
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 21 21 33 33
UPDATE t4 SET i = sf1() + 1 WHERE i = sf1();
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 21 21 21 21 33 33 33 33
DELETE FROM t4 WHERE i = sf1() + 1;
SELECT * FROM t1 ORDER BY id;
id data 11 21 34 45
SELECT * FROM t2 ORDER BY i;
i 1 2 3
SELECT * FROM t3 ORDER BY id;
id data 11 11 11 11 11 21 21 21 21 21 33 33 33 33 33
DROP FUNCTION sf1;
DROP TABLE t1,t2,t3,t4;
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen1.133Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.