Oracle 使用不同的参数多次运行查询
我想在循环中运行查询。有两个表,我想从一个表中获取id,然后向另一个表中添加新行,并为每个id添加新值 我有两个表格如下: 配置文件表:Oracle 使用不同的参数多次运行查询,oracle,for-loop,cursor,Oracle,For Loop,Cursor,我想在循环中运行查询。有两个表,我想从一个表中获取id,然后向另一个表中添加新行,并为每个id添加新值 我有两个表格如下: 配置文件表: ID NAME VALUE 1 AAA 111 2 BBB 222 3 CCC 333 4 DDD 444 ``` 属性表: ID ATTRIBUTE_ID VALUE 1 1 VAL1 2 1 VAL2 3 2 VAL2 4
ID NAME VALUE
1 AAA 111
2 BBB 222
3 CCC 333
4 DDD 444 ```
属性表:
ID ATTRIBUTE_ID VALUE
1 1 VAL1
2 1 VAL2
3 2 VAL2
4 2 VAL3
现在,我想从概要文件表中获取每个唯一的ID,并在属性表中插入一个具有新值的行。结束表应如下所示:
ID ATTRIBUTE_ID VALUE
1 1 VAL1
2 1 VAL2
3 2 VAL2
4 2 VAL3
5 1 VAL4
6 2 VAL4
我已尝试跟踪光标,但失败:
DECLARE
-- Store the SELECT query in a cursor
CURSOR l_cur IS SELECT DISTINCT(ID) FROM PROFILE table;
--Create a variable that will hold each result from the cursor
l_cur_rec l_cur%ROWTYPE;
BEGIN
-- Open the Cursor so that we may retrieve results
OPEN l_cur;
LOOP
-- INSERT INTO another table
INSERT INTO ATTRIBUTE table (ID, ATTRIBUTE_ID, PLATFORM_ID)
VALUES((select max(ID)+1 from ATTRIBUTE_PLATFORM), (l_cur) , VAL4);
-- EXIT the loop if there are no more results
EXIT WHEN l_cur%NOTFOUND;
END LOOP;
-- Close the cursor to release the memory
CLOSE l_cur;
END;
您应该使用序列和触发器来填充属性表中的
id
,或者在Oracle 12中可以使用自动生成列selectmax(id)+1在实际表中不是一个好主意,因为存在并发会话。然后可以在一条语句中插入:
insert into attribute_table (attribute_id, value)
select distinct id, 'VAL4' from profile_table
如果要继续使用解决方案,请按如下方式更正代码:
declare
cursor l_cur is select distinct(id) from profile_table;
l_cur_rec l_cur%rowtype;
begin
open l_cur;
loop
fetch l_cur into l_cur_rec;
exit when l_cur%notfound;
dbms_output.put_line(l_cur_rec.id);
insert into attribute_table (id, attribute_id, value)
values((select max(id)+1 from attribute_table), l_cur_rec.id, 'VAL4');
end loop;
close l_cur;
end;
配置文件表中的其他两行发生了什么?4+4是如何变成6行的?表的实际名称是什么<代码>插入属性表
不起作用-单词表
不在语法正确的位置???我试着跟随光标,但失败了:“这就是你正在运行的代码吗?”?如果是这样,您是否尝试过修复语法错误?这纯粹是我键入的一个示例。我知道有错误。但是,我认为这里的人们能够自给自足地理解这个问题,并提出如下解决方案。谢谢。