日期:2014-05-17  浏览次数:20836 次

oracle存储过程(急)
无返回值的存储过程
SQL code

Create or Replace Procedure insertStu1
(sid in char, sname in char, sex in char)
as
begin
--select sid into stuid from dual;
insert into students(sutid,stuname,stusex) values(sid,sname,sex);
end insertStu1;




有返回值的存储过程
SQL code

Create or Replace Procedure insertStu
(sid in char, sname in char, sex in char,stuid out char)
as
begin
select sid into stuid from dual;
insert into students(sutid,stuname,stusex) values(sid,sname,sex);
end insertStu;



问题如下:
SQL code

exec insertStu1('10210405513','judy.K','female');--执行无返回值的没有错误


--执行有返回值的出错

set serveroutput on
DECLARE sPrint varchar2(100);
begin
exec insertStu('10210405512','judy.D','female',sPrint);
end
select sPrint from dual;

--错误如下:
exec insertStu('10210405512','judy.D','female',sPrint);
     *

第 3 行出现错误: 
ORA-06550: 第 3 行, 第 6 列: 
PLS-00103: 出现符号 "INSERTSTU"在需要下列之一时: := . ( @ % ; 
符号 ":=" 被替换为 "INSERTSTU" 后继续。 ORA-06550: 
第 5 行, 第 1 列: 
PLS-00103: 出现符号 "SELECT"在需要下列之一时: ; <an 
identifier> 
<a double-quoted delimited-identifier> 









------解决方案--------------------
begin
exec insertStu('10210405512','judy.D','female',sPrint);
end


这里面不用写 “exec”这个了,另外,你的变量 sPrint 是定义在你的pl/sql块中的,在sql plus中是不存在的,所在直接打印是不可以的,正确做法应该是:

var sPrint varchar2(100);

begin
insertStu('10210405512','judy.D','female',sPrint);
end;

print sPrint;

加油,你的程序还有不少地方可以写的更好。
------解决方案--------------------
探讨
majy  兄弟  怎么没有反应 啊

SQL code
SQL>set serveroutputon
SQL>var sPrintvarchar2(100);
SQL>begin
2 insertStu('10210405514','Judy.K','female',sPrint3end;45print sPrint;

按回车 他就不停的换行啊 没有反应啊 这是么的个情况啊

在浏览器上 怎么来执行它啊 谢谢你

------解决方案--------------------
探讨

set serveroutput on
DECLARE sPrint varchar2(100);
begin
exec insertStu('10210405512','judy.D','female',sPrint);
end
select sPrint from dual;

第 3 行出现错误:
ORA-06550: 第 3 行, 第 6 列:
PLS-00103: 出现符号 "INSERTSTU"在需要下列之一时: := . ( @ % ;
符号 ":=" 被替换为 "INSERTSTU" 后继续。 ORA-06550:
第 5 行, 第 1 列:
PLS-00103: 出现符号 "SELECT"在需要下列之一时: ; <an
identifier>
<a double-quoted delimited-identifier>