使用插入到内部案例语句中时的错误



我正在尝试将值插入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(*。

您似乎想实现的结果是从两个表(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;

请注意,我已经删除了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 >

最新更新