在Oracle的select查询中使用值列表作为表



我需要传递一个不在DB表中的员工详细信息列表(EmpNo, Dept)(从另一个系统作为JSON数组获取)。我必须在一个选择查询中使用它们作为一个具有内部连接的表。这在Oracle 11g中是可能的吗?如果有,请解释。

请注意,我没有任何创建函数或过程的权限。

,

Emp Details:

{"EmpNo":"1", "Dept":1},{"EmpNo":"2", "Dept":1},{"EmpNo":"3", "Dept":2},{"EmpNo":"4", "Dept":2}

SQL:

SELECT * FROM attendance att
INNER JOIN (Emp Details) emp
ON att.EmpNo = emp.EmpNo
WHERE emp.Dept = 1

我发现在SQL server中可以这样做,但是在oracle中没有运气

SELECT *  FROM
(VALUES (1,2) , (3,4)
) t1 (c1, c2)

提前感谢!

下面的代码可能会对你有所帮助。

SELECT *  FROM
(
(SELECT 1 AS EmpNo,2 AS Dept FROM DUAL)
UNION 
(SELECT 3 AS EmpNo,4 AS Dept FROM DUAL)
) t1

您可以使用JSON_QUERY()和json_table()的公共表表达式,如下所示:

Schema和insert语句:

create table attendance (EmpNo int,attn_date date);
insert into attendance values(2,DATE '2021-09-02');
insert into attendance values(3,DATE '2021-09-03');

查询:

with emp_json  as  
( SELECT JSON_QUERY('[{"EmpNo":"1", "Dept":1},{"EmpNo":"2", "Dept":1},{"EmpNo":"3", "Dept":2},{"EmpNo":"4", "Dept":2}]', '$' ) AS EmpDetails
FROM DUAL

)   
SELECT  emp.EmpNo , emp.Dept
FROM  json_table( (select EmpDetails from emp_json) , '$[*]'  
COLUMNS ( EmpNo PATH '$.EmpNo'  
, Dept PATH '$.Dept'  
)   
)emp
inner join attendance att  
ON att.EmpNo = emp.EmpNo

输出:

最新更新