Details
-
New Feature
-
Status: In Progress (View Workflow)
-
Critical
-
Resolution: Unresolved
-
None
-
Server 12.1 dev sprint
Description
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently CURSORs are not supported in CREATE PACKAGE BODY. This script returns a syntax error near 'CURSOR cur IS...':
SET sql_mode=ORACLE; |
DROP PACKAGE pkg; |
DELIMITER /
|
CREATE PACKAGE pkg AS |
FUNCTION f1 RETURN INT; |
END; |
/
|
CREATE PACKAGE BODY pkg AS |
vc INT := 0; |
CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly |
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; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..';
|
A similar script in Oracle works fine and returns "1":
DROP PACKAGE pkg; |
CREATE PACKAGE pkg AS |
FUNCTION f1 RETURN INT; |
END; |
/
|
CREATE PACKAGE BODY pkg AS |
vc INT := 0; |
CURSOR cur IS SELECT 1 AS c FROM DUAL; |
FUNCTION f1 RETURN INT AS |
BEGIN |
OPEN cur; |
FETCH cur INTO vc; |
CLOSE cur; |
RETURN vc; |
END; |
END; |
/
|
SELECT pkg.f1() FROM DUAL; |
PKG.F1()
|
1
|
Attachments
Issue Links
- blocks
-
MDEV-13139 CREATE PACKAGE: package-wide declarations
-
- Stalled
-
- is duplicated by
-
MDEV-36081 CURSOR is not allowed in the top level block in PACKAGE BODY
-
- Closed
-
- relates to
-
MDEV-10152 Add support for TYPE .. IS REF CURSOR
-
- Open
-
-
MDEV-20034 Add support for the pre-defined weak SYS_REFCURSOR
-
- Stalled
-
-
MDEV-36047 Package body variables are not allowed as FETCH targets
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Link | This issue relates to MDEV-13139 [ MDEV-13139 ] |
Link | This issue relates to MDEV-20034 [ MDEV-20034 ] |
Description |
This script return a syntax error near 'CURSOR cur IS...':
{code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {nofomat} If I run a similar scrip on Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
This script return a syntax error near 'CURSOR cur IS...':
{code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} If I run a similar scrip on Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Link | This issue relates to MDEV-10152 [ MDEV-10152 ] |
Assignee | Alexander Barkov [ bar ] |
Link |
This issue is duplicated by |
Link |
This issue relates to |
Description |
This script return a syntax error near 'CURSOR cur IS...':
{code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} If I run a similar scrip on Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
This script return a syntax error near 'CURSOR cur IS...':
{code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} If I run a similar script in Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Link | This issue blocks MDEV-13139 [ MDEV-13139 ] |
Fix Version/s | 12.1 [ 29992 ] | |
Fix Version/s | 11.4 [ 29301 ] |
Link | This issue relates to MDEV-13139 [ MDEV-13139 ] |
Affects Version/s | 10.5 [ 23123 ] | |
Affects Version/s | 11.8 [ 29921 ] | |
Issue Type | Bug [ 1 ] | New Feature [ 2 ] |
Summary | Syntax error on a CURSOR..IS declaration in PACKAGE BODY | CURSOR declarations in PACKAGE BODY |
Sprint | Server 12.1 dev sprint [ 793 ] |
Description |
This script return a syntax error near 'CURSOR cur IS...':
{code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} If I run a similar script in Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently it's not supported. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} If I run a similar script in Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Description |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently it's not supported. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} If I run a similar script in Oracle, it works fine and returns "1" as expected: {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently it's not supported. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Description |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently it's not supported. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently CURSORs are not supported supported in CREATE PACKAGE BODY. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Description |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently CURSORs are not supported supported in CREATE PACKAGE BODY. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently CURSORs are not supported in CREATE PACKAGE BODY. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Description |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently CURSORs are not supported in CREATE PACKAGE BODY. This script return a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Under the scope of this task we'll add support for CURSOR declarations in CREATE PACKAGE BODY.
Currently CURSORs are not supported in CREATE PACKAGE BODY. This script returns a syntax error near 'CURSOR cur IS...': {code:sql} SET sql_mode=ORACLE; DROP PACKAGE pkg; DELIMITER / CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; -- Error is raised incorectly FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / DELIMITER ; SELECT pkg.f1() FROM DUAL; {code} {noformat} ERROR 1064 (42000): You have an error in your SQL syntax; ... 'CURSOR cur IS SELECT 1 AS c FROM DUAL..'; {noformat} A similar script in Oracle works fine and returns "1": {code:sql} DROP PACKAGE pkg; CREATE PACKAGE pkg AS FUNCTION f1 RETURN INT; END; / CREATE PACKAGE BODY pkg AS vc INT := 0; CURSOR cur IS SELECT 1 AS c FROM DUAL; FUNCTION f1 RETURN INT AS BEGIN OPEN cur; FETCH cur INTO vc; CLOSE cur; RETURN vc; END; END; / SELECT pkg.f1() FROM DUAL; {code} {noformat} PKG.F1() 1 {noformat} |
Priority | Major [ 3 ] | Critical [ 2 ] |
Status | Open [ 1 ] | In Progress [ 3 ] |