初步存储过程
一个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;