/*alter table schematics
add type_id NUMBER;*/
begin
for i in (
select a.id,
substr(a.key,
instr(a.key, '|') + 1,
(instr(a.key, '|', 1, 2) -
(instr(a.key, '|', 1, 1) + 1))) TYPE_ID
from schematics a)
loop
update schematics
set type_id = TYPE_ID;
end loop;
)
end
嘿伙计们,你能救我吗?
TYPE_ID给了我一堆ID,我希望使用for循环将它们存储在我新创建的列中。第一次使用for in sql,不知道怎么做。
有帮助吗?
提前谢谢。
答案 0 :(得分:3)
您正尝试使用从其他列计算的值更新新创建的列。这通常只需更新即可完成:
update schematics
set type_id =
substr(key,
instr(key, '|') + 1,
instr(key, '|', 1, 2) - instr(key, '|', 1, 1) - 1);
如果要在PL / SQL中对每个记录执行相同的循环,则需要选择密钥和计算值以用于更新。但这似乎有点矫枉过正。
begin
for rec in
(
select distinct
key,
substr(key,
instr(key, '|') + 1,
instr(key, '|', 1, 2) - instr(key, '|', 1, 1) - 1) as type_id
from schematics
) loop
update schematics
set type_id = rec.type_id
where key = rec.key;
end loop;
end;
答案 1 :(得分:0)
您不需要for循环。此外,纯SQL中没有循环...只是因为你通常不需要它们。程序扩展中存在循环,例如PL / SQL(Oracle)或T / SQL(SQL服务器),但它们实际上无法解决您的问题。
只需使用简单的update
update schematics set type_id = substr(akey,
instr(key, '|') + 1,
(instr(key, '|', 1, 2) -
(instr(key, '|', 1, 1) + 1)))
(以后可能需要where
条款)