我正在尝试使用我创建的PL / SQL集合中的值更新表中的多个列。
所以我宣布一个这样的表:
TYPE mon_tableau IS VARRAY (2) OF FLOAT;
v_tab mon_tableau;
我给它一些这样的值:
v_tab := mon_tableau (10000, 20000);
然后我创建一个SQL语句,用v_tab
中的两个值(10000和20000)获取我想要更新的值。
我该如何更新?我在循环中尝试了一个游标:
DECLARE
TYPE mon_tableau IS VARRAY (2) OF FLOAT;
v_tab mon_tableau;
v_new_prix RATE_PACK_PARAMETER_VALUE.PARAMETER_VALUE_FLOAT%TYPE;
CURSOR get_prix
IS
SELECT e.PARAMETER_VALUE_FLOAT
FROM mpuzptab a,
mpulkgvm b,
mpulkrim c,
rate_pack_element d,
rate_pack_parameter_value e
WHERE a.digits IN ('+21685000', '+21685003')
BEGIN
v_tab := mon_tableau (10000, 20000);
FOR i IN v_tab.FIRST..v_tab.LAST
LOOP
FOR j IN get_prix
LOOP
v_new_prix := j.PARAMETER_VALUE_FLOAT;
UPDATE rate_pack_parameter_value v
SET v_new_prix = v_tab (i)
WHERE v.RATE_PACK_ELEMENT_ID = j.RATE_PACK_ELEMENT_ID;
END LOOP;
END LOOP;
END;
答案 0 :(得分:0)
请更正以下内容并尝试。也发布你的错误。
你的光标缺失了“
j.RATE_PACK_ELEMENT_ID
“您在稍后更新时使用的。在使用之前先选择它。
以下代码应该有效(未经过测试)。修改提到的地方。
DECLARE
TYPE mon_tableau IS VARRAY (2) OF FLOAT;
v_tab mon_tableau;
v_new_prix RATE_PACK_PARAMETER_VALUE.PARAMETER_VALUE_FLOAT%TYPE;
CURSOR get_prix
IS
SELECT e.PARAMETER_VALUE_FLOAT,
e.RATE_PACK_ELEMENT_ID
FROM mpuzptab a,
mpulkgvm b, ---Unnecessary table
mpulkrim c, ---Unnecessary table
rate_pack_element d,---Unnecessary table
rate_pack_parameter_value e
WHERE a.digits IN ('+21685000', '+21685003')
and <code>; -----Join your table a & e to avoid cartesian
BEGIN
v_tab := mon_tableau(10000, 20000);
FOR i IN v_tab.FIRST..v_tab.LAST
LOOP
FOR j IN get_prix
LOOP
--v_new_prix := j.PARAMETER_VALUE_FLOAT;
UPDATE rate_pack_parameter_value v
SET PARAMETER_VALUE_FLOAT = v_tab(i)
WHERE v.RATE_PACK_ELEMENT_ID = j.RATE_PACK_ELEMENT_ID;
END LOOP;
END LOOP;
END;