【问题标题】:I want to Create a function named VALIDATE_EMP which accepts employeeNumber as a parameter, Returns TRUE or FALSE depending on existence我想创建一个名为 VALIDATE_EMP 的函数,它接受 employeeNumber 作为参数,根据存在返回 TRUE 或 FALSE
【发布时间】: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; 并保存几行代码。

标签: oracle function plsql


【解决方案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 确实存在。
猜你喜欢
  • 2013-10-26
  • 2022-11-20
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多