我在ORACLE中写了2个存储过程,其中一个存储过程要调用另外一个存储过程,我的写法如下,但报错,请各位高手给个指点:CREATE OR REPLACE PROCEDURE SP_SYS_STUDENT_COURSE(
Result OUT int,
StudentNo IN VARCHAR2,
ClassNo IN VARCHAR2,
YearNo IN VARCHAR2,--学年
TermNo IN INT--学期
)
AS
StudentId LONG;
ClassId LONG;
BEGIN
SELECT ID INTO StudentId FROM STUDENTS WHERE STUDENT_NO= StudentNo;
SELECT ID INTO ClassId FROM TERM_CLASS WHERE CLASS_NO=ClassNo;
Result:=EXECUTE(SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo));
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT trans;
Result:=-20083;
END SP_SYS_STUDENT_COURSE;
Result OUT int,
StudentNo IN VARCHAR2,
ClassNo IN VARCHAR2,
YearNo IN VARCHAR2,--学年
TermNo IN INT--学期
)
AS
StudentId LONG;
ClassId LONG;
BEGIN
SELECT ID INTO StudentId FROM STUDENTS WHERE STUDENT_NO= StudentNo;
SELECT ID INTO ClassId FROM TERM_CLASS WHERE CLASS_NO=ClassNo;
Result:=EXECUTE(SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo));
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT trans;
Result:=-20083;
END SP_SYS_STUDENT_COURSE;
改成Result:=SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo);
语句改为下面的试试:SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo);
Result:=你要的输出;并且 :你的变量也有问题啊。
StudentNo IN VARCHAR2,
ClassNo IN VARCHAR2,
YearNo IN VARCHAR2,--学年
TermNo IN INT--学期没有输出变量那里可以得到结果?
注:xx和pp是过程,aa,bb是父过程的输入参数,也是子过程的输入参数;cc是父过程的输出参数,也是子过程的输出参数。CREATE OR REPLACE
procedure xx(aa in number,bb in number,cc out number)is
begin
pp(aa,bb,cc);
end;
如果没有 怎么返回?
过程中调用 过程 过程名 ( 参数=>参数值 );
后面就是接收过程out值
CREATE OR REPLACE PROCEDURE SP_SYS_STUDENT_COURSE(
Result OUT int,
StudentNo IN VARCHAR2,
ClassNo IN VARCHAR2,
YearNo IN VARCHAR2,--学年
TermNo IN INT--学期
)
AS
StudentId LONG;
ClassId LONG;
v_result number;
BEGIN
SELECT ID INTO StudentId FROM STUDENTS WHERE STUDENT_NO= StudentNo;
SELECT ID INTO ClassId FROM TERM_CLASS WHERE CLASS_NO=ClassNo;
--再定义一个out 变量v_result
SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo,v_result);
Result:=v_result;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT trans;
Result:=-20083;
END SP_SYS_STUDENT_COURSE;
Result:=EXECUTE(SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo));
SP_STUDENT_SELECT_COURSE(StudentId,ClassId,YearNo,TermNo)
3楼的回复不对哦,报错:Compilation errors for PROCEDURE NJXE.SP_SYS_STUDENT_COURSEError: PLS-00222: 在此范围中不存在名为 'SP_STUDENT_SELECT_COURSE' 的函数这句很明显就是把SP_STUDENT_SELECT_COURSE当作函数去编译的,所以才出错,