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)
随机推荐
- ASP.net ListItem Attributes 属性回传丢失的解决方案
该方法为网上整理 1. 新继承一个列表控件 新控件中重写两个方法: using System; using System.Collections.Generic; using System.Linq; ...
- python之路-模块 splinter
Splinter介绍 Splinter is an open source tool for testing web applications using Python. It lets you au ...
- 格而知之16:我所理解的Block(2)
11.那么Block到底是怎么实现的呢?试一试通过将Block 的代码转换成普通C语言代码来查看它的实现过程. 要将OC代码转换成C语言代码,可以使用clang编译的一个命令: 通过这个命令能把指定文 ...
- unity3d 建树篇
今天碰到有人问这个问题,然后我经过一番折腾,找到了方法.例如以下: 有学过Unity3d的同学生都知道我们在对地形拖拉树木等表层时,其树木在我们实例执行中,它们都是能够任其他物体穿过. 这是为什么.相 ...
- unity4.x for mac破解(含Unity全版本号破解)
声明,破解方式及工具,均来源于国外互联网.仅供交流学习使用! 国外一个大仙做的破解.这位大侠实在是牛,全版本号跟进,win和mac的破解包都有.win下有类似于注冊机的Patch,mac下有crack ...
- 在Java中编写带占位符的SQL语句
C#中SQL中带占位符的语句 假设有一张学员信息表Student,通过表中的ID来找学员,查询的SQL语句如下 string sql = string.Format("select * fr ...
- javascript 阻止事件冒泡和阻止默认事件对比
公司项目有像上图中效果的功能需求这也是很常见功能很简单功能,通过一个小例子和大家聊聊js的事件冒泡和默认事件. 先说说一般的实现方式即使用阻止事件冒泡的方式去做,给input绑定一个click事件(并 ...
- (原)caffe在ubuntu中设置GPU的ID号及使用多个GPU
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5884892.html 参考网址: http://caffe.berkeleyvision.org/tu ...
- mysql数据库的连接
public TJb checkjbByschool(long id)throws ClassNotFoundException,SQLException { Class.forName(" ...
- mysql创建存储过程
-- 创建CREATE PROCEDURE proDelAccountById(IN in_accountid int) BEGIN -- 执行sql预计 END -- 调用 ; CALL proDe ...