3.2 BOOLEAN Data Type
The PL/SQL data type BOOLEAN stores logical values, which are the boolean values TRUE and FALSE and the value NULL. NULL represents an unknown value.
The syntax for declaring an BOOLEAN variable is:
variable_name BOOLEAN
The only value that you can assign to a BOOLEAN variable is a BOOLEAN expression. For details, see "BOOLEAN Expressions".
Because SQL has no data type equivalent to BOOLEAN, you cannot:
-
Assign a
BOOLEANvalue to a database table column -
Select or fetch the value of a database table column into a
BOOLEANvariable -
Use a
BOOLEANvalue in a SQL function(However, a SQL query can invoke a PL/SQL function that has a
BOOLEANparameter, as in "Example 3-3".) -
Use a
BOOLEANexpression in a SQL statement, except as an argument to a PL/SQL function invoked in a SQL query, or in a PL/SQL anonymous block.Note:
An argument to a PL/SQL function invoked in a static SQL query cannot be a
BOOLEANliteral. The workaround is to assign the literal to a variable and then pass the variable to the function, as in "Example 3-3".
You cannot pass a BOOLEAN value to the DBMS_OUTPUT.PUT or DBMS_OUTPUT.PUTLINE subprogram. To print a BOOLEAN value, use an IF or CASE statement to translate it to a character value (for information about these statements, see "Conditional Selection Statements").
Example 3-2 Printing BOOLEAN Values
In this example, the procedure accepts a BOOLEAN parameter and uses a CASE statement to print Unknown if the value of the parameter is NULL, Yes if it is TRUE, and No if it is FALSE.
See Also:
Example 2-34, which creates a print_boolean procedure that uses an IF statement.
PROCEDURE print_boolean (b BOOLEAN)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE (
CASE
WHEN b IS NULL THEN 'Unknown'
WHEN b THEN 'Yes'
WHEN NOT b THEN 'No'
END
);
END;
BEGIN
print_boolean(TRUE);
print_boolean(FALSE);
print_boolean(NULL);
END;
Result:
Yes No Unknown
Example 3-3 SQL Statement Invokes PL/SQL Function with BOOLEAN Parameter
In this example, a SQL statement invokes a PL/SQL function that has a BOOLEAN parameter.
FUNCTION f (x BOOLEAN, y PLS_INTEGER) RETURN employees.employee_id%TYPE AUTHID CURRENT_USER AS BEGIN IF x THEN RETURN y; ELSE RETURN 2*y; END IF; END; DECLARE name employees.last_name%TYPE; b BOOLEAN := TRUE; BEGIN SELECT last_name INTO name FROM employees WHERE employee_id = f(b, 100); DBMS_OUTPUT.PUT_LINE(name); b := FALSE; SELECT last_name INTO name FROM employees WHERE employee_id = f(b, 100); DBMS_OUTPUT.PUT_LINE(name); END; /
Result:
King Whalen