关于oracle in 的1000条限制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oracle in 的1000条限制相关的知识,希望对你有一定的参考价值。

最近做一个查询报表,查询条件是从excel文档中导出读取的,但是文档中的数据超过1000条就报错,后来在网上查询说将可以将数据放到临时表中,但是批量添加到临时表不是又要用到in么..求问这个问题如何解决..

答:Oracle中插入1000条数据和10000条数据效率并没有什麼区别,它们都遵循的同一规则插入。几个提高Oracle插入数据效率的方法:删除Index,插入数据後重新建Index在nologging的模式下插入parallel方式并行插入追问

我需要从excel文档中的数据导入到临时表中.怎么批量添加进去呢.excel中的数据,读取保存在一个变量中.

参考技术A

不会啊,6500条都没报错,你1000的怎么会,是不是其他地方不对

追问

因为我的语句中,in后面跟的是值,而不是一个select语句...in里面的数据是从excel文档中读取出来的

追答

那你先把excel中in的值放到一个表里的某一列里面,在用SQL语句替换不就行了

追问

我想把in里面的值放到一个临时表中,但是怎么把这些值批量添加到临时表中呢(我知道用in可以批量添加进去,但in又有限制............)

追答

你的in的值是行X X X X X 还是
列X
X
X
数据应该是在EXCEL中吧。
如果是列的话,用PL/SQL中的ODBC导入器,导一列就行了;行的话换成列的形式在导入

追问

但是不能借用第三方软件呀导入啊..需求是,在网站里面上传excel文档,点击查询,将数据显示出来. 当点击查询按钮时,读取上传的excel文档中数据,并将数据作为条件在数据库查询将结果显示出来...

追答

看你最后的那条回复,你点击查询以后,数据应该已经录入到数据库里面了,为什么还不能直接调用中一列,放入子查询中?

追问

excel中的数据只是条件数据(可以理解为一个产品的ID吧),需要根据这些条件从数据库取数据,但是由于in的1000限制,所以想把这ID放到临时表中..从excel文档中读取的数据是保存在一个变量中.像这样 '1,2,3,4,5,6,7..',但这样的数据,怎么添加到数据库中呢...

关于在子表中创建限制性记录。 (Oracle 表单生成器)

【中文标题】关于在子表中创建限制性记录。 (Oracle 表单生成器)【英文标题】:About restrictive record creation in a child table. (Oracle Forms Builder) 【发布时间】:2012-11-30 18:43:05 【问题描述】:

我创建了一个向子表添加记录的表单。但是我不希望人们能够编辑辅助键,只能从父主键列表中选择它或类似的东西。我怎么能这样做?

表格:

CREATE TABLE CHAMPIONS (CNAME VARCHAR2(15) NOT NULL, PRICELEVEL NUMBER(1) NOT NULL, ROLE VARCHAR2(10) NOT NULL, HPLEVEL NUMBER(2) NOT NULL, ATKLEVEL NUMBER(2) NOT NULL, MAGICLEVEL NUMBER(2) NOT NULL, DIFFLEVEL NUMBER(2) NOT NULL); 

CREATE TABLE SKINS (SNAME VARCHAR2(20) NOT NULL, CNAME VARCHAR2(15) NOT NULL, PRICELEVEL NUMBER(1) NOT NULL); 

ALTER TABLE Champions ADD CONSTRAINT pk_Champions PRIMARY KEY (CNAME);

ALTER TABLE Skins ADD CONSTRAINT fk_Skins FOREIGN KEY (CNAME) REFERENCES champions(CNAME);

【问题讨论】:

【参考方案1】:

信息太少,无法给出答案,但我可以试一试。

您可以在明细表中创建LOVs,并将LOV 从父表的主键中删除,也可以将要链接的文本项与您需要放置WHEN-VALIDATE-ITEM 的LOV使用与LOVs RECORD GROUP 中相同的查询触发,这样如果用户键入而不是使用LOV,您可以验证输入,然后在输入无效时提醒他们并获取正确的主主键如果输入的值正确。

下面是带有 LOV 按钮的数据块的样子-

下面是数据块中STORE项的触发器-

考虑到查询中的主表,您可以对 RG 进行与触发器中的查询类似的编码。

【讨论】:

我会尽可能地检查这个,但我可以为您提供您需要的所有信息。用更多信息更新了问题。如果您需要更多,请告诉我。【参考方案2】:

获得此功能的最简单方法是基于 Champions.cname 创建一个 LOV,并将其附加到项目表单列 skins.cname(如果您不熟悉创建 LOV:s,请参阅表单帮助)。然后将项目 skins.cname 的项目属性 'Validate from list' 设置为 Yes。这将根据现有的 cname 值验证所有输入的值。

【讨论】:

以上是关于关于oracle in 的1000条限制的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的in参数的个数限制

ora 01795 in 1000 limit

如何将超过 1000 个值放入 Oracle IN 子句 [重复]

sql文中。in(...) oracle对()内的参数 有没有个数的限制?

oracle select in超过1000条报错解决方法

oracle sql查询中用in列表中最大表达式数大于1000的处理