无返回值的存储过程
- SQL code
Create or Replace Procedure insertStu1(sid in char, sname in char, sex in char)asbegin--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)asbeginselect 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 onDECLARE sPrint varchar2(100);beginexec insertStu('10210405512','judy.D','female',sPrint);endselect 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;
加油,你的程序还有不少地方可以写的更好。
------解决方案--------------------
------解决方案--------------------