当前位置:首页 » 编程语言 » oraclesql太长
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oraclesql太长

发布时间: 2023-05-28 11:23:07

1. oracle sql 错误: ORA-12899:始终提示字段太大

数据导入时报ORA-12899错误原因是:由于Oracle字符集不同,汉字占的长度不同造成的。

字符集的意思是插入的数据长度超出字段的设置长度,实际长度并不长。

原因:

中文在ZHS16GBK中占2个字节,在UTF-8中却占3个字节,所以汉字导入UTF-8字符集的数据库就很容易出现字段长度不够。

解决办法:

一个是增加字段长度,还有就是修改字符集。

特别说明:

如果系统中已经存在很多数据,建议修改字段长度,因为修改字符集后原来数据库表中的汉字全部变成乱码。如果一定要修改字符集,必须先导出数据,待到字符集修改后再重新导入这些数据。

具体查看方法:

查看字符集的方法可以用PL/SQL DEVELOP ---->Reports---->DBA---->NLS Database Parameters,结果如下图:

(1)oraclesql太长扩展阅读:

Oracle的解决之道 :在税务部门信息化大集中的规划之下,建立完整的信息化架构,以网格作为统一的基础平台;然后在网格基础平台的基础之上,进行数据孝巧集中;最后从数据集中再到应用集中,实现以优化管理为目的,更好地进行业务处理与信息的接通等服务。

整合现有的各种平台、系统和数据,建立哪中一个信息数据总局、省局两级处理的统一的技术平台,需要解决以下的问题:数据的采集、数据的存储和管理、数据的质量控制、数据的灵活展现。

以网格技术构建的基础平台,能够提高硬件的利用率和资源共享,能够使公司可以通过增加成本组件来向外扩张,还可以减少管巧缓键理需求等。所以,通过网格基础平台,就可以满足数据的采集、存储、管理、展现和控制等需求。

参考资料:中关村-国家税务系统与Oracle的解决之道

2. “oracle 10g”中怎样执行很长的sql语句呢

lv_sql clob;--很长长很长的字符串 4G ,记住太长不能后在plsql不能打印,不能to_char,只要执---行就可以了,想要看结果可以写入一个表字段位clob,再select查看。

X number; --声明变量

BEGIN

x:=1; --给初值

FOR X IN REVERSE 1..10000 LOOP --reverse由大到小

lv_sql :=lv_sql || 'insert into testtable (aa) values(''111'')'|| ';';

END LOOP;

execute immediate lv_sql;

END;

---可以拼接可以很长很长,希望能帮到大家,然后点个赞,让更多的人知道

3. 请教关于oracle数据库的sql语句太长的问题

用子查询代替in()裏面的数据
比如吧101,102.。。。放到一个表裏面去
select *from table where id in(select Id from 新建的表)
这样也容易维护!!要是增加10*的时候就在新建的表裏面加入就可以了!!

4. 关于ORACLE中,动态SQL过长,调试时候不方便输出的解决方案求助~!

create or replace procere (条件用到的变量 in varchar2,cursorname out ref cursor)
as
ref cursor cur1(条件用到的变量) is select * from table where 条件
定义你的变量
begin
open cur1(条件用到的变量);
end;
然后再调用这个过程.如果不用动态条件的话,直接用cursor类型。

5. Oracle执行插入SQL,执行报字符过长错误

1. select userenv('language') from al; 查询的是当前会话的字符集,不一定是数据库的字符集
2. 数据库字符集用:select * from v$nls_parameters 来查询
3. 可以如果都一样的话,检查两个数据库中,字段长度是否一致。

6. 如何调整oracle中的sql语句输入的最大长度

