我正在尝试将值插入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(。但是,您 can 在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;
请注意,我已经删除了colesce,因为在其中保证A.file_type和b.file_type无论如何都相同,因此您可以参考其中一个列。
现在,您的原始语句也包括以下几行:
WHEN a.input = b.input THEN
input_num+1
...
WHEN a.output = b.output THEN
out_num+1
我不知道这些应该做什么,但是我想您可以编写其他查询来检测这些条件并输出结果。
- 从技术上讲,在Oracle 12.1中,您可以在SQL https://oracle-base.com/articles/12c/with-clause-enhancements--enhancements-12cr1 >