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.存储在数据库中,在代码块中调用。
存储过程(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.存储在数据库中,在代码块中调用。
相关文章推荐
- mysql存储过程基本语法和函数
- oracle 最简单的学习笔记,增删改查,PLSQL基本语法,游标,函数,存储过程的实现
- mysql存储过程基本语法和函数
- 存储过程基本语法与常用函数
- oracle 存储过程的基本语法 及注意事项
- oracle 存储过程的基本语法 及注意事项
- oracle 存储过程的基本语法及注意事项
- SqlServer的存储过程基本语法
- SQLSERVER存储过程基本语法
- oracle 存储过程的基本语法 及注意事项
- Oracle存储过程基本语法
- oracle 存储过程的基本语法
- Oracle存储过程基本语法
- mysql存储过程基本函数
- oracle数据库的存储过程PROCEDURE与函数FUNCTION示例
- Oracle存储过程基本语法
- Sql存储过程基本语法
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法 及注意事项
- oracle 存储过程的基本语法