gpt4 book ai didi

sql - pl/sql 函数 - 为 SELECT ... NOT IN() 动态传递多个 varchar2 值

转载 作者:行者123 更新时间:2023-12-02 07:30:35 24 4
gpt4 key购买 nike

我有一个表EMP,定义如下:

EMP_ID         NOT NULL   NUMBER(6)    
EMP_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)

如果我们想计算姓名不在“King”、“Steve”、“John”中的员工,我们只需使用此查询:

SELECT count(*) FROM emp WHERE emp_name NOT IN('King','Steve','John');


现在这是我想要的:

我想做的是,创建一个 PL/SQL 函数,它根据动态输入返回计数,就像我们通过:

SELECT count_emp('King,Steve,John') FROM dual;
SELECT count_emp('William,Donald') FROM dual;
SELECT count_emp('Daniel') FROM dual;

需要返回适当的计数,如何使用 PL/SQL FUNCTION

实现此目的

这是我尝试过的,需要指导:

CREATE OR REPLACE FUNCTION count_emp(emp_nm IN varchar) 
RETURN number
IS
cnt NUMBER;
BEGIN
SELECT count(*) INTO cnt FROM emp WHERE emp_name NOT IN(emp_nm);
RETURN cnt;
END;

它给出了单个名称的结果,但我如何拆分/格式化多个输入(即 emp_nm)以传入 NOT IN()

最佳答案

这样试试,

CREATE OR REPLACE 
FUNCTION count_emp(emp_nm IN VARCHAR)
RETURN NUMBER
IS
cnt NUMBER;
BEGIN
SELECT count(*)
INTO cnt
FROM emp
WHERE ename NOT IN(
SELECT regexp_substr (emp_nm, '[^,]+', 1, ROWNUM)
FROM dual
CONNECT BY LEVEL <= LENGTH (regexp_replace (emp_nm, '[^,]+')) + 1);

RETURN cnt;
END;

关于sql - pl/sql 函数 - 为 SELECT ... NOT IN() 动态传递多个 varchar2 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22189607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com