一、存储过程
1、创建语法
CREATE[OR REPLACE] PROCEDURE<过程名>
(
<参数1>,[方式1]<数据类型1>,
<参数2>,[方式2]<数据类型2>,
...)
IS|AS
PL/SQL过程体;
2、例1
声明
create or replace procedure demo(Name IN VARCHAR2) is
begin
if Name='M' then
dbms_output.put_line('是男的');
else
dbms_output.put_line('是女的');
end if;
end demo;
调用
begin
-- Call the procedure
demo('M');
end;
输出
是男的
3、删除过程
DROP PROCEDURE demo;
4、过程的参数有3种类型,分别如下:
1、in参数类型
这个是输入类型的参数,表示这个参数值输入给过程,供过程使用。
2、out参数类型
这是个输出类型的参数,表示这个参数在过程中被赋值,可以传给过程以外的部分或者环境。
3、in out参数类型
这种类型的参数其实是综合了上述两种参数类型,既向过程体传值,在过程体中也被赋值而传向过程体外。
二、函数
函数一般用于计算和返回一个值,可以将经常需要进行计算写成函数。函数的调用是表达式的一部分,而过程的调用是一条PL/语句。
函数与过程在创建的形式上有些相似,也是编译后放在内存中供用户使用,只不过调用时函数要用表达式,而不像过程只需要调用过程名。另外,函数必须有一个返回值,而过程则没有。
1、创建函数
CREATE[OR REPLACE] FUNCTION<>
(<参数1>,[方式 1]<数据类型 1>,<参数 2>,[方式 2]<数据类型 2>...)
RETURN<表达式>
IS|AS
PL/SQL程序体
2、例1
create or replace function getSexCount(sex in varchar2)
return number
is
Result number;
begin
if sex='M' then
select count(*) into Result from TEACHERS where SEX='M';
else
select count(*) into Result from TEACHERS where SEX='F';
end if;
return(Result);
end getSexCount;
调用
select getSex('n') from dual
3、删除函数
DROP FUNCTION getSexCount;