子程序——存储过程

我们可以使用子程序来封装一下我们需要的操作,子程序又有存储过程,函数和触发器。

这里先学习存储过程~

语法

create [or replace] procedure $procedure_name$ [(参数列表)]
is/as --相当于declare
begin
[exception]--异常处理
end $procedure_name$; 删除过程:drop procedure $procedure_name$

创建存储过程

创建无参数存储过程

create or replace procedure hello
is
begin
dbms_output.put_line('hello world');
end hello;
/ --执行

创建带参存储过程

参数有三种模式,参数类型定义不用定义宽度

模式 说明
in(默认) 模式的参数, 可以是字面量或变量形式传值
out 模式的参数, 必须以变量形式传递,变量不应该赋值,接收过程中返回的结果
in out 模式的参数, 必须以变量形式传递
--输出指定字符串(使用in)
create or replace procedure print(text in varchar2)
is
begin
dbms_output.put_line(text);
end print;
/ --计算结果,返回给调用者(使用out)
create or replace procedure sum(num1 in int,num2 in int,result out int)
is
begin
result := num1 +num2;
end sum;
/ declare
--变量不应该赋值
v_result int := 5;
begin
sum(5,6,v_result);
--上面的语句还可以这样写,这样便于直观的知道参数对应哪一个
--sum(num1 =>5,num2=>6,result=>v_result);
dbms_output.put_line(v_result);
end;
/ --交换两个数字(使用in out)
create or replace procedure swap(a in out int,b in out int)
is
v_temp int ;
begin
v_temp := a;
a := b;
b := v_temp;
end swap;
/ declare
a int :=5;
b int := 9;
begin
swap(a,b);
dbms_output.put_line(a||','||b);
end;
/

执行

PL/SQL执行

begin
--包名.过程名
--未定义包名,不需要写包名
$procedure_name$;
end;
/
--如果想要其他用户访问当前用户的存储过程,当前用户下,授权给其他用户权限
grant execute on $procedure_name$ to $user_name$;

命令行执行

exec/execute $procedure_name$[(参数)]

oracle学习笔记(十九) 子程序——存储过程的更多相关文章

  1. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  2. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

  3. (C/C++学习笔记) 十九. 模板

    十九. 模板 ● 模板的基本概念 模板(template) 函数模板:可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计. 语法: template <<模 ...

  4. Oracle学习笔记(十二)

    十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...

  5. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  6. Oracle学习笔记十四 内置程序包

    扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...

  7. Java基础学习笔记十九 IO

    File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再 ...

  8. Java基础学习笔记十九 File

    IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...

  9. JSTL 标签库 使用(web基础学习笔记十九)

    标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库  JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2 ...

  10. Oracle学习笔记(十)

    光标(游标)概念引入 就是一个结果集(查询或者其他操作返回的结果是多个时使用)定义一个光标 cursor c1 is select ename from emp: 从光标中取值 打开光标: --ope ...

随机推荐

  1. a minimum of subsistence

    A hundred years ago it was assumed and scientifically "proved" by economists that the laws ...

  2. 使用Castle DynamicProxy (AOP)

    在本文中,我将引导您了解.NET环境中的面向方面编程(AOP)概念,以及如何使用Castle DynamicProxy创建和附加方面.在我们开始之前,让我快速介绍AOP和  IoC.如果您已经熟悉这些 ...

  3. js里面的键盘事件对应的码值

    键盘事件对应的码值keyCode 8 = BackSpace BackSpacekeyCode 9 = Tab TabkeyCode 12 = ClearkeyCode 13 = EnterkeyCo ...

  4. npm报错及解决

    nodejs安装之后 无法使用 npm的解决方法 首先我们要知道Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node.js 使用了一个事件驱动.非阻塞式 I ...

  5. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(2)- RT1052DVL6性能实测(CoreMark)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的性能. 在前面的文章 i.MXRTyyyy微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2 ...

  6. pecl安装和卸载示例

    比如安装MongoDB扩展 命令行下输入: [#] /usr/local/php/bin/pecl install mongodb ......嗒吧嗒吧一大堆输出后 Build process com ...

  7. JavaScript 运动(加速度运动,弹性运动)

    加速度运动(加速度不变的加速运动) function addSpeed(dom){ var a = 5; timer = setInterval(function(){ speed = speed + ...

  8. OPENGL 入门

    检测设备支持版本,判断是否支持opengl 2.0版本 初始化设置OpenGLES2.0 实现接口GLSurfaceView.Renderer 渲染 绘制图形 1.检测设备支持版本,判断是否支持ope ...

  9. java最全的获取某个接口或者某个类所有对应的所有实现类和继承类的工具类--反射动态获取、非动态获取、按照路径获取等总结

    我们直接上代码吧,代码中有注释说明. //直接看代码吧 import java.io.File; import java.lang.reflect.Field; import java.net.URL ...

  10. Django 模板变量之 forloop

    1. 模板变量之forloop.counter:从1开始自增1 模板代码如下: {% for row in v %} <tr> <td>{{forloop.counter}}& ...