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.