如果数据量不是很大的话,循环完以后再commit.
解决方案 »
- 帮忙看一个Oracle语句错在哪里(新手问题)
- 分组求和SQL
- orcale8.0.5clinet如何编译pro*c的文件(在线等候)
- 二表复制问题
- 一天一夜没睡觉了,急死了!!!ORACLE数据库中有两个表不能插入数据,查询的时候需要几个小时,怎么办?经过检测,表也没有被锁!
- 直接通过SQL语句能否select出的结果集保存成文件
- update语句错在哪里
- 关于数据库导入导出的问题
- 紧急求救:数据库物理恢复出错,请各位大侠赐教!!!在线等待........
- 为何在pl/sql中写这段话总是出错,而用sql语句就可以?
- linux下处理proc程序遇到的问题,请教大虾!
- 紧急求助:Long RAW字段如何复制??
commit会把资源都释放掉,游标也没有了。
应该在循环外commit
我不是很明白生成一条记录就commit和所有的记录都生成了再commit有什么区别!
还有,我刚才发现了一个问题,
有个变量:avar varchar(3);
v_sql varhcar2(200);
1
begin
v_sql:='insert into A values('123','d','dd','||avar||')';
execute immediate v_sql;
end;
2 begin
insert into A values('123','d','dd',avar);
end;
如果avar的值是010,020,030,040,050这种形式的话,
2 的结果是正确的
1 的结果却是错误的,把前面的0去掉了;
非常奇怪,不知道为什么?
问题二:这里涉及到一个隐式转换的问题,比方说'3'和'012'的比较,oracle认为
这是char型字符比较会认为'3'>'012'
v_sql:='insert into A values('123','d','dd',:a)';
DBMS_SQL.PARSE(V_cursor, V_Sql, DBMS_SQL.V7);
DBMS_SQL.Bind_Variable(V_cursor,':a', avar);