初步存储过程

初始存储过程

一个procedure是执行一种行为的子程序类型。
一个procedure既可以作为一个方案对象单独存储,也可以作为一个包中的一个成员。
procedure语法:
CREATE [OR REPLACE] PROCEDURE
procedure_name
 [(parameter[,parameter]...)]
IS | AS
 [local declarations]
BEGIN
  executable statements
 [EXCEPTION
    exception handlers]
END [procedure_name];

参数模式:
in parameter
out parameter
in out parameter

 

几个存储过程示例:
--存储过程示例所必须的表
create table MASA_MK.DEPT
(
  P_NO   VARCHAR2(10),
  P_NAME VARCHAR2(10),
  P_LOC  NUMBER(10)
)
--仅包含输入参数
CREATE OR REPLACE PROCEDURE add_dept
 (p_no1 IN dept.p_no%TYPE,
  p_name1 IN dept.p_name%TYPE DEFAULT 'unknown',
  p_loc1 IN dept.p_loc%TYPE DEFAULT 'unknown')
IS
BEGIN
 INSERT INTO dept
 VALUES(p_no1,p_name1,p_loc1);
 COMMIT;
END;

--包含输入输出参数
CREATE OR REPLACE PROCEDURE query_dept
  (eno IN dept.p_no%TYPE,
  p_sal OUT dept.p_name%TYPE)
IS
BEGIN
 select p_no INTO p_sal  from dept where p_no = eno;
END query_dept;

--一个参数,既是输入参数又是输出参数
CREATE OR REPLACE PROCEDURE format_phone
  (p_phone_no IN OUT VARCHAR2)
IS
BEGIN
  p_phone_no := '(' || SUBSTR(p_phone_no,1,3) ||
    ')' || SUBSTR(p_phone_no,4,3) ||
    '-' || SUBSTR(p_phone_no,7);
END format_phone;

 

Out参数可以是一个未初始化得变量
SQL> variable aa varchar2
SQL> exec query_dept('1',:aa);
执行后,out参数被分配成一个实际的值
PL/SQL procedure successfully completed
aa
---------
1

删除Procedures
drop procedure procedure_name;