oracle数据库PL/SQL之过程和函数(转)1.基本概念:? ? ? ? oracle允许在数据库的内部创建并存储编译过的PL/S
oracle数据库PL/SQL之过程和函数(转)
1.基本概念:? ? ? ? oracle允许在数据库的内部创建并存储编译过的PL/SQL程序,该类程序包括过程、函数、包和触发器。我们可以将商业逻辑、企业规则等写成过程或函数保存到数据库中,通过名称进行调用,以便更好的共享和使用。? ? ? ? 过程中有三种类型的参数:
in/out/in ?out;2.创建存储过程1)语法CREATE [OR REPLACE] PROCEDURE<过程名>? ? ? ? (<参数1>,[方式1]<数据类型1>,? ? ? ? ?<参数2>,[方式2]<数据类型2>,? ? ? ? ...)IS/ASPL/SQL过程体;2)示例CREATE OR REPLACE PROCEDURE count_num? ? ? ? (in_sex in TEACHERS.SEX%TYPE)
AS? ? ? ? out_num NUMBER;
BEGIN? ? ? ? IF in_sex='M' THEN? ? ? ? ? ? ? ? SELECT count(SEX) INTO out_num? ? ? ? ? ? ? ? FROM TEACHERS? ? ? ? ? ? ? ? WHERE SEX='M';? ? ? ? ? ? ? ? dbms_output.put_line('NUMBER of Male Teachers:'||out_num);
? ? ? ? ELSE? ? ? ? ? ? ? ? SELECT count(SEX) INTO out_num? ? ? ? ? ? ? ? FROM TEACHERS? ? ? ? ? ? ? ? WHERE SEX='F';? ? ? ? ? ? ? ? dbms_output.put_line('NUMBER of Female Teachers:'||out_num);? ? ? ? END IF;
END count_num;3.调用过程
EXECUTE count_num('M');EXECUTE count_num('F');4.删除过程
DROP PROCEDURE count_num;?函数1.基本概念用于计算和返回一个值,调用时需要用表达式;2.创建函数CREATE [OR REPLACE] FUNCTION<函数名>? ? ? ? (<参数1>,[方式1]<数据类型1>,? ? ? ? ?<参数2>,[方式2]<数据类型2>,? ? ? ? ...)RETURN<表达式>IS/ASPL/SQL过程体; --
必须要有一个RETURN子句?CREATE OR REPLACE FUNCTION count_num? ? ? ? (in_sex in TEACHERS.SEX%TYPE)AS? ? ? ?
return NUMBER;BEGIN? ? ? ? IF in_sex='M' THEN? ? ? ? ? ? ? ? SELECT count(SEX) INTO out_num? ? ? ? ? ? ? ? FROM TEACHERS? ? ? ? ? ? ? ? WHERE SEX='M';? ? ? ? ELSE? ? ? ? ? ? ? ? SELECT count(SEX) INTO out_num? ? ? ? ? ? ? ? FROM TEACHERS? ? ? ? ? ? ? ? WHERE SEX='F';? ? ? ? END IF;? ? ? ? RETURN(out_num);
END count_num;?3.调用函数DECLARE? ? ? ? m_num NUMBER;? ? ? ? f_num NUMBER;BEGIN? ? ? ? m_num:=count_num('M');? ? ? ? f_num:=count_num('F');END;
或者:select count_num('M') ?from dual,select count_num('F') ?from dual
函数可以在查询中直接使用。4.删除函数DROP FUNCTION count_num;
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html