首页 > 解决方案 > 我想创建一个名为 VALIDATE_EMP 的函数,它接受 employeeNumber 作为参数,根据存在返回 TRUE 或 FALSE

问题描述

样本数据

create table Employees (emp_id number, emp_name varchar2(50), salary number, department_id number) ;

insert into Employees values(1,'ALex',10000,10);
insert into Employees values(2,'Duplex',20000,20);
insert into Employees values(3,'Charles',30000,30);
insert into Employees values(4,'Demon',40000,40);

代码 :

    create or replace function validate_emp(empno in number)
    return boolean
    is lv_count number
    begin
    
    select count(employee_id) into lv_count from hr.employees where employee_id = empno;
    if lv_count >1 then
    return true;
    else
    return false;
    end;

我想创建一个名为的函数,该函数VALIDATE_EMP接受empno作为参数,TRUE如果指定的员工存在于表名“Employeee”中,则返回 else FALSE

标签: oraclefunctionplsql

解决方案


  • 缺少分号作为局部变量声明的终止符
  • 如果您连接的用户不是hr,请将其删除(否则,保持原样)
  • 列名是emp_id,不是employee_id
  • 失踪end if

修复后,代码编译:

SQL> CREATE OR REPLACE FUNCTION validate_emp (empno IN NUMBER)
  2     RETURN BOOLEAN
  3  IS
  4     lv_count  NUMBER;
  5  BEGIN
  6     SELECT COUNT (emp_id)
  7       INTO lv_count
  8       FROM employees
  9      WHERE emp_id = empno;
 10
 11     IF lv_count > 1
 12     THEN
 13        RETURN TRUE;
 14     ELSE
 15        RETURN FALSE;
 16     END IF;
 17  END;
 18  /

Function created.

SQL>

怎么称呼它?通过 PL/SQL 作为 Oracle 的 SQL 没有布尔数据类型。

SQL> set serveroutput on
SQL> declare
  2    result boolean;
  3  begin
  4    result := validate_emp(1);
  5
  6    dbms_output.put_line(case when result then 'employee exists'
  7                                 else 'employee does not exist'
  8                            end);
  9  end;
 10  /
employee does not exist

PL/SQL procedure successfully completed.

SQL>

也许你宁愿回来VARCHAR2;那么您将模仿布尔值,但您可以在普通 SQL 中使用它:

SQL> CREATE OR REPLACE FUNCTION validate_emp (empno IN NUMBER)
  2     RETURN VARCHAR2
  3  IS
  4     lv_count  NUMBER;
  5  BEGIN
  6     SELECT COUNT (emp_id)
  7       INTO lv_count
  8       FROM employees
  9      WHERE emp_id = empno;
 10
 11     IF lv_count > 1
 12     THEN
 13        RETURN 'TRUE';
 14     ELSE
 15        RETURN 'FALSE';
 16     END IF;
 17  END;
 18  /

Function created.

SQL> select validate_emp(1) from dual;

VALIDATE_EMP(1)
-------------------------------------------------------------------
FALSE

SQL>

推荐阅读