sql - 如何将 3.5k 整数插入 Oracle DB 中的数组
问题描述
我有自定义类型:
create or replace type integer_varray as varray (4000) of int;
然后使用这个数组的表:
create table plan_capacities
(
id int generated by default as identity not null constraint plan_capacities_pkey primary key,
line_id int references lines (id) on delete cascade,
model_id int references models (id) on delete cascade,
plan_id int references plans (id) on delete cascade,
capacity integer_varray
);
然后我想插入一些数据。问题是在Oracle中我不能在数组“构造函数”中使用超过1000个项目(我有3 500个项目)这么简单的语句
INSERT INTO plan_capacities ("model_id", "line_id", "plan_id", "capacity") VALUES (1,1,1,integer_varray(1,2,3.....35000))
是不可能使用的。(数据是一些容量,必须按特定顺序排列)。
应该插入数组的数据在我必须放入脚本的字符串中。->{1,10,11,10,20,0,0,0,1,10 ....}
如何插入大量数据?
我试图将它们插入到临时表中,然后用它们填充数组 - 这可行,但该 sql 脚本有 3500 行(仅创建一个记录plan_capacities
),这太糟糕了而且很大。
解决方案
您可以将数组用作表,通过一条 SQL 语句将其值插入到表中;例如:
declare
vArray integer_varray;
begin
-- some code to populate vArray
insert into someTable(col)
select column_value from table(vArray);
end;
如果可以使用查询填充数组,则不需要数组,只需将查询用作插入语句的数据源;例如:
insert into someTable(col)
select something
from someOtherTable
如果您需要一种方法来创建一组数字,例如 1、2、... 3500,这是一种常用的方法:
select level
from dual
connect by level <= 3500
关于从字符串构建一组数字的方法,这是一种非常常用的方法:
SQL> create or replace type integer_varray as varray (4000) of int
2 /
Type created.
SQL> create table someTable(n number);
Table created.
SQL> declare
2 vString varchar2(32000) := '1,10,11,10,20,0,0,0,1,10';
3 vArray integer_varray;
4 begin
5 insert into someTable(n)
6 select to_number(regexp_substr(vString, '[^,]+', 1, level))
7 from dual
8 connect by instr(vString, ',', 1, level - 1) > 0;
9 end;
10 /
PL/SQL procedure successfully completed.
SQL> select * from someTable;
N
----------
1
10
11
10
20
0
0
0
1
10
10 rows selected.
SQL>
推荐阅读
- python - 无法从 pycharm/heroku 找到我的包
- azure-data-factory-2 - ADF 计算已知文件夹中与 FileMask 匹配的文件数量的更好方法
- typescript - 与 ES2020 无关的可选链接错误
- c - 在 MPI 中发送结构数组
- javascript - 在 VueJS 中模拟一个简单的函数,JEST
- sql-server - 如何使用 ssis 转换 SQL Server 几何数据类型
- c++ - 致命错误:构建/包含:没有这样的文件或目录
- r - x[floor(d)] + x[ceiling(d)] 中的错误:二元运算符的非数字参数
- cadence-workflow - 工作流程结构、促销优惠流程
- arrays - 如何编写一个返回数组的函数,其中重复的字符串组合在一起?