Oracle数据库之存储过程和函数的基本语法
存储过程(PROCEDURE)
存储过程,不仅可以简化客户端程序的开发和维护,还可以提高应用程序的运行性能。
--无参数的create or replace procedure proc_print
as
begin
dbms_output.put_line(这个是存储过程);
end;
--执行
exec proc_print;
就会看到如下信息
----------------------------------
anonymous block completed
这是个存储过程
--入参过程
create or replace procedure insert_emp(v_empno in NUMBER,v_ename in VARCHAR2,v_job in VARCHAR2,
v_mgr in NUMBER, v_hiredate in DATE,v_sal in NUMBER,
v_comm in NUMBER,v_deptno in NUMBER)
as
begin
insert into pub_emp values(v_empno,v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno);
dbms_output.put_line(成功录入);
exception
when dup_val_on_index then
raise_application_error(-9999,过程执行异常);
end;
--执行
exec insert_emp(7865,李四,clerk,8000,09-6月 -81,800,90,20);
---显示结果
------------------------------------
anonymous block completed
成功录入
---入参和出参存储过程
create or replace procedure v_emp(v_empno in NUMBER,n OUT VARCHAR2)
as
begin
select ename into n from pub_emp where empno = v_empno;
dbms_output.put_line(n);
end;
---调用
var n varchar2
exec v_emp(7521,:n);
------结果如下
anonymous block completed
WARD
创建多个存储过程后可以用一下语句查询下我们创建的存储过程
select * from user_procedures where object_type=PROCEDURE--(PROCEDURE)一定要大写,小写会报错
删除存储过程
drop procedure 过程名
函数(FUNCTION) ---无参函数 create or replace function fun_dtime return varchar2 is begin return to_char(sysdate,yyyy"年"mm"月"dd"日"); end; --执行 set serveroutput on; begin dbms_output.put_line(fun_dtime); end; create or replace function ret_emp_sal(v_ename varchar2) return number is v_sal number(7,2); begin select nvl(sal,0) into v_sal from pub_emp where lower(ename)=lower(v_ename); return v_sal;--必须要有返回值 end; var vsla number exec :vsla:=ret_emp_sal(WARD); print vsla --有参函数 create or replace function fun_info(v_empno number) return VARCHAR2 is v_ename pub_emp.ename%TYPE; begin select ename into v_ename from pub_emp where empno=v_empno; return v_ename; --必须要有返回值 end; declare v_empno number:=7876; v_ename pub_emp.ename%TYPE; begin :v_name=fun_info(v_empno); dbms_output.put_line(名称) end; var v_name varchar2 exec :v_name:=fun_info(7876); print v_name 通过上面的 例子我们可以总结下存储过程和函数的区别和相同点 存储过程(PROCEDURE)和函数(FUNCTION)的区别: 1.存储过程必须单独调用,函数可以在查询语句中直接调用 2.存储过程是通过参数返回的,有一个甚至多个,函数有且只有一个返回值 3.存储过程一般是用来完成特定的数据操作(如DDL语句等),函数一般情况下是用来计算并返回一个计算结果的。 4.对于无参函数的定义和调用都可以没有圆括号。但无参存储过程需要有 5.存储过程的标识符是procedure,函数的标识符是function 相同点: 1.都有in,out,in out三种参数,都可以使用缺省值。 2.可以使用名称表示法和位置表示法。 3.存储在数据库中,在代码块中调用。
