PL/SQL parser (MDEV-10142)

[MDEV-12088] sql_mode=ORACLE: Do not require BEGIN..END in multi-statement exception handlers in THEN clause Created: 2017-02-20  Updated: 2020-08-27  Resolved: 2017-02-20

Status: Closed
Project: MariaDB Server
Component/s: Parser, Stored routines
Affects Version/s: None
Fix Version/s: 10.3.0

Type: Technical task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: Compatibility

Sprint: 10.2.2-3, 10.2.2-1, 10.2.2-2, 10.2.2-4, 10.1.18

 Description   

When running with sql_mode=ORACLE, MariaDB (the bb-10.2-compatibility branch) requires extra BEGIN..END in multi-statement exception handlers in THEN clause:

SET sql_mode=ORACLE;
DROP PROCEDURE p1;
DELIMITER /
CREATE PROCEDURE p1 AS
BEGIN
  INSERT INTO t1 (a) VALUES (10);
EXCEPTION
  WHEN DUP_VAL_ON_INDEX THEN
  BEGIN
    NULL;
    NULL;
  END;
  WHEN OTHERS THEN
  BEGIN
    NULL;
    NULL;
  END;
END;
/
DELIMITER ;

For better Oracle compatibility, we'll fix it not to require BEGIN..END, to make this work:

SET sql_mode=ORACLE;
DROP PROCEDURE p1;
DELIMITER /
CREATE PROCEDURE p1 AS
BEGIN
  INSERT INTO t1 (a) VALUES (10);
EXCEPTION
  WHEN DUP_VAL_ON_INDEX THEN
    NULL;
    NULL;
  WHEN OTHERS THEN
    NULL;
    NULL;
END;
/
DELIMITER ;



 Comments   
Comment by Alexander Barkov [ 2017-02-20 ]

Pushed into 10.3.0.

Generated at Thu Feb 08 07:55:01 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.