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