WEB开发网
开发学院数据库Oracle Oracle中的子程序之一存储过程 阅读

Oracle中的子程序之一存储过程

 2009-03-12 13:10:57 来源:WEB开发网   
核心提示: 或者CALL getSalaryByEmpNo(7788);但是如果传给一个存储过程的参数是变量时,必须使用BEGIN END块,Oracle中的子程序之一存储过程(3),如下:DECLAREno emp.empNo%TYPE;BEGIN no:=7788; getSalaryByEmpN

或者

CALL getSalaryByEmpNo(7788);

但是如果传给一个存储过程的参数是变量时,必须使用BEGIN  END块,如下:

DECLARE
no emp.empNo%TYPE;
BEGIN
   no:=7788;
   getSalaryByEmpNo(no);
END;

如果某个包中含有常量,也可以通过如下的方式调用:

EXEC getSalaryByEmpNo(ConstantPackage.no);

但这种方式不能再使用CALL调用。

示例4:创建含有输入和输出参数的存储过程,该过程通过员工编号查找工资额,工资额以输出参数返回

 CREATE OR REPLACE PROCEDURE getSalaryByEmpNo(eNo IN NUMBER,salary OUT NUMBER)
 AS
 BEGIN
   SELECT SAL INTO salary  FROM EMP WHERE EMPNO=eNo;
 EXCEPTION
   WHEN NO_DATA_FOUND THEN
     DBMS_OUTPUT.PUT_LINE('没有找到该编号的员工');
 END;

当过程中含有输出参数时,调用时必须通过BEGIN  END块,不能通过EXEC或CALL调用。如:

DECLARE
salary NUMBER(7,2);
BEGIN
  getSalaryByEmpNo(7788,salary);
  DBMS_OUTPUT.PUT_LINE(salary);
END;

示例5:创建参数类型既是输入参数也是输出参数的过程

CREATE OR REPLACE PROCEDURE getSalaryByEmpNo(noSalary IN OUT NUMBER)
 AS
 BEGIN
   SELECT SAL INTO noSalary  FROM EMP WHERE EMPNO=noSalary;
 EXCEPTION
   WHEN NO_DATA_FOUND THEN
     DBMS_OUTPUT.PUT_LINE('没有找到该编号的员工');
 END;

上一页  1 2 3 4  下一页

Tags:Oracle 子程序 之一

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接