日期:2014-05-20  浏览次数:20709 次

在线等:::关于存储过程的编译错误
现在有dept这个表,有三列分别是:deptno,dname,loc
我想根据传进去的no查询一条记录,存储过程如下:
create or replace procedure pro_select
(
no in number,
name out varchar2,
loc out varchar2
)
as
begin
select dname,loc into name,loc from dept where deptno=no;
end dept;
为什吗不会出现“创建的过程带有编译错误”,错就错吧,可还能创建?

------解决方案--------------------
SQL code

create or replace procedure pro_select
(
v_no in number,
v_name out varchar2,
v_loc out varchar2
)
as
  cursor1 sys_refcursor;
  sqlstr varchar(100);
begin
     sqlstr := 'select dname,loc from dept where deptno=' || v_no;
     open cursor1 for sqlstr;
     loop
          fetch cursor1 into v_name,v_loc;
         if cursor1%notfound then
             exit;
         end if;
     end loop;
end pro_select;

------解决方案--------------------
探讨
参数前面最好用v_开头,像no和name是关键字,会报错的。
貌似存储过程里面,不用直接写sql语句的,要用游标。