在 oracle 临时表中插入 1000 多个长数字
Posted
技术标签:
【中文标题】在 oracle 临时表中插入 1000 多个长数字【英文标题】:insert 1000+ long numbers into oracle temp table 【发布时间】:2018-05-29 06:43:15 【问题描述】:我在 oracle 中对我的表进行选择操作,但得到 ORA-01795,所以, 然后我尝试将我的值插入到临时表中的顺序 1000+ (890623250,915941020,915941021,....1000+ 次) 的列表中,但我不知道该怎么做,以便以后我可以做一个从临时表中选择
所以基本上我的目标是将这 1000 个 id 插入到 schema 的临时表中 TEMP_LID INTEGER 像 INSERT INTO TEMP_LINK SELECT(890623254,915941020,1000+ 值)
【问题讨论】:
您能分享您的实际查询吗?这个问题有点不清楚,看到一些具体的东西可能有助于解决这个问题。 Is there a workaround for ORA-01795: maximum number of expressions in a list is 1000 error?的可能重复 其实我只是想将我的 id 列表(890623250,915941020,915941021,....1000+ 次)插入到模式 TEMP_LINT ID 的临时表中 请向我们展示实际的 SQL,并查看提供的 linkeThomas G 【参考方案1】:使用集合。 SYS.ODCINUMERLIST
是一个内置的VARRAY
:
INSERT INTO TEMP_LINK ( value )
SELECT COLUMN_VALUE
FROM TABLE( SYS.ODCINUMBERLIST( 890623254,915941020,1000 /* + values */ ) );
或者您可以定义自己的集合:
CREATE TYPE NumberList IS TABLE OF NUMBER;
INSERT INTO TEMP_LINK ( value )
SELECT COLUMN_VALUE
FROM TABLE( NumberList( 890623254,915941020,1000 /* + values */ ) );
但是,如果您要使用集合,则不需要将它们加载到临时表中:
SELECT *
FROM your_table
WHERE your_id MEMBER OF NumberList( 890623254,915941020,1000 /* + values */ )
或
SELECT *
FROM your_table
WHERE your_id IN (
SELECT COLUMN_VALUE
FROM TABLE( 890623254,915941020,1000 /* + values */ )
);
【讨论】:
【参考方案2】:最好使用 SQL* Loader 进行批量插入。另一种选择是使用 Excel 或 notepad++ 为所有 ID 构建查询。
INSERT INTO mytable(id)
select 890623250 FROM DUAL UNION ALL
select 915941020 FROM DUAL UNION ALL
...
..
【讨论】:
以上是关于在 oracle 临时表中插入 1000 多个长数字的主要内容,如果未能解决你的问题,请参考以下文章