347 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			347 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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
 | 
