oracle - 如何使用循环将数据记录插入表中?
问题描述
我想使用 PL/SQL 循环插入几条记录,但是当我在 SQL Developer 中执行以下块时,我收到以下错误:
declare
loop_size number;
begin
loop_size := 10;
while loop_size > 0
loop
INSERT INTO CM.CUSTOMER (ID, FIRST_NAME, LAST_NAME, STATUS )
VALUES (CM.SQ_CUSTOMER.nextval, 'Jhon', 'Jhon',10);
loop_size := loop_size -1;
end loop;
end;
错误
PLS-00225: subprogram or cursor 'CM' reference is out of scope
解决方案
我无法重现您的错误,但一个问题是它CM.CUSTOMER
不能既是表又是序列。
通常最好不要硬编码模式名称,除非你真的必须这样做。我宁愿在这里省略模式名称,只从CM
帐户中运行它。
我创建了一个名为的序列customer_seq
,以下运行没有错误:
create table customer
( id number primary key
, first_name varchar2(20)
, last_name varchar2(20)
, status number );
create sequence customer_seq;
declare
status varchar(10) := '10';
loop_size number := 10;
begin
while loop_size > 0
loop
insert into customer (id, first_name, last_name, status)
values (customer_seq.nextval, 'Jhon', 'Jhon', status);
loop_size := loop_size -1;
end loop;
end;
/
如果使用 Oracle 12.1 或更高版本,我更愿意使用标识列并停止微管理序列。你也不需要自己管理循环索引,因为 PL/SQL 有一个方便的for
循环结构:
create table customer
( id number generated always as identity primary key
, first_name varchar2(20)
, last_name varchar2(20)
, status number );
declare
status varchar(10) := '10';
loop_size number := 10;
begin
for i in 1..loop_size loop
insert into customer (first_name, last_name, status )
values ('Jhon', 'Jhon', status);
end loop;
end;
/
推荐阅读
- php - Github 明星在 packagegist 中没有正确显示
- swift - 用于生产的 ApplePay 集成
- jenkins - 如何在 Jenkins 声明式管道中执行 Groovy 语句?
- python - random.sample() 如何控制重现性
- reactjs - Redux:更改存储中的值不会触发我使用相同值的另一个组件
- python - 检查python字典中的缺失天数
- php - 在 PuTTY 中使用 php
- c - 无法在 C 中以“w”或“w+”模式写入新文件
- android - 两个不同的 ANDROID ID - settings_secure.aml 和 settings_ssaid.xml
- python - 再次运行代码时如何清除 vscode 终端?