gpt4 book ai didi

sql - 在 CASE 语句中使用 INSERT INTO 时出错

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:27 24 4
gpt4 key购买 nike

我试图将值插入到 CASE 语句内的表中,但我在 INSERT INTO 中收到错误“缺少表达式”。

CASE 中使用 INSERT INTO 的正确方法是什么?您可以在下面找到代码。我在过程中使用此 SELECT 语句,并将其结果放入游标中。

SELECT
COALESCE(a.file_type,b.file_type) AS file_type,a.input AS a_input,b.input AS b_input,a.output AS a_output,b.output AS b_output,
CASE WHEN a.input = b.input THEN
input_num+1
WHEN a.input <> b.input THEN
INSERT INTO diff_values(file_type,a_input,b_input,report_date)
SELECT file_type,a.input,b.input FROM test1 a, tset2 b WHERE
a.file_type=b.file_type
WHEN a.output = b.output THEN
out_num+1
END CASE
FROM
test1 a, tset2 b
WHERE a.file_type=b.file_type
AND a.report_date=b.report_date;

最佳答案

  • 您不能在 SQL 查询中嵌入 DML 语句(例如 INSERT)。

  • 您不能在 SQL 查询中嵌入 CASE 语句(即 PL/SQL)。您可以在 SQL 查询中嵌入一个 CASE 表达式,但是,该表达式只能计算结果,它不能包括 PL/SQL(请参见上面的 #1)*。

您似乎想要实现的结果是从两个表(test1tset2)查询一些数据,计算一个表达式,然后将结果插入回与新记录相同的表。由于您的最终结果是 INSERT,因此您将从它开始,然后创建一个查询来收集它所需的数据,例如:

INSERT INTO diff_values(file_type,a_input,b_input,report_date)
SELECT a.file_type,
a.input,
b.input,
a.report_date
FROM test1 a, tset2 b
WHERE a.file_type=b.file_type
AND a.report_date=b.report_date
AND a.input <> b.input;

请注意,我已经删除了 COALESCE,因为 WHERE 子句保证 a.file_type 和 b.file_type 无论如何都是相同的,因此您可以只引用其中一列。

现在,您的原始声明还包括以下几行:

WHEN a.input = b.input THEN
input_num+1
...
WHEN a.output = b.output THEN
out_num+1

我不知道这些应该做什么,但我想您可以编写额外的查询来检测这些条件并输出结果。

关于sql - 在 CASE 语句中使用 INSERT INTO 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067997/

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