【发布时间】:2016-08-05 14:40:11
【问题描述】:
我正在尝试使用我创建的 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;
【问题讨论】:
-
您想使用 PL/SQL 集合中的值更新真实表吗?它必须是那种集合类型吗?表数据如何与集合相关?这将有助于显示表结构,可能还有一些示例日期、您尝试的更新以及您正在寻找的结果。
-
发布你到目前为止所做的代码
-
您似乎正在尝试将表中的每个匹配行更新为 10000,然后再次将其更新为 20000。假设它有一个名为
v_new_prix的列,这看起来是错误的。而且您的光标不包括您尝试用于更新的e.RATE_PACK_ELEMENT_ID。你的目标到底是什么?为什么你使用 PL/SQL,而不是普通 SQL 中的相关更新? -
当然同意 Alex..why PL/SQL。它可以由 SQL 本身完成,是任何特定要求的一部分。
-
那么你真正要做的是将'+21685000'对应的参数值设置为10000,将'+21685003'对应的值设置为20000?您仍然没有显示表结构,或者表是如何相关的,或者它们在开始时包含的数据。