Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-36081

CURSOR is not allowed in the top level block in PACKAGE BODY

Details

    Description

      This script works in Oracle and returns 1 as exprected.

      DROP PACKAGE pkg;
      CREATE PACKAGE pkg IS
        FUNCTION f1 RETURN INT;
      END;
      /
      CREATE PACKAGE BODY pkg AS
        vc INT := 0;
        CURSOR cur IS SELECT 1 AS c FROM DUAL; -- A cursor in the top level block
        FUNCTION f1 RETURN INT AS
        BEGIN
          OPEN cur;
          FETCH cur INTO vc;
          CLOSE cur;
          RETURN vc;
        END;
      END;
      /
      SELECT pkg.f1 FROM DUAL;
      

      A similar script in MariaDB fails on the cursor declatation:

      SET sql_mode=ORACLE;
      DROP PACKAGE pkg;
       
      DELIMITER /
      CREATE PACKAGE pkg IS
        FUNCTION f1 RETURN INT;
      END;
      /
      CREATE PACKAGE BODY pkg AS
        vc INT := 0;
        CURSOR cur IS SELECT 1 AS c FROM DUAL; -- A cursor in the top level block
        FUNCTION f1 RETURN INT AS
        BEGIN
          OPEN cur;
          FETCH cur INTO vc;
          CLOSE cur;
          RETURN vc;
        END;
      END;
      /
      DELIMITER ;
      SELECT pkg.f1() FROM DUAL;
      

      ERROR 1064 (42000): You have an error in your SQL syntax ...near 'CURSOR cur IS SELECT 1 AS c FROM DUAL;...
      

      Attachments

        Issue Links

          Activity

            There are no comments yet on this issue.

            People

              Unassigned Unassigned
              bar Alexander Barkov
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.