您的位置:首页 > 数据库 > Oracle

Oracle数据库之存储过程和函数的基本语法

2017-11-09 09:04 756 查看
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.存储在数据库中,在代码块中调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: