--过程(PROCEDURE)--------------------------------------------------// --创建表 CREATE TABLE user_info ( id VARCHAR2(4), name VARCHAR2(15), pwd VARCHAR2(15), address VARCHAR2(30) ); --插入数据 INSERT INTO user_info VALUES('u001','zhao','zhao','shanghai'); --如要经常执行插入,Oracle每次都要进行编译,并判断语法正确性,因此执行速度可想而知, --所以我们要创建一个过程来实现 CREATE OR REPLACE PROCEDURE AddNewUser ( n_id user_info.id%TYPE, n_name user_info.name%TYPE, n_pwd user_info.pwd%TYPE, n_address user_info.address%TYPE ) AS BEGIN --向表中插入数据 INSERT INTO user_info(id,name,pwd,address) VALUES(n_id,n_name,n_pwd,n_address); END AddNewUser; / --下面我们利用PL/SQL匿名块调用该过程 DECLARE --描述新用户的变量 v_id user_info.id%TYPE := 'u002'; v_name user_info.name%TYPE := 'wish'; v_pwd user_info.pwd%TYPE := 'history'; v_add user_info.address%TYPE := 'shanghai'; BEGIN --调用过程,添加wish用户到数据库 AddNewUser(v_id,v_name,v_pwd,v_add); DBMS_OUTPUT.PUT_LINE('用户 ' || v_name || ' 已经成功插入'); END; / --或者可以利用EXEC()直接插入 EXEC AddNewUser('u003','jian','jian','beijing'); --或 EXECUTE AddNewUser('u004','zhang','zhang','beijing'); --在这种上下文中,调用过程中的变量就类似于(C、VB)中的实参,而过程里的变量就是形参 --形参的模式(IN、OUT、IN OUT),默认为IN --IN :只读属性,即不能修改 --Out :读写属性,即可读可写 --In Out :顾名思义,他是 IN 和 OUT 的集合 --下面通过一个示例来理解 CREATE OR REPLACE PROCEDURE ModeSimple ( p_InParameter IN NUMBER, p_OutParameter OUT NUMBER, p_InOutParameter IN OUT NUMBER ) IS v_LocalVariable NUMBER := 0; BEGIN DBMS_OUTPUT.PUT_LINE('过程前:'); IF (p_InParameter IS NULL) THEN DBMS_OUTPUT.PUT_LINE('p_InParameter is NULL'); ELSE DBMS_OUTPUT.PUT_LINE('p_InParameter = ' || p_InParameter); END IF; IF (p_OutParameter IS NULL) THEN DBMS_OUTPUT.PUT_LINE('p_OutParameter is NULL'); ELSE DBMS_OUTPUT.PUT_LINE('p_OutParameter = ' || p_OutParameter); END IF; IF (p_InOutParameter IS NULL) THEN DBMS_OUTPUT.PUT_LINE('p_InOutParameter is NULL'); ELSE DBMS_OUTPUT.PUT_LINE('p_InOutParameter = ' || p_InOutParameter); END IF; --赋值 v_LocalVariable := p_InParameter; --合法 v_LocalVariable := p_OutParameter; --合法,注:必须Oracle 9i或以上版本 v_LocalVariable := p_InOutParameter; --合法 --!p_Inparameter := 7; --非法,因为 IN 参数不能被修改 p_OutParameter := 7; --合法 p_InOutParameter := 8; --合法 DBMS_OUTPUT.PUT_LINE('过程末:'); IF (p_InParameter IS NULL) THEN DBMS_OUTPUT.PUT_LINE('p_InParameter is NULL'); ELSE DBMS_OUTPUT.PUT_LINE('p_InParameter = ' || p_InParameter); END IF; IF (p_OutParameter IS NULL) THEN DBMS_OUTPUT.PUT_LINE('p_OutParameter is NULL'); ELSE DBMS_OUTPUT.PUT_LINE('p_OutParameter = ' || p_OutParameter); END IF; IF (p_InOutParameter IS NULL) THEN DBMS_OUTPUT.PUT_LINE('p_InOutParameter is NULL'); ELSE DBMS_OUTPUT.PUT_LINE('p_InOutParameter = ' || p_InOutParameter); END IF; END ModeSimple; / --利用PL/SQL匿名块调用过程来查看结果 DECLARE v_in NUMBER := 1; v_out NUMBER := 2; v_inout NUMBER := 3; BEGIN DBMS_OUTPUT.PUT_LINE('在调用过程前:'); DBMS_OUTPUT.PUT_LINE('v_In = ' || v_in); DBMS_OUTPUT.PUT_LINE('v_Out = ' || v_out); DBMS_OUTPUT.PUT_LINE('v_InOut = ' || v_inout); --调用过程 ModeSimple ModeSimple(v_in,v_out,v_inout); DBMS_OUTPUT.PUT_LINE('在调用过程后:'); DBMS_OUTPUT.PUT_LINE('v_In = ' || v_in); DBMS_OUTPUT.PUT_LINE('v_Out = ' || v_out); DBMS_OUTPUT.PUT_LINE('v_InOut = ' || v_inout); END; / --与过程相关的数据字典(这里的条件必须大写) SELECT object_name,object_type,status FROM user_objects WHERE object_name = 'MODESIMPLE'; --函数(Function)---------------------------------------------------// --函数与过程结构上相似,不同的是函数有一条RETURN语句,用来返回值 --例如我们要查询用户zhao是否在user_info中存在 CREATE OR REPLACE FUNCTION CheckUser ( f_user user_info.name%TYPE ) RETURN BOOLEAN --函数返回类型 IS v_userCount NUMBER; BEGIN SELECT COUNT(name) INTO v_userCount FROM user_info WHERE name = f_user; IF (v_userCount > 0) THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END CheckUser; / --下面我们可以这样调用该函数 DECLARE user user_info.name%TYPE := 'jian'; a BOOLEAN; BEGIN IF CheckUser(user) THEN DBMS_OUTPUT.PUT_LINE('用户 ' || user || ' 存在'); ELSE DBMS_OUTPUT.PUT_LINE('用户 ' || user || ' 不存在'); END IF; END; /* 过程与函数的差别 函数与过程有很多相似的地方,但也有一些差别,其中的一点就是,过程的参数可以有三种模式(IN、OUT、 IN OUT),而函数只有一种(IN),因为使用函数的目的是传入0或多个参数,返回单一的值,想让函数返回多 个值是一种不良的编程习惯,我们应该加以改正。

oracle 过程与函数区别,ORACLE 函数与过程的差别相关推荐

  1. oracle客户端和ssh区别,oracle 使用SSH 转发功能

    主要转发过程 通过客户端的 1555 端口 转发到服务器的 1521端口上具体步骤 1.在客户端上执行 [oracle@normal admin]$ ssh -CNfg -L 1555:192.168 ...

  2. oracle各版本的区别,Oracle版本的区别有那些

    Oracle版本的区别有那些 http://database.51cto.com/art/201004/196494.htm http://database.51cto.com 2010-04-23 ...

  3. oracle sql server的区别,oracle与sqlserver的十大区别

    http://blog.csdn.net/it_fengli/article/details/8213839 --sql server 与 oracle的区别: --DBMS 数据库管理系统 --1. ...

  4. oracle 批量插入 mysql 区别,Oracle 和 mysql 的批量操作Sql语句 的区别

    正确的oracle批量新增的sql是: 方法 1: insert into ATTRACTIONS ( ID, NAME, LONGITUDE, LATITUDE,  UPDATE_TIME ) (s ...

  5. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

  6. Python type函数和isinstance函数区别 - Python零基础入门教程

    目录 一.Python type 函数简介 二.Python isinstance 函数简介 三.Python type 函数和 isinstance 函数区别 四.猜你喜欢 零基础 Python 学 ...

  7. 函数表达式与命名函数区别

    函数表达式: 1.把一个函数赋值给一个变量,叫做函数表达式 2.var 变量名 = 匿名函数; 3.函数表达式中,匿名函数后一定要有";"分号 4.变量名+()括号 即调用了函数 ...

  8. perl chop和chomp函数区别

    没有使用chomp: #!/bin/perl print  "Please input an string and a number by order!n";   $the_str ...

  9. math ceil函数python_Python ceil函数

    Python ceil函数 最后更新于:2020-03-29 09:57:36 python ceil 内置函数和 int 函数有点类似,计算的结果都是得到一个整数,向上取整: 一.ceil函数简介 ...

  10. Oracle 存储过程定义和优点及与函数区别

    定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是 ...

最新文章

  1. 在5分钟内将Spring Boot作为Windows服务启动
  2. 大学数学不好是一种什么体验?
  3. sql之stuff函数学习笔记
  4. 转:使用java生成数字验证码
  5. 缓解焦虑,经营自己,如何管理自己的人生(12节课)
  6. 学习笔记0525----NFS文件共享和FTP服务器
  7. 浅析游戏音效制作后期的创新
  8. Go语言学习系列 -- 大道至简—GO语言最佳实践​​​​​​​
  9. 茅台酒如何转卖?价格如何才最合理?爬取公众号后每天自动发送价格到钉钉如何呢?
  10. 电脑Tab键有什么功能?分享Tab键的6个妙用
  11. Linux- 网络配置
  12. 示例 在 ABAP 中使用自己的 RSA 实现 RSA Encryption in ABAP
  13. Linux凝思系统修改网卡,常见问题凝思操作系统常见问题及处理方法
  14. 【程序设计与算法(三)第7周测验(2019秋季)】005:山寨版istream_iterator
  15. 桑基图(sankey)
  16. [当人工智能遇上安全] 2.清华张超老师 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
  17. [C++]完美立方(枚举)
  18. LabVIEW 心电图诊断系统
  19. 30款精美的矢量花纹素材
  20. 从“看得清”到“看得懂”:视域提升带来的管理“魔法”

热门文章

  1. win7域用户生成临时文件夹
  2. apache-cxf测试webservice添加header信息
  3. poj 3074(DLX)
  4. 文本相似度计算--余弦定理和广义Jaccard系数
  5. 没学过JavaScript也能看懂的闭包解释
  6. ubuntu 安装及相关软件安装(1)
  7. EmbossMaskFilter BlurMaskFilter 学习
  8. 03.Web大前端时代之:HTML5+CSS3入门系列~H5功能元素
  9. Aliyun上Linux服务器挂载数据盘及速度测试
  10. 虚方法和重写方法的继承特性