IF in PL/SQL function causes Internal Server Error
Details
| Detail name | Value |
|---|---|
| Changelog Number | 16140 |
| Type | Bug |
| Status | Resolved |
| Affected Versions | Exasol 7.0.0, Exasol 7.1.0, Exasol 8.0.0 |
| Fix Versions | Exasol 8.21.0 |
| Resolution Date | 2023-08-04 |
Description
A query causes an internal server error when UDF returns IF statement or a variable, which is the result of IF statement
Preparation
--/
CREATE OR REPLACE FUNCTION f(c IN BOOLEAN) RETURN BOOLEAN
BEGIN
RETURN IF c THEN true ENDIF;
END
/
--/
CREATE OR REPLACE FUNCTION g() RETURN BOOLEAN
IS
res BOOLEAN;
BEGIN
FOR i := 1 TO 2
DO
res := IF i > 1 THEN true ENDIF;
END FOR;
RETURN res;
END
/
Examples
Calling these UDF causes internal server error
SELECT f(true); SELECT g();
Workaround
Replacing IF … ENDIF with CASE WHEN … END
--/
CREATE OR REPLACE FUNCTION f(c IN BOOLEAN) RETURN BOOLEAN
BEGIN
RETURN CASE WHEN c THEN true END;
END
/
--/
CREATE OR REPLACE FUNCTION g() RETURN BOOLEAN
IS
res BOOLEAN;
BEGIN
FOR i := 1 TO 2
DO
res := CASE WHEN i > 1 THEN true END;
END FOR;
RETURN res;
END
/
Fix
The queries execute without error.