begin
for idx in (select *
from (select t1.custom_no,
t1.addr,
t1.pk_port,
t2.b,
t2.c,
t2.e
from aempk t1
left join ttt t2
on t1.addr = t2.c) t3
where t3.c is not null) loop
execute immediate 'update aempk set pk_port=''' || idx.e ||
''' where custom_no=''' || idx.custom_no ||
''' and addr=''' || idx.addr || '''';
end loop;
end;
解决方案 »
- linux磁盘共享
- 一个复杂的select语句求详细讲解 在线等
- 2个至强1.6gCUP 4G内存的专用ORACLE数据库服务器,SGA和其他参数怎么分配(或优化)?
- 安装了两个客户端,在C#程序中怎么选择某一个来连接数据库?
- 初学单表查询的问题
- 更新数据时报错,请大家帮忙看下,谢谢
- 关于存储过程中case语句的使用
- 请教一个简单SQL语句,在线等待……急!急1急!……
- 请教:在程序过程中下面的语句表示什么意思SET TRANSACTION USE ROLLBACK SEGMENT BOSS_DSJ
- 各位大神,小弟新手,有语句有错,帮忙看看
- TNS 连接超时
- orcale 执行imp命令时出现 IMP-00058: 遇到 ORACLE 错误 1017
用游标慢死你
用merge into 吧
然后我们再针对你的过程来说明一下,你程序的问题吧
先说程序结构应该这样:
declare
声明游标 corsor c_vvvv;
begin
for v_vvv in c_vvvv
loop
执行过程
end loop;
end;
1,你要把程序写的更容易读一些,不然别人看你的代码很累。
2,然后你的程序中尽量不要写select *,这样对于写过程来说会引发灾难性问题
3,动态SQL不是你这样写的, execute immediate ‘’中间不能有拼接的变量出现
如果想要用变量,应该这样写
execute immediate update aempk set pk_port=:1 where custom_no= :2 and addr=:3'
using idx.e,idx.custom_no,idx.addr ;
execute immediate ‘update aempk set pk_port=:1 where custom_no= :2 and addr=:3'
using idx.e,idx.custom_no,idx.addr ;
3,动态SQL不是你这样写的, execute immediate ‘’中间不能有拼接的变量出现
如果想要用变量,应该这样写
execute immediate update aempk set pk_port=:1 where custom_no= :2 and addr=:3'
using idx.e,idx.custom_no,idx.addr ;这种的我没用过,1,2,3直接对应下面的using引用的变量吗?