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

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

 2009-03-12 13:10:57 来源:WEB开发网   
核心提示: 调用如下:DECLAREno NUMBER(7,2);BEGIN no:=7788; getSalaryByEmpNo(no); DBMS_OUTPUT.PUT_LINE(no);END;示例6:创建带有默认值的过程CREATE OR REPLACE PROCEDURE addEmp( e

调用如下:

DECLARE
no NUMBER(7,2);
BEGIN
  no:=7788;
   getSalaryByEmpNo(no);
   DBMS_OUTPUT.PUT_LINE(no);
END;

示例6:创建带有默认值的过程

CREATE OR REPLACE PROCEDURE addEmp
(
  empNo NUMBER,
  eName VARCHAR2,
  job   VARCHAR2 :='CLERK',
  mgr   NUMBER,
  hiredate DATE  DEFAULT SYSDATE,
  sal  NUMBER    DEFAULT 1000,
  comm  NUMBER   DEFAULT 0,
  deptNo NUMBER  DEFAULT 30
)
AS
BEGIN
  INSERT INTO emp VALUES(empNo,eName,job,mgr,hiredate,sal,comm,deptNo);
END;

调用如下: EXEC addEmp(7776,'zhangsan','CODER',7788,'06-1月-2000',2000,0,10);  --没有使用默认值
EXEC addEmp(7777,'lisi','CODER',7788,'06-1月-2000',2000,NULL,10);  --可以使用NULL值
EXEC addEmp(7778,'wangwu',mgr=>7788);  --使用默认值
EXEC addEmp(mgr=>7788,empNo=>7779,eName=>'sunliu');  --更改参数顺序

示例7:使用NOCOPY编译提示

当参数是大型数据结构时,如集合、记录和对象实例,把它们的内容全部拷贝给形参会降低执行速度,消耗大量内存。为了防止这样的情况发生,我们可以使用 NOCOPY提示来让编译器按引用传递方式给IN OUT模式的参数。

DECLARE
TYPE DeptList IS TABLE OF VARCHAR2(10);
dList  DeptList:=DeptList('CORESUN','CORESUN','CORESUN','CORESUN');
PROCEDURE My_Proc(d IN OUT NOCOPY DeptList)
AS...

注意:NOCOPY只是一个提示,而不是指令。即使有时候我们使用了NOCOPY,但编译器有可能仍然会进行值拷贝。通常情况下NOCOPY是可以成功的。

二、维护过程

1、删除存储过程

    DROP PROCEDURE Proc_Name;

2、查看过程状态

    SELECT object_name,status  FROM USER_OBJECTS WHERE object_type='PROCEDURE';

3、重新编译过程

    ALTER PROCEDURE Proc_Name COMPILE;

4、查看过程代码

    SELECT * FROM USER_SOURCE WHERE TYPE='PROCEDURE';

上一页  1 2 3 4 

Tags:Oracle 子程序 之一

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