Sql 如何让一个过程继续到下一个条件语句,而不管它是真是假

Sql 如何让一个过程继续到下一个条件语句,而不管它是真是假,sql,oracle,Sql,Oracle,我正在努力做到以下几点: 检查第一个条件是否为真 如果第一个条件为true,则我希望存储过程根据从光标获取的第一个“form_field_id”的值在计算中插入1个条目 然后,我希望在值和与第一个form\u字段\u id相关的calculation\u value中输入无限的条目(基于循环中的内容) 检查第二个条件是否为真 如果第二个条件为true,我希望在计算\u值中输入无限个条目,并根据循环中的内容输入值(与第二个表单\u字段\u id相关的值不同) 如果第一个条件为false,我想让存储

我正在努力做到以下几点:

  • 检查第一个条件是否为真
  • 如果第一个条件为true,则我希望存储过程根据从光标获取的第一个“form_field_id”的值在计算中插入1个条目
  • 然后,我希望在值和与第一个
    form\u字段\u id相关的
    calculation\u value中输入无限的条目(基于循环中的内容)
  • 检查第二个条件是否为真
  • 如果第二个条件为true,我希望在
    计算\u值
    中输入无限个条目,并根据循环中的内容输入值(与第二个
    表单\u字段\u id
    相关的值不同)
  • 如果第一个条件为false,我想让存储过程继续执行第二个条件,并检查它是true还是false
  • 如果这两个条件都为false,我希望存储过程不执行任何操作
  • 以下是我迄今为止的尝试。存储过程编译得很好,但没有执行上面列出的操作:

    create or replace PROCEDURE TEST_PROC IS
      Cursor c1 is
     select 
           SUM(Value_Tx) as sum_of_values
           , ff.FORM_FIELD_ID
                 from value v
                 join submission_Value sv on v.value_id = sv.value_id
                 join form_field ff on sv.form_field_id = ff.form_field_id
                where VALUE_TX NOT LIKE '%-%' AND VALUE_TX NOT LIKE '%:%' AND     VALUE_TX NOT LIKE '%.%'
              and ff.form_field_id in  (1,6)
         group by  ff.form_field_id;
     l_var c1%ROWTYPE;
     v_value_id value.value_id%type;
     v_calculation_id calculation.calculation_id%type;
    BEGIN
     OPEN c1;
     IF l_var.form_field_id = 6
     THEN
     insert into calculation (calculation_id, Calculation_Arguments_Tx)
                      values (null, 'SUM_NET_GEN');
    LOOP
       FETCH c1 into l_var;
       EXIT WHEN c1%NOTFOUND;
          insert into value (value_id, value_tx, data_date, hr_utc, hr, hr_num, data_code)
                         values (null, l_var.sum_of_values, l_var.data_date, 'UTC0', null, null, 'NA')
                         returning value_id into v_value_id;
          insert into calculation_value(calculation_value_id, calculation_id, value_id, form_field_id)
                                    values (null, v_calculation_id, v_value_id, l_var.form_field_id);
           END LOOP;
     ELSIF l_var.form_field_Id = 1
     THEN
     insert into calculation (calculation_id,Calculation_Arguments_Tx)
                      values (null, 'SUM_DEMAND')
                      returning calculation_id into v_calculation_id;
          LOOP
       FETCH c1 into l_var;
       EXIT WHEN c1%NOTFOUND;
          insert into value (value_id,  value_tx, utc_offset, data_date, hr_utc, hr, hr_num, data_code)
                         values (null,  l_var.sum_of_values, 0, l_var.data_date, 'UTC0', null, null, 'NA')
                         returning value_id into v_value_id;
          insert into calculation_value ( calculation_value_id, calculation_id, value_id, form_field_id)
                                    values (null, v_calculation_id, v_value_id, l_var.form_field_id);
          END LOOP;
      END IF;
    
       CLOSE c1;
    END TEST_PROC;
    

    在检查
    form\u field\u id
    的值之前,需要将光标移到
    l\u var
    中。我建议将您的程序改写为:

    create or replace PROCEDURE TEST_PROC IS
      Cursor c1 is
        select SUM(Value_Tx) as sum_of_values,
               ff.FORM_FIELD_ID
          from value v
          join submission_Value sv
            on v.value_id = sv.value_id
          join form_field ff
            on sv.form_field_id = ff.form_field_id
          where VALUE_TX NOT LIKE '%-%' AND
                VALUE_TX NOT LIKE '%:%' AND
                VALUE_TX NOT LIKE '%.%' and
                ff.form_field_id in  (1,6)
          group by  ff.form_field_id;
    
      l_var            c1%ROWTYPE;
      v_value_id       value.value_id%type;
      v_calculation_id calculation.calculation_id%type;
    BEGIN
      OPEN c1;
      FETCH c1 into l_var;
    
      IF NOT c1%NOTFOUND AND l_var.form_field_id = 6 THEN
        insert into calculation
          (calculation_id, Calculation_Arguments_Tx)
        values
          (null, 'SUM_NET_GEN');
    
        LOOP
          FETCH c1 into l_var;
          EXIT WHEN c1%NOTFOUND;
    
          insert into value
            (value_id, value_tx, data_date, hr_utc, hr, hr_num, data_code)
          values
            (null, l_var.sum_of_values, l_var.data_date, 'UTC0', null, null, 'NA')
          returning value_id into v_value_id;
    
          insert into calculation_value
            (calculation_value_id, calculation_id, value_id, form_field_id)
          values 
            (null, v_calculation_id, v_value_id, l_var.form_field_id);
        END LOOP;
      ELSIF NOT c1%NOTFOUND AND l_var.form_field_Id = 1 THEN
        insert into calculation
          (calculation_id,Calculation_Arguments_Tx)
        values
          (null, 'SUM_DEMAND')
        returning calculation_id into v_calculation_id;
    
        LOOP
          FETCH c1 into l_var;
          EXIT WHEN c1%NOTFOUND;
    
          insert into value
            (value_id,  value_tx, utc_offset, data_date, hr_utc, hr, hr_num, data_code)
          values
            (null,  l_var.sum_of_values, 0, l_var.data_date, 'UTC0', null, null, 'NA')
          returning value_id into v_value_id;
    
          insert into calculation_value
            (calculation_value_id, calculation_id, value_id, form_field_id)
          values
            (null, v_calculation_id, v_value_id, l_var.form_field_id);
        END LOOP;
      END IF;
    
      CLOSE c1;
    END TEST_PROC;
    

    祝您好运。

    由于某些原因,计算值和值中没有插入任何内容。我们要去拿两次吗?我认为我不需要在第一次插入之前进行获取,因为我没有在insert语句中使用游标中的任何内容。。。(如果我错了,请纠正我)添加到之前,我只在当前游标中返回一行来回复您的第一条注释,在游标打开后的第一条
    if
    语句中,您有
    if l_var.form\u field\u id=6
    。此时,您已打开光标,但从未获取任何内容,
    l_var
    中的所有字段均为空。我认为这是一个简单的逻辑错误,必须提取光标才能获得值。啊,好的,谢谢,那么你建议我如何继续?我是否应该创建两个单独的过程来查找两个ID/分别加载它们?难道没有办法整合它们吗?我无法找到一种方法来获取条件语句(IF)的值,然后也获取要插入的同一行/条目