+ -
当前位置:首页 → 问答吧 → 存储过程运行 oracl 就未响应 是不是要加锁? 怎么加啊求指导....

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

时间:2011-10-12

来源:互联网

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;

作者: jjyv70   发布时间: 2011-10-12

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>

作者: minitoy   发布时间: 2011-10-13

你上面只fetch了一次,然后成功,则%found一直为真,while变身长生不老

作者: minitoy   发布时间: 2011-10-13

SQL code
----死循环造成的。
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 /

作者: lzd_83   发布时间: 2011-10-13

是加一句exit when c_emp%notfound 就行了吗?
菜鸟。。 不太懂啊

作者: jjyv70   发布时间: 2011-10-13

热门下载

更多