Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)
PL/SQL子程序 它包含了函数和过程。此功能是指用户定义的函数。和系统功能是不同的。子程序通常完成特定的功能PL/SQL座。,能够被不同的应用程序多次调用。Oracle提供能够把PL/SQL程序存储在数据库中,并能够再不论什么地方来执行它。
这样就叫做存储过程或者是函数。
过程和函数的唯一差别就是函数总是向调用者返回数据。而过程则不返回数据。
函数
假设用户要常常运行某些操作,而且须要返回特定的数据。那么就能够将这些操作构造成一个函数。
能够使用SQL语句定义函数。
基本的语法:
create or replace function fun_name(argument [in | out | in out ]datatype ...)
return datatype
is | as
-- 须要定义的变量 。记录类型 。 游标
begin
--函数的运行体
exception
--处理出现的异常
end ;
当中,return datatype , 是要返回数据的类型。IN參数标记表示传递给函数的值在函数运行中不改变;OUT标记表示一个值在函数进行计算并通过该參数传递给调用语句;IN OUT 标记表示传递给函数的值能够变化并传递给调用语句。
例:定义一个返回hello 的函数
create or replace function hello
return varchar2
is
begin
return 'Hello World';
end ;
运行 ,Function created ,函数创建成功。
函数的调用。与Oracle内置函数的调用同样,能够使用select hello from dual ;进行调用,也能够使用PL/SQL语句进行调用 :
begin
dbms_output.put_line(hello);
end ;
例:创建带參数的helloworld函数
create or replace function helloworld(str varchar2)
return varchar2
is
begin
return 'Hello' || '_' ||str ;
end ;
函数的调用要在函数名称后面加上參数,即:select helloworld('World') from dual ;使用Pl/sql的调用除了加上參数外与上面同样,不在赘述。
例:求一个部门中,员工的工资总数的函数
create or replace function get_sal(dept number)
return number
is
v_sum number(10) := 0 ;
cursor sal_cursor is select sal from emp where deptno = dept ;
begin
for c in sal_cursor loop
v_sum := v_sum + c.sal ;
end loop ;
return v_sum ;
end ;
存储过程
存储过程,能够被多个应用程序调用。也能够向存储过程传递參数。向存储过程传回參数。
基本的语法
create or replace procedure pro_name(argument [in | out | in out ]datatype ...)
is | as
-- 须要定义的变量 ,记录类型 , 游标
begin
--函数的运行体
exception
--处理出现的异常
end ;
例:使用存储过程。求部门的工资总和
create or replace procedure get_sal1(dept number ,sumsal out number)
is
cursor sal_cursor is select sal from emp where deptno = dept ;
begin
sumsal := 0 ;
for c in sal_cursor loop
sumsal := sumsal + c.sal ;
end loop ;
dbms_output.put_line(sumsal);
end ;
存储过程的调用:
declare
v_sum number(10) := 0 ;
begin
get_sal1(30 , v_sum);
end ;
调用格式:
能够使用show error 命令来提示源代码的错误位置。CALL | EXCEUTE procedure_name(arg_list) ;
使用user_error 数据字典来查看各存储过程的错误位置。
删除过程和函数
删除过程
语法例如以下:
DROP PROCEDURE[USER.]procedure_name ;
删除函数
语法例如以下:
DROP FUNCTION [USER.]function_name ;
版权声明:本文博主原创文章。博客,未经同意不得转载。
相关文章
- JAVA执行带SYS_REFCURSOR游标的oracle存储过程返回结果集 会话级临时表
- Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习
- Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询
- Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop
- Oracle数据库:oracle事务处理语言TCL,commit,rollback,savepoint语句
- Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
- Oracle数据库:oracle多表查询,等值连接,非等值连接,自连接的sql语句和规则
- Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数
- Oracle内核技术揭密. 2.2 AWR概览
- mybatis+Oracle 批量插入数据,有数据做更新操作
- oracle定时器执行一遍就不执行或本就不执行
- Oracle RAC 连接
- ORACLE数据库DBMS_JOB的创建与使用
- Mybatis调用Oracle存储过程,Oracle创建存储过程,Mybatis调用procedure
- 转 导出 schema_详解Oracle数据库终止正在进行expdp导出数据的正确操作
- 转 mysql oracle 指定rand随机数范围
- Oracle SQL 性能优化技巧
- 【12.2新特性】在Oracle Active Data Guard上部署列式存储
- Oracle数据库迁移之物理迁移
- Oracle数据库分页的存储过程
- ORACLE小工具:存储过程清空所有表或使所有触发器失效
- Oracle创建自增字段方法-ORACLE SEQUENCE的简介
- 怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优
- 怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优
- 深入了解oracle存储过程的优缺点
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- Oracle 数据库和Sql Server数据库的区别
- Mybatis+Oracle搭配insert空值报错之myBatis+mysql驱动+oracle驱动的源码分析
- Oracle 未能加载文件或程序集Oracle.DataAccess
- Oracle-存储过程与函数