gpt4 book ai didi

Oracle 条件更新查询

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

我有一个要求,如下所示:

假设我们有 5 行的 EMP 表,其中 deptno = 20 --这里我将从输入参数中获取 deptno,即 20

EMPNO   ENAME   JOB       MGR   HIREDATE    SAL     COMM    DEPTNO 
--------------------------------------------------------------------------------
7566 JONES MANAGER 7839 04/02/1981 2975 - 20
7788 SCOTT ANALYST 7566 12/09/1982 3000 - 20
7902 FORD ANALYST 7566 12/03/1981 3000 - 20
7369 SMITH CLERK 7902 12/17/1980 800 - 20
7876 ADAMS CLERK 7788 01/12/1983 1100 - 20

现在我想在过程中编写一个 UPDATE 查询来更新 EMP 表设置 JOB = 'MANAGER' 其中 empno in (7788,7902); -- 这里 empno 即 7788 和 7902 我将从输入参数中获取

我的更新查询应该更新 JOB = 'MANAGER' 的 2 行,其中 deptno = 20对于其余 3 行,我想更新为 Null 值。

最终输出如下所示:

EMPNO   ENAME   JOB       MGR   HIREDATE    SAL     COMM    DEPTNO 
--------------------------------------------------------------------------------
7566 JONES 7839 04/02/1981 2975 - 20
7788 SCOTT MANAGER 7566 12/09/1982 3000 - 20
7902 FORD MANAGER 7566 12/03/1981 3000 - 20
7369 SMITH 7902 12/17/1980 800 - 20
7876 ADAMS 7788 01/12/1983 1100 - 20

那么编写此查询的最佳方式是什么

最佳答案

尝试:

UPDATE emp
SET job = (CASE empno
WHEN 7788
THEN 'MANAGER'
WHEN 7902
THEN 'MANAGER'
ELSE NULL
END)
WHERE deptno = 20;

或者

UPDATE emp
SET job = (CASE
WHEN empno IN (7788, 7902)
THEN 'MANAGER'
ELSE NULL
END)
WHERE deptno = 20;

希望这就是您所追求的......

编辑:在您对来自数字表的输入进行评论后,输入类似这样的内容应该有效:

CREATE TYPE number_tab
AS TABLE OF NUMBER
/

Type Created.

CREATE OR REPLACE
PROCEDURE upd_emp (
p_deptno IN emp.deptno%TYPE,
p_empno_tab IN number_tab
)
IS
BEGIN
UPDATE emp e
SET e.job = (SELECT (CASE
WHEN t.column_value IS NULL
THEN NULL
ELSE 'MANAGER'
END)
FROM TABLE(p_empno_tab) t
WHERE t.column_value(+) = e.empno)
WHERE deptno = p_deptno;
EXCEPTION
WHEN others
THEN
...Exception handling code
END upd_emp;
/

关于Oracle 条件更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329205/

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