Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use of boolean in PL/SQL

Tags:

oracle

plsql

I have a function in PL/SQL which checks if a particular emp_id exists or not which is:

CREATE OR REPLACE FUNCTION checkEmpNo(eno numeric)
RETURN boolean IS
    emp_number number;
BEGIN
    SELECT emp_id INTO emp_number
    FROM emp;
    IF eno=emp_number
    THEN
        return true;
    ELSE
        return false;
    END IF;
END checkEmpNo;

The function compiles successfully, but when I try to run it as:

DECLARE
    exist boolean;
BEGIN
    exist=checkEmpNo(1);
    dbms_output.put_line(exist);
END;

it returns the error:

ORA-06550: line 5, column 1:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored

3. BEGIN
4. exist:=checkEmpNo(1);
5. dbms_output.put_line(exist);
6. END;

EDIT:

I also tried this:

DECLARE
    exist boolean:=true;
BEGIN
    if(exist=checkEmpNo(1))
    then
        dbms_output.put_line('true');
    else
        dbms_output.put_line('false');
    end if;
END;

And it returns the error: ORA-01422: exact fetch returns more than requested number of rows

like image 573
Chandeep Avatar asked Nov 26 '12 06:11

Chandeep


People also ask

What is the use of boolean value?

Boolean values and operations There are just two values of type bool: true and false. They are used as the values of expressions that have yes-or-no answers.

What does boolean do in SQL?

BOOLEAN Data Type. BOOLEAN can be used as a data type when defining a column in a table or a variable in a database procedure. Support for the BOOLEAN data type helps migrations from other database products. Boolean columns accept as input the SQL literals FALSE and TRUE.

Does PL SQL have Boolean data type?

The PL/SQL scalar data types are: The SQL data types. BOOLEAN.


2 Answers

dbms_output.put_line is not overloaded to accept a boolean argument. You can do something like

dbms_output.put_line( case when exist = true 
                           then 'true'
                           else 'false'
                        end );

to convert the boolean into a string that you can then pass to dbms_output.

The ORA-01422 error is a completely separate issue. The function checkEmpNo includes the SELECT INTO statement

SELECT emp_id 
  INTO emp_number
  FROM emp;

A SELECT INTO will generate an error if the query returns anything other than 1 row. In this case, if there are multiple rows in the emp table, you'll get an error. My guess is that you would want your function to do something like

CREATE OR REPLACE FUNCTION checkEmpNo(p_eno number)
  RETURN boolean 
IS
  l_count number;
BEGIN
  SELECT count(*)
    INTO l_count
    FROM emp
   WHERE emp_id = p_eno;

  IF( l_count = 0 )
  THEN
    RETURN false;
  ELSE
    RETURN true;
  END IF;
END checkEmpNo;
like image 172
Justin Cave Avatar answered Oct 16 '22 14:10

Justin Cave


Alternatively you can use the Oracle function diutil.bool_to_int to convert a boolean value to an integer: True -> 1, False -> 0.

dbms_output.put_line(diutil.bool_to_int(p_your_boolean));
like image 35
Rene Avatar answered Oct 16 '22 14:10

Rene