`
longgangbai
  • 浏览: 7331060 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle-SQL长度限制

阅读更多

          最近遇见一个ORA-01795: maximum number of expressions in a list is 1000 错误,才知道In-list有1000个元素的限制;可以使用array bind或者temporary table解决,而且还能绑定变量。[Limit and conversion very long IN list : WHERE x IN ( ,,, ...) ] 54ne.com

    再想到SQL的长度是否在SQLPLUS里面还有其他的限制? feedom.net

    Logical Database Limits

54ne.com

 

    SQL Statement Length
     Maximum length of statements
     64 K maximum; particular tools may impose lower limits

54com.cn

 

    9i的文档写的最大64K,其实不正确。

54com.cn

 

    在10g的文档中作了修改 Logical Database Limits

54ne.com

 

    The limit on how long a SQL statement can be depends on many factors, including database configuration, disk space, and memory

54ne.com

 

    仔细想想,我们数据库中 package 几十K有很多,当初都是用sqlplus执行创建的;sqlpplus对日常执行的SQL因该不会有长度限制。

中国网管联盟www_bitscn_com

 

    先测试一下使用DBMS_SQL执行很长的SQL语句。 网管网bitsCN.com

    SQL> declare
    2 l_stmt dbms_sql.varchar2s;
    l_cursor integer default dbms_sql.open_cursor;
    l_rows number default 0;
    3 4 5 l_length number := 0;
    6 begin
    7 l_stmt(1) := 'select 1 c1';
    8 for i in 2 .. 15000
    9 loop
    10 l_stmt(i) := ', 1 c' || i;
    11 end loop;
    12 l_stmt(15000) := 'from dual';
    13 for i in l_stmt.first .. l_stmt.last
    14 loop
    15 l_length := l_length + length(l_stmt(i));
    16 end loop;
    17 dbms_output.put_line( 'length = ' || l_length );
    18 dbms_sql.parse( c => l_cursor,
    19 statement => l_stmt,
    20 lb => l_stmt.first,
    21 ub => l_stmt.last,

中国网管联盟www、bitsCN、com


    22 lfflg => TRUE,
    23 language_flag => dbms_sql.native );
    25 l_rows := dbms_sql.execute(l_cursor);
    26 dbms_sql.close_cursor( l_cursor );
    27 end;
    28 /
    length = 138898

54ne.com

 

    PL/SQL procedure successfully completed.

54com.cn

 

    通过dbms_sql.varchar2s数组,可以执行很长的SQL。 网管联盟www.bitsCN.com

    再将如上pl/sql产生的SQL使用dbms_output输出longSQL.sql. feedom.net

    SQL> host ls -l longSQL.sql
    -rw-r--r-- 1 oracle dba 1215082 Dec 4 05:19 longSQL.sql

中国网管联盟www_bitscn_com

 

    SQL> host head longSQL.sql
    select 1 c1
    , 1 c2
    ...........................

54com.cn

 

    SQL> host tail longSQL.sql
    ................
    , 1 c14999
    , 1 c15000
    from dual; 中国网管论坛bbs.bitsCN.com

    这个1M的SQL在sqlplus里完全可以执行。看来,oracle完全支持很长的SQL语句;但该sql会占用很多share pool空间,因此不提倡经常执行。

54ne.com

 

    SQL> select sql_text, SHARABLE_MEM,PERSISTENT_MEM,RUNTIME_MEM from v$sql where sql_text like '%, 1 c2%'; 中国网管联盟www_bitscn_com

    SQL_TEXT
    --------------------------------------------------------------------------
    SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM
    ------------ -------------- -----------
    select 1 c1 , 1 c2 , 1 c3 , 1 c4 , 1 c5 , 1 c6 , 1 c7 , 1 c8 , 1 c9 , 1 c10 , 1
    c11 , 1 c12 , 1 c13 , 1 c14 , 1 c15 , 1 c16 , 1 c17 , 1 c18 , 1 c19 , 1 , 1 .............................................................................................
 

分享到:
评论
1 楼 canvi 2010-07-28  
你写一个类似这样的sql:
select * from a  where a.id in (1,2,........999) or a.id in (1000,1001......1999)  ....... or a.id in (50000..........50999)  
把里面的....填充完后,这个sql太长了,根本无法执行,所以sql的长度还是有限制的。

相关推荐

    ORACLE与SQLSERVER语法差异分析

    - SQL SERVER中的`TOP`语句用于限制返回的行数,而ORACLE使用`ROWNUM`配合`WHERE`子句来实现类似功能。 - ORACLE支持PL/SQL,而SQL SERVER有T-SQL,它们是各自的存储过程和触发器的编程语言。 理解这些语法差异...

    activity-oracle建表SQL

    4. **字段长度限制**:在`VARCHAR2`类型中,我们指定了字段的最大长度,如`VARCHAR2(100)`表示该字段最多能存储100个字符。 5. **日期和时间处理**:Oracle支持多种日期和时间格式,使用`DATE`类型可以同时存储日期...

    PL-SQL教程(私塾在线)视频配套学习资料

    - **定义**:PL-SQL(Procedural Language for SQL)是一种过程化的SQL语言,由Oracle公司开发,用于扩展标准SQL的功能,使之具备更强大的编程能力。 - **特点**: - 结合了SQL的数据操作能力和传统过程化编程语言...

    oracle与sql_server数据类型对应关系.doc

    2. **DATE数据类型限制**:SQL Server的datetime类型与Oracle的DATE类型在日期范围上有所不同,Oracle的DATE类型支持范围从公元前4712年到公元4712年,因此,在复制过程中,需确保SQL Server的datetime值在此范围内...

    Oracle 数据表修改字段长度

    Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。

    Oracle数据库培训-SQL基础篇.pptx

    Oracle数据库培训-SQL基础篇主要涵盖了SQL语言的基础概念和常用操作。SQL,即结构化查询语言,是用于管理和处理关系数据库的标准语言。以下是对主要内容的详细解释: 1. **基本的SELECT语句**:SELECT语句是SQL中最...

    Oracle Sql基础 Oracle Sql基础 Oracle Sql基础

    ### Oracle SQL 基础知识点概述 #### 一、Oracle SQL ...- 在创建表时需要遵守Oracle数据库的命名规则,如不能使用保留字、长度限制等。 **8.4 CREATE 创建表的语法** - 使用CREATE TABLE 表名 (列1 数据类型, 列2...

    oracle和sql数据类型

    总结来说,Oracle 和 SQL Server 数据类型在很多方面有相似之处,如字符串、数字、日期/时间、二进制数据类型,但在细节上有所差异,如长度限制、Unicode 支持和特定用途的类型(如 Oracle 的 Bfile 和 SQL Server ...

    Oracle数据库表名支持的最大长度是多少

    这个长度也是Oracle标识符的最大长度,为30个字符。 小编今天在建一个Oracle数据库表时,提示如下表名长度超过了最大值了。错误如下: 代码如下: 错误报告: SQL 错误: ORA-00972: 标识符过长 00972. 00000 – ...

    oracle常用SQL语句(汇总版).docx

    在修改字段值时,需要注意字段的长度限制和非空校验。 二、数据定义语句(DDL) 数据定义语句用于定义数据库中的对象,包括表、索引、视图、同义词、过程、函数、数据库链接等。 1. CREATE 语句 CREATE 语句用于...

    Oracle-data-type.rar_oracle

    Oracle数据库还支持PL/SQL复合类型,如记录(Record)和表类型(Table),以及集合类型,如关联数组(Associative Array)。这些类型使得在数据库中进行复杂的逻辑操作变得更加灵活和高效。 在实际应用中,选择正确...

    Oracle 与 SQL Server在SQL使用差异.pdf

    例如,SQL Server和Oracle对于数据库名、列名、索引名、表名和视图名的长度限制不同,SQL Server的限制通常较大。此外,两者对单个索引中的最大列数、字符类型的最大大小、varchar类型的限制、表中最大列数、行的...

    oracle sql and pl/sql

    根据提供的文件信息,我们可以推断出本书主要关注的是Oracle SQL 和 PL/SQL 的掌握与应用。下面将基于这些信息来生成相关的知识点。 ### Oracle SQL 和 PL/SQL 知识点 #### 一、Oracle SQL 概述 1. **定义**:...

    ORACLE中BLOB字段导入到SQL SERVER中的IMAGE字段

    7. **错误处理和调试**:在迁移过程中可能会遇到各种问题,如数据格式不匹配、超出字段长度限制等。对错误进行记录和调试,调整数据处理流程以解决这些问题。 8. **完整性检查**:最后,进行完整性检查,包括主键、...

    SQL SERVER 数据库迁移到ORACLE配置 SQL SERVER 数据库转到ORACLE配置.doc

    - 表名长度限制为30个字符,若超过此长度,需要先修改表名再进行迁移。 - 使用SQL SERVER的DTS(Data Transformation Services)导出工具,但需要注意的是,表名会自带双引号,可能需要手动处理。 - 对于大量表的...

    第3章 PL-SQL数据类型

    在Oracle数据库中,PL-SQL(Procedure Language for SQL)提供了丰富的数据类型来满足不同的业务需求。这些数据类型可以分为四大类:标量类型、复合类型、引用类型以及LOB类型。 1. **标量类型**:这类数据类型没有...

    ORACLE常用的SQL命令

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的SQL语法用于数据操作、定义和管理。本文将详细介绍Oracle中常用的SQL命令,特别关注数据控制语句(DML)和数据定义语句(DDL)。 1. 数据控制语句 ...

    SQL-查询和-SQL-函数PPT课件.ppt

    SQL,全称Structured Query Language,是一种用于管理和处理...综上所述,本PPT课件全面介绍了Oracle数据库的基础概念、SQL语言的关键元素以及如何使用SQL进行数据操作,对于理解和掌握Oracle数据库及SQL编程至关重要。

    SqlServer和Oracle的不同的一些体会

    - **Sql Server**:相比之下,Sql Server对于这些名称的长度限制更为宽松。 #### 三、Top语法的支持差异 - **Sql Server**:支持`TOP`语法,例如`SELECT TOP 10 * FROM table`。 - **Oracle**:不支持`TOP`语法,...

Global site tag (gtag.js) - Google Analytics