我试图在CASE
语句内的表中插入值,但是在INSERT INTO
中遇到错误“缺少表达式”的错误。
在INSERT INTO
中使用CASE
的正确方法是什么?您可以在下面找到代码。我在过程中使用此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;
答案 0 :(得分:1)
您不能在SQL查询中嵌入DML语句(例如INSERT
)。
您不能在SQL查询中嵌入CASE 语句(PL / SQL)。您可以 在SQL查询中嵌入CASE 表达式,但是该表达式只能计算结果,不能包含PL / SQL(请参见上面的#1)*。
您似乎想要实现的结果是从两个表(test1
和tset2
)中查询一些数据,评估一个表达式,然后将结果插入与新记录相同的表中。由于您的最终结果是一个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;
请注意,由于WHERE子句保证a.file_type和b.file_type都相同,因此我删除了COALESCE,因此您可以仅引用其中一列。
现在,您的原始声明也包括以下几行:
WHEN a.input = b.input THEN
input_num+1
...
WHEN a.output = b.output THEN
out_num+1
我不知道这些应该做什么,但是我想您可以编写其他查询来检测这些情况并输出结果。