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

Posted

技术标签:

【中文标题】我想创建一个名为 VALIDATE_EMP 的函数,它接受 employeeNumber 作为参数,根据存在返回 TRUE 或 FALSE【英文标题】:I want to Create a function named VALIDATE_EMP which accepts employeeNumber as a parameter, Returns TRUE or FALSE depending on existence 【发布时间】:2021-09-06 06:36:24 【问题描述】:

样本数据

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 作为参数,如果指定的员工存在于表名“Employeee”中,则返回TRUE,否则返回FALSE

【问题讨论】:

看来是你创造的。那么,有什么问题呢? 不应该检查至少一名员工,而不是超过一名吗?顺便说一句,我只需 return lv_count > 0; 并保存几行代码。 【参考方案1】: 缺少分号作为局部变量声明的终止符 如果您连接的用户不是 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>

【讨论】:

调用此函数后如何在输出中获取布尔值,即它应该返回 true 或 false。那么,如何调用这个函数 已编辑;看看吧。 员工 1 确实存在。

以上是关于我想创建一个名为 VALIDATE_EMP 的函数,它接受 employeeNumber 作为参数,根据存在返回 TRUE 或 FALSE的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift 访问 Objective-C 变量/函数

从片段函数更改 TextView 的值

使用非静态成员函数的 C++ 排序向量

如何从另一个函数中获取变量

在当前范围内没有为 struct `schema::todos::table` 找到名为 `table` 的函数或关联项

在 onclick 属性中使用咖啡脚本创建函数 [重复]