PL / SQL将函数的返回变量存储在布尔变量中

时间:2018-12-03 17:54:30

标签: oracle plsql

因此,我有一个接受学生证并检查用户是否存在的函数。我创建了没有错误的函数,并试图将返回变量存储在这样的布尔值中并打印结果

SQL> DECLARE
 2  tf BOOLEAN;
 3  BEGIN
 4    EXECUTE tf := valid_stud(5)
 5    DBMS_OUTPUT.PUT_LINE(tf);
 6  END;
 7  /   

但这给我一个错误。

  

第4行出现错误:   ORA-06550:第4行,第9列:   PLS-00103:预期以下情况之一时遇到符号“ TF”:   :=。 (@%;立即   符号“。”被替换为“ TF”以继续。

我的功能是这个

CREATE OR REPLACE FUNCTION valid_stud(v_student_id NUMBER) RETURN BOOLEAN
IS
v_id NUMBER;
BEGIN
  SELECT student_id
  INTO v_id
  FROM STUDENT
  WHERE student_id = v_student_id;
  IF SQL%FOUND THEN
      RETURN TRUE;
  END IF;

EXCEPTION
    WHEN no_data_found THEN RETURN FALSE;

END valid_stud;
/

1 个答案:

答案 0 :(得分:2)

这是演示如何执行此操作的演示。

样品表:

SQL> create table student (
  2    student_id   number
  3  );

Table created.

功能:我删除了不必要的检查SELECT是否返回值;如果可以的话,很好。如果没有,它将引发异常。

SQL> create or replace function valid_stud (
  2    v_student_id number
  3  ) return boolean is
  4    v_id   number;
  5  begin
  6    select student_id into
  7      v_id
  8    from student
  9    where student_id = v_student_id;
 10
 11    return true;
 12  exception
 13    when no_data_found then
 14      return false;
 15  end valid_stud;
 16  /

Function created.

测试:

SQL> set serveroutput on
SQL> declare
  2    tf boolean;
  3  begin
  4    tf := valid_stud(5);
  5    if tf then
  6       dbms_output.put_line('Student exists');
  7    else
  8       dbms_output.put_line('Student does not exist');
  9    end if;
 10  end;
 11  /
Student does not exist

PL/SQL procedure successfully completed.

SQL>