存储过程运行 oracl 就未响应 是不是要加锁? 怎么加啊求指导....

jjyv70 2011-10-12 10:57:20
create or replace procedure llx_21
v_bir date;
v_id employg.id%TYPE;
CURSOR c_emp
IS SELECT s_fun8(idcard),id
FROM employg;
BEGIN
OPEN c_emp;
FETCH c_emp INTO v_bir,v_id;
WHILE c_emp %FOUND LOOP
UPDATE employg
SET birthday = v_bir
WHERE id = v_id;
END LOOP;
CLOSE c_emp;
COMMIT;
END;

create function s_fun8(card varchar2) return
date is idate date;
begin
select to_Date(substr(card,7,8),'yyyy-mm-dd') into idate from dual;
return idate;
end;
...全文
103 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjyv70 2011-10-13
  • 打赏
  • 举报
回复
是加一句exit when c_emp%notfound 就行了吗?
菜鸟。。 不太懂啊
Rotel-刘志东 2011-10-13
  • 打赏
  • 举报
回复
----死循环造成的。
SQL> create or replace procedure prc as
2 cursor emp is
3 select level from dual connect by level <= 3;
4 v_id number;
5 begin
6 open emp;
7 loop
8 fetch emp
9 into v_id;
10 exit when emp%notfound;
11 dbms_output.put_line(v_id);
12 end loop;
13 end;
14 /
minitoy 2011-10-13
  • 打赏
  • 举报
回复
你上面只fetch了一次,然后成功,则%found一直为真,while变身长生不老
minitoy 2011-10-13
  • 打赏
  • 举报
回复
while死循环.
SQL> set serveroutput on
SQL>
SQL> create or replace procedure prc as
2 cursor emp is
3 select level from dual connect by level <= 3;
4 v_id number;
5 begin
6 open emp;
7 loop
8 fetch emp
9 into v_id;
10 exit when emp%notfound;
11 dbms_output.put_line(v_id);
12 end loop;
13 end;
14 /

Procedure created

SQL> exec prc;

1
2
3

PL/SQL procedure successfully completed

SQL>

17,383

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