Oracle 使用不同的参数多次运行查询

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,然后向另一个表中添加新行,并为每个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       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行的?表的实际名称是什么<代码>插入属性表
不起作用-单词
不在语法正确的位置???我试着跟随光标,但失败了:“这就是你正在运行的代码吗?”?如果是这样,您是否尝试过修复语法错误?这纯粹是我键入的一个示例。我知道有错误。但是,我认为这里的人们能够自给自足地理解这个问题,并提出如下解决方案。谢谢。