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
 |