我想创建一个名为 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的主要内容,如果未能解决你的问题,请参考以下文章
在当前范围内没有为 struct `schema::todos::table` 找到名为 `table` 的函数或关联项