Oracle SQL 语句in长度不得超过1000
IN 子句中的LIST个数最长为1000,超过该数目将报错,这里可转用一个临时表来解决;CREATE TRIGGER语句文本的字符长度不能超过32KB(触发器中不能使用LONG, LONG RAW 类型;触发器内可以参照LOB 类型列的列值,但不能通过 :NEW 修改LOB列中的数据;)顺便说一下,触发器中的PARENT关键字,只在嵌套表触发器中有效,11G以前,DBMS_SQL对输入的SQL长度不能超过32K,原因是输入参数只能是VARCHAR2类型,11G后,可以用CLOB作为输入参数,则取消了这个限制一个PL/SQL的包、过程、函数、触发器的大小,在UNIX上最大是64K,而WINDOWS则是32K大小(32K这个应该不准,看下面的测试)SQL语句可以有多长?(网友说)ORACLE文档说是64K,实际受一些工具的限制会较这个值低,但网友测试发现可以很长,甚至超过1M(我测试过 170K的都没问题)。具体多长,10G也未说明,只是与很多环境有关:数据库配置,磁盘空间,内存多少。。。
PL/SQL中,表达式/SQL本身的长度是可以达到比较长的长度(50K)左右,如:v_str:=:new.f1||:ndw.f2。。。 ; select :new.f1||:new.f2。。。 into v_str from al; 另外发现,如果这样写:v_str := ‘a’||’b’||。。。则允许的表达式长度将大大的减少。如果表达式/SQL过长,超过了一个ORACLE包/过程允许的最大程序长度,则在编译时报 pls-123:program too large错误,这是pl/sql编译器本身的限制造成的,即表达式/SQL的长度在PL/SQL中受限于包/过程的最大大小=================================================Oracle Sql语句长度限制问题及解决
最近在写Sql语句时,碰到两个问题:
1)ORA-01795: maximum number of expressions in a list is 1000起因:写出了这样的sql语句:SELECT PALLET_ID,BOX_ID,STATUS FROM SD_CURRENT_BOX WHERE PALLET_ID IN('"+pallets+"');其中的pallets是有很多个pallet_id组合成的字符串。
分析:很显然,根据错误提示可以知道:in 中items的限制 1000个。
解决:用子查询来代替pallets长字串。
2)ORA-01704: string literal too long
起因:写出了这样的Sql语句:UPDATE PDM_MEMBERLIST SET MEMBERS='<Project> ... 此处略去n多串 <ProjectID>'.
分析:数据库设计MEMBERS字段为xmltype格式,数据存储时候,是以字符串的形式存储。这样在xml数据量大的时候,造成sql语句过长,尝过2k的限制。
解决:参数化sql语句。
==================================================参数化sql语句----防止sql注入攻击(下)
上一篇写的sql注入的基本原理,本来要接着写这篇的,但是由于时间的原因一直没有写成,今天是五一假期,总算是能抽空写写了。
作为一个程序员,防范sql注入的第一线是由我们来守护的,只要我们在程序中留少许的漏洞,就会给程序增强安全特性。所以我们要做的是要写安全的程序,防止sql注入在程序体现在不要拼接sql字符串,一定要参数化sql或者写存储过程,这里就说说简单的参数化sql吧。
例子中用c#和Oracle实现,Java中或者其他数据库中的实现也是类似的。
using System.Data.OracleClient;//引入oracle操作包//定义DML语句
string strSQL = @"select user.name from user where user.name =:userName";//上句中的:userName就是sql语句中参数的占位符,也就是说在数据库服务器中执行这条sql语句的时候这个占位符要被其他东西替换掉,到底用什么东西替换呢,接着往下看OracleParameter[] param = {
new OracleParameter(":userName",txtName);}//这里定义一个参数的数组,里面可以写入多个sql参数,咱们的这里只有一个,所以就写入一个参数,这里讲占位符和他的替换也就是参数值对应起来了,txtName就是占位符的替换值,他是用户界面中用户输入的值,就是他可能含有注入攻击的字符,这下数据库服务器知道用什么东西替换占位符了。
定义好sql语句和参数后就是执行了,执行的时候需要同时将sql语句和参数传入,这样用户输入的带有非法字符的字符串在数据库会当作参数处理,而不会当作sql语句和数据库自己的字符混乱,防止了注入攻击。
OracleCommandcmd = new OracleCommand();
cmd.CommandText= strSQL;//定义oracle命令的文本内容for(oracleParameter p in param)//将参数传入{
cmd.Parameters.Add(p);
}
cmd.ExecuteNonQuery();//执行命令
上面基本上是一个完整的参数化sql,不同的数据库服务器sql语句中参数的占位符不同,上面用的是oracle,参数占位符是冒号(:)加名字,在sqlserver中是用@符号加名字作为占位符,而在MySQL中用问号(?)加名字来作为参数占位符,不同的数据库中参数的表示符号不一样,这个需要注意。
防止sql注入攻击(上)
Sql注入是一种入门极低破坏极大的攻击方式。如果sql是用字符串拼接出来的话,那么肯定会被注入攻击,前段时间还传出了某国外大型社交网站被SQL注入攻击。
Sql注入攻击的方式,来这里看的同志们应该很清楚了,就是在拼接字符串的时候,如果输入的是带单引号的,那么输入laf'or 1='1'--这样就会逃避条件检查,后面要是再跟一些shutdown,delete之类的条件,那么损失基本算是毁灭性的了。前几天单位开发的过程中我发现几乎大家都不重视安全,一个写代码的人不注意安全只注意实现那么写出来的代码在攻击者眼前基本就是一个没有穿衣服的美女。
下面是我一个开发人员的一些经验,主要用来防止sql注入。
1、首先对运行sql的用户赋予最小权限,这个理论也是安全领域的最小特权理论,运行一个程序一定要用最小特权运行,所以不要给用户服务DBA的权限,限制要权限之后可以防止一些毁灭性的攻击,即使攻入了也不会shutdown修改表之类的。
2、一定不要使用字符串拼接的方式构造sql,必须使用参数化sql,存储过程可以看作是参数sql,简单的就直接构造参数化sql,复杂的就写存储过程,不过存储过程中一定不要用字符串,我看有人在存储过程用字符串,这样还是不能避免被攻击,并且在调试的时候非常麻烦。
3、严把输入关,系统肯定是用来交互的,所有用户输入的这一关一定要把好,可以利用各种方式来检验用户的输入,让输入都是合法的;可以设敏感字符不让用户输入,这个虽然不是很友好,不过对与安全有保证。在验证的是可以用正则表达式或者程序验证,不管用什么方式只要把敏感字符和可疑字符拒之门外那么就无法攻击了,不过限制输入还是有缺陷,在安全理论方面,只能确定合法,不能确定不合法,比如你在界面限制了合法的,那么剩余的都是不合法的,这时候输入的肯定全部是合法的,如果你限制的是非法的,可是你能确保你限制的全是非法的?如果某一天发现一个非法的不再你限制之内那么你就会被攻击。
4、做好自己的检验和测试工作,自己可以进行sql注入攻击,利用工具检验。
5、一定要养成具有安全意识的程序员,时刻想着安全。
这几条之中最重要的是1和2,权限限制一定要注意,不然会死的很惨的,第二就是程序员的习惯了,一定要用参数化sql和数据库交互。

7. oracle sql语句太长无法执行

'一篇很长的文章' 这里面指搏迹的内容很瞎银伍多吗??? 你可以将字段改成 大字段类型 CLOB 用磨或存储过程来做

8. oracle 导出超长Clob字段insert语句执行报字段过长的问题解决方案

对于长度小于4000的字符串直接执行insert语句正常,但对于超过4000的就不能直蔽陵接执行了,会报字符串长度过长的错。

通过一阵网络,我认可网上的这个说法:隐式转换,oracle默认把含野字符串转换成varchar2类型,而这个字符串的长度,又比4000大,所以会报ora-01704错误。说得通俗一点,就是两个单引号之间的字符不能超过4000。

解谈并喊决方案,对于过长的sql定义一个Clob变量,然后在sql中直接引用这个变量即可:

注意的是:如果只执行单条语句,最后的 "/" 符号 可以不加,如果后面还有DECLARE语句,"/"符号必须要加上。

使用这种方式,亲测通过,祝好运!

9. 关于ORACLE中,动态SQL过长,调试时候不方便输出的解决方案求助~!

create
or
replace
procere
(条件用到的变量核慧
in
varchar2,cursorname
out
ref
cursor)
as
ref
cursor
cur1(条件用到的变量)
is
select
*
from
table
where
条档弯件
定义你的变量
begin
open
cur1(条件用到的变量);
end;
然后再调行氏闷用这个
过程
.如果不用
动态
条件的话,直接用cursor
类型