create or replace procedure li
(
myename varchar2(50),
myloc out dept.loc%type ,
mydname out scott.dept.dname%type
)
as
begin
select loc,dname into myloc,mydname
from scott.emp,scott.dept
where emp.empno=dept.deptno and emp.ename=dept.dname;
end;
上面这个oracle过程是错的。
为什么把myname的类型改为scott.emp.ename%TYPE就对啦 。
(
myename varchar2(50),
myloc out dept.loc%type ,
mydname out scott.dept.dname%type
)
as
begin
select loc,dname into myloc,mydname
from scott.emp,scott.dept
where emp.empno=dept.deptno and emp.ename=dept.dname;
end;
上面这个oracle过程是错的。
为什么把myname的类型改为scott.emp.ename%TYPE就对啦 。
匹配,可能最初你的dname字段类型和mydname类型不匹配造成的,
当你改为scott.emp.ename%type,就把变量mydname设定成了emp表里ename字段类型,这样当然匹配了。
create or replace procedure li
(
myename varchar2,
myloc out dept.loc%type ,
mydname out scott.dept.dname%type
)
as
begin
select loc,dname into myloc,mydname
from scott.emp,scott.dept
where emp.empno=dept.deptno and emp.ename=dept.dname;
end;
--存储过程里面调用的参数不能设置其长度,也可以如你说的改成这样scott.emp.ename%TYPE,只是取其字段参数类型。
(
myename varchar2,
myloc out dept.loc%type ,
mydname out scott.dept.dname%type
)
as
begin
select loc,dname into myloc,mydname
from scott.emp,scott.dept
where emp.empno=dept.deptno and emp.ename=dept.dname;
end;