Oracle学习笔记(2)——过程和函数
过程和函数统称为PL/SQL子程序,通过输入、输出参数或输入/输出参数与其调用者交换信息。他们是被命名的PL/SQL块,被编译后存储在数据库中,以备执行。因此,可以在数据库中直接按名称使用它们。
1、创建过程
[ ]里的部分是可选的
CREATE [OR REPLACE] PROCEDURE procedure_name
(arg1 [ { IN | OUT | IN OUT }] type1 [DEFAULT value1],
[arg2 [ { IN | OUT | IN OUT }] type2 [DEFAULT value2]],
......
[argn [ { IN | OUT | IN OUT }] typen [DEFAULT valuen]]) IS | AS
<类型.变量的声明部分>
[name VARCHAR2 (30);]
BEGIN
<执行部分> EXCEPTION
异常处理部分 END [procedure_name];
注:可以向存储过程传递参数,也可以向存储过程传回参数。IN,OUT,IN OUT是形参的模式。若省略,则为IN模式。IN模式的形参只能将实参传递给形参,进入函数内部,但只能读不能写,函数返回时实参的值不变。OUT模式的形参会忽略调用时的实参值(或说该形参的初始值总是NULL),但在函数内部可以被读或写,函数返回时形参的值会赋予给实参。IN OUT具有前两种模式的特性,即调用时,实参的值总是传递给形参,结束时,形参的值传递给实参。调用时,对于IN模式的实参可以是常量或变量,但对于OUT和IN OUT模式的实参必须是变量。
2、调用过程
exec procedure_name;
call procedure_name;
注:这两种方法都可以使用,但是exec为sqlplus命令,只能在sqlplus中使用,call为sql命令,没有限制。
例子:
CREATE OR REPLACE PROCEDURE jc_student_up_class (xh IN VARCHAR2,msg OUT VARCHAR2)
AS
c_bjid VARCHAR2 (100);
BEGIN
msg :='';
--取 该学生 所属专业的 第一个 有名额的班级 且 有床位(性别)
select classlist_id into c_bjid from (
select a.*, decode(b.rs,null,0,b.rs) rs from gy_classlist a
left join ( select CLASSID,count(1) rs from yx_student group by CLASSID ) b on a.classlist_id = b.CLASSID
where rxnf = extract(year from sysdate)
and a.majorsetid = ( select zyid from yx_student where xh = c_xh )
--判断 该班级 改性别 还有床位
and exists (....) )
where rsxz >rs and rownum =1 ; -- 判断 若存在班级 则插入
if not c_bjid is null then update yx_student set CLASSID =
(select classlist_id from gy_classlist where classlist_id = c_bjid ) where xh = c_xh;
commit;
end if; EXCEPTION
when NO_DATA_FOUND THEN msg :='-1'; END jc_student_up_class;
以上是定义的一个给学生分配班级的存储过程,以xh(学号)为输入参数,msg为返回参数,如果执行成功则返回"0",否则返回"-1"。
3、删除过程
DROP PROCEDURE procudure_name;
4、函数
CREATE [OR REPLACE] FUNCTION function_name
......
--后面与过程相同
使用过程与函数的区别:
1、过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值。
2、可以SQL语句内部(如表达式)调用函数来完成复杂的计算问题,但不能调用过程。
Oracle学习笔记(2)——过程和函数的更多相关文章
- 吴裕雄--天生自然ORACLE数据库学习笔记:过程、函数、触发器和包
create procedure pro_insertDept is begin ,'市场拓展部','JILIN'); --插入数据记录 commit; --提交数据 dbms_output.put_ ...
- Oracle学习笔记六 SQL常用函数
函数的分类 Oracle 提供一系列用于执行特定操作的函数 SQL 函数带有一个或多个参数并返回一个值 以下是SQL函数的分类:
- Oracle学习笔记(6)——函数
函数的作用 方便数据的统计 处理查询结果 函数的分类 Oracle内置的系统函数 数值函数 四舍五入 ROUND ...
- oracle学习笔记(六)——函数&存储过程的异同
我看的书上除了能看出来函数有返回值,存储过程没有,其他啥也看不出来... 网上大大的总结
- Oracle学习笔记之四sp1,Oracle 11g的常用函数
从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i) 分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
随机推荐
- Linux Security模块
一.Linux Security Modules Linux Security Modules (LSM) 是一种 Linux 内核子系统,旨在将内核以模块形式集成到各种安全模块中.在 2001 年的 ...
- Linux自动登陆的设置方法
前些天为了实现Linux自动登陆的方法,在网上查了很多资料,发现有不少方法,但网上有些方法的讲解不是特别清楚,或者已经过时.因此,特意整理了一下Linux自动登陆的设置方法.本文的测试环境为Cento ...
- SQL:deferrable initially deferred
SQL> create table cust(id number,name varchar2(10));Table created SQL> alter table cust add co ...
- RMAN-使用catalog恢复目录进行备份与恢复
RMAN ArchitectureThe RMAN architecture, shown in Figure 7-3, includes a target database, repository, ...
- .net批量删除和添加
往页面上拖一个GridView,设置好数据源,并为GridView添加一个模板列,往模板列里添加一个chekcbox,比如下面的代码 <asp:GridView ID="GridVie ...
- SpringMvc学习-增删改查
本节主要介绍SpringMVC简单的增删改查功能. 1.查询 dao中的代码 public List<WeatherPojo> getAllWeather(){ String sql=&q ...
- CDMA电信短信猫支持189等电信号码可二次开发
CDMA电信短信猫支持189等电信号码可二次开发 这款短信猫采用法国wavecom Q2358C模块,支持短信猫二次开发,可提供短信猫二次开发包下载测试.提供相关资料文档. 此款CDMA电信短信猫有串 ...
- 0115——cocoapod的使用
iOS 最新版 CocoaPods 的安装流程 1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sourc ...
- K - Ignatius and the Princess IV
Description "OK, you are not too bad, em... But you can never pass the next test." ...
- ORACLE11G常用函数
1 单值函数 1.1 日期函数 1.1.1 Round [舍入到最接近的日期](day:舍入到最接近的星期日) select sysdate S1, round(sysdate) S2 , round ...