数据库里面有一个smst_test_access表,里面有列id,值类型是number ,现在我想更改这个列的值,我手工的把第一个列的值改成了数字1,然后想的是第二行的id是2,以后自动加一,不知道为什么,执行下面的存储过程就是不成功。
create or replace procedure cursor_test as t_id number;
t_idtemp number;
cursor new_cur is
select id from smst_test_access;begin
open new_cur;
fetch new_cur
into t_id;
while new_cur%found loop
if t_id = 1 then
update smst_test_access set smst_test_access.id = 1;
t_idtemp:=t_idtemp+1;
else
update smst_test_access set smst_test_access.id = t_idtemp;
t_idtemp:=t_idtemp+1;
end if;
end loop;
commit;
close new_cur;
end;
create or replace procedure cursor_test as t_id number;
t_idtemp number;
cursor new_cur is
select id from smst_test_access;begin
open new_cur;
fetch new_cur
into t_id;
while new_cur%found loop
if t_id = 1 then
update smst_test_access set smst_test_access.id = 1;
t_idtemp:=t_idtemp+1;
else
update smst_test_access set smst_test_access.id = t_idtemp;
t_idtemp:=t_idtemp+1;
end if;
end loop;
commit;
close new_cur;
end;
解决方案 »
- 这个SQl语句有点难写,不会写~~呵呵,选择问题
- restore database using backup controlfile until cancel
- 高分求一条oracleSql语句,高手进
- 请问怎么可以修改orecle9的端口?
- 求助:怎樣更新兩個關聯表中的一個?分不是問題!
- 导入远程数据库中的数据
- 提取库中数据生成数据文件(*.dat),请大家来探讨探讨呢?
- 求教关于找汇报上级的逻辑,如果上级职位没有人在职,就显示空而不是不显示
- SQL 已查询到号码段起与号码段止,如何生成号码起与号码止所有的号码
- sql语句怎么写
- C#.net连接oracle8i出现乱码
- 触发器问题。没有数据?
这个一UPDATE你的表中的ID全部变成1了 循环也没有什么用每次更新都更新成t_idtemp这个值 加个WHERE条件限制或者直接用一个UPDATE语句就搞顶了update update smst_test_access set smst_test_access.id =rownum;
这样也不用写循环 也不用PL/SQL了 直接一个SQL就搞定的
SELECT id FROM smst_test_access FOR UPDATE OF id;
r1 c1%ROWTYPE;
t_id NUMBER(10, 0);BEGIN
t_id := 0;
FOR r1 IN c1 LOOP
UPDATE smst_test_access SET id = t_id WHERE CURRENT OF c1;
t_id:=t_id+1;
END LOOP;
END;