mirror of
https://github.com/MariaDB/server.git
synced 2025-02-04 21:02:17 +01:00
346 lines
5.8 KiB
Text
346 lines
5.8 KiB
Text
SET sql_mode=ORACLE;
|
|
|
|
--echo #
|
|
--echo # MDEV-10578 sql_mode=ORACLE: SP control functions SQLCODE, SQLERRM
|
|
--echo #
|
|
|
|
--echo #
|
|
--echo # Using SQLCODE and SQLERRM outside of an SP
|
|
--echo #
|
|
|
|
--error ER_BAD_FIELD_ERROR
|
|
SELECT SQLCODE;
|
|
|
|
--error ER_BAD_FIELD_ERROR
|
|
SELECT SQLERRM;
|
|
|
|
CREATE TABLE t1 (SQLCODE INT, SQLERRM VARCHAR(10));
|
|
INSERT INTO t1 VALUES (10, 'test');
|
|
SELECT SQLCODE, SQLERRM FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Normal SQLCODE and SQLERRM usage
|
|
--echo #
|
|
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1(stmt VARCHAR)
|
|
AS
|
|
BEGIN
|
|
EXECUTE IMMEDIATE stmt;
|
|
SELECT 'Error1: ' || SQLCODE || ' ' || SQLERRM;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
SELECT 'Error2: ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1('SELECT 1');
|
|
CALL p1('xxx');
|
|
CALL p1('SELECT 1');
|
|
DROP PROCEDURE p1;
|
|
|
|
--echo #
|
|
--echo # SQLCODE and SQLERRM hidden by local variables
|
|
--echo #
|
|
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1()
|
|
AS
|
|
sqlcode INT:= 10;
|
|
sqlerrm VARCHAR(64) := 'test';
|
|
BEGIN
|
|
SELECT 'Error: ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1;
|
|
DROP PROCEDURE p1;
|
|
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1()
|
|
AS
|
|
sqlcode INT;
|
|
sqlerrm VARCHAR(64);
|
|
BEGIN
|
|
SQLCODE:= 10;
|
|
sqlerrm:= 'test';
|
|
SELECT 'Error: ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1;
|
|
DROP PROCEDURE p1;
|
|
|
|
|
|
--echo #
|
|
--echo # SQLCODE and SQLERRM hidden by parameters
|
|
--echo #
|
|
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1(sqlcode INT, sqlerrm VARCHAR)
|
|
AS
|
|
BEGIN
|
|
SELECT 'Error: ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1(10, 'test');
|
|
DROP PROCEDURE p1;
|
|
|
|
|
|
--echo #
|
|
--echo # SQLCODE and SQLERRM in CREATE..SELECT
|
|
--echo #
|
|
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1
|
|
AS
|
|
BEGIN
|
|
CREATE TABLE t1 AS SELECT SQLCODE, SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1;
|
|
SHOW CREATE TABLE t1;
|
|
DROP TABLE t1;
|
|
DROP PROCEDURE p1;
|
|
|
|
|
|
--echo #
|
|
--echo # SQLCODE and SQLERRM in EXPLAIN EXTENDED SELECT
|
|
--echo #
|
|
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1
|
|
AS
|
|
BEGIN
|
|
EXPLAIN EXTENDED SELECT SQLCode, SQLErrm;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1;
|
|
DROP PROCEDURE p1;
|
|
|
|
|
|
|
|
--echo #
|
|
--echo # Warning-alike errors in stored functions
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE FUNCTION f1 RETURN VARCHAR
|
|
AS
|
|
a INT;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
RETURN 'No exception ' || SQLCODE || ' ' || SQLERRM;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
RETURN 'Exception ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
SELECT f1() FROM DUAL;
|
|
DROP FUNCTION f1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE FUNCTION f1 RETURN VARCHAR
|
|
AS
|
|
a INT;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
RETURN 'No exception ' || SQLCODE || ' ' || SQLERRM;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
RETURN 'Exception ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
SELECT f1() FROM DUAL;
|
|
DROP FUNCTION f1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # Warning-alike errors in stored procedures
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1(res OUT VARCHAR)
|
|
AS
|
|
a INT;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
res:= 'No exception ' || SQLCODE || ' ' || SQLERRM;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
res:= 'Exception ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1(@a);
|
|
SELECT @a;
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1(res OUT VARCHAR)
|
|
AS
|
|
a INT;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
res:= 'No exception ' || SQLCODE || ' ' || SQLERRM;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
res:= 'Exception ' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
CALL p1(@a);
|
|
SELECT @a;
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # SQLCODE and SQLERRM are cleared on RETURN
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE FUNCTION f1 RETURN VARCHAR
|
|
AS
|
|
a INT:=10;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
RETURN 'Value=' || a;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN RETURN 'Exception|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
CREATE FUNCTION f2 RETURN VARCHAR
|
|
AS
|
|
a VARCHAR(128);
|
|
BEGIN
|
|
RETURN f1() || '|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
SELECT f1() FROM DUAL;
|
|
SELECT f2() FROM DUAL;
|
|
DROP TABLE t1;
|
|
DROP FUNCTION f2;
|
|
DROP FUNCTION f1;
|
|
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE FUNCTION f1 RETURN VARCHAR
|
|
AS
|
|
a INT:=10;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
RETURN 'Value=' || a;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN RETURN 'Exception|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
CREATE FUNCTION f2 RETURN VARCHAR
|
|
AS
|
|
a VARCHAR(128);
|
|
BEGIN
|
|
RETURN f1() || '|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
SELECT f1() FROM DUAL;
|
|
SELECT f2() FROM DUAL;
|
|
DROP TABLE t1;
|
|
DROP FUNCTION f2;
|
|
DROP FUNCTION f1;
|
|
|
|
|
|
--echo #
|
|
--echo # SQLCODE and SQLERRM are cleared on a return from a PROCEDURE
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1(res OUT VARCHAR)
|
|
AS
|
|
a INT:=10;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
res:='Value=' || a;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN res:='Exception|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
CREATE FUNCTION f2 RETURN VARCHAR
|
|
AS
|
|
res VARCHAR(128);
|
|
BEGIN
|
|
CALL p1(res);
|
|
RETURN res || '|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
SELECT f2() FROM DUAL;
|
|
DROP FUNCTION f2;
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
DELIMITER $$;
|
|
CREATE PROCEDURE p1(res OUT VARCHAR)
|
|
AS
|
|
a INT:=10;
|
|
BEGIN
|
|
SELECT a INTO a FROM t1;
|
|
res:='Value=' || a;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN res:='Exception|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
CREATE FUNCTION f2 RETURN VARCHAR
|
|
AS
|
|
res VARCHAR(128);
|
|
BEGIN
|
|
CALL p1(res);
|
|
RETURN res || '|' || SQLCODE || ' ' || SQLERRM;
|
|
END;
|
|
$$
|
|
DELIMITER ;$$
|
|
SELECT f2() FROM DUAL;
|
|
DROP FUNCTION f2;
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # End of MDEV-10578 sql_mode=ORACLE: SP control functions SQLCODE, SQLERRM
|
|
--echo #
|
|
|
|
--echo #
|
|
--echo # MDEV-12854 Synchronize CREATE..SELECT data type and result set metadata data type for INT functions
|
|
--echo #
|
|
|
|
--enable_metadata
|
|
--disable_ps_protocol
|
|
DELIMITER $$;
|
|
BEGIN
|
|
SELECT SQLCODE;
|
|
END
|
|
$$
|
|
DELIMITER ;$$
|
|
--enable_ps_protocol
|
|
--disable_metadata
|