1、存储过程的基本语法:

  CREATE OR REPLACE PROCEDURE 存储过程名(param1 in type,param2 out type)

  IS

  变量1 类型(值范围);

  变量2 类型(值范围);  

  BEGIN

    select count(*) into 变量1 from 表名 where 列名=param1;

    if (判断条件) then

      select 列名 into 变量2 from 表名 where 列名=param1;

      DBMS_OUTPUT.put_line('打印信息');

    Elsif (判断条件) then

      dbms_output.put_line('打印信息');

    Else

      Raise 异常名 (NO_DATA_FOUND);

    End if;

  Exception

      When others then

        Rollback;   

  END;

2、已命名的异常:

  命名的系统异常               产生原因

  ACCESS_INTO_NULL           未定义对象

  CASE_NOT_FOUND              CASE中若未包含相应的WHEN,并且没有设置ELSE时

  COLLECTION_IS_NULL           集合元素未初始化

  CURSER_ALREDAY_OPEN          游标已经打开

  DUP_VAL_NO_INDEX              唯一索引对应的列上有重复的列

  INVALID_CUSER               在不合法的游标上操作

  INVALID_NUMBER               内嵌的SQL语句不能将字符转换为数字

  NO_DATA_FOUND               使用select into 未返回行,或应用索引表未初始化

  TOO_MANY_ROWS                执行select into 时,结果集超过一行

  ZERO_DIVIDE                  除数为0

  SUBSCRIPT_BEYOND_COUNT          元素下标超过嵌套表或VARRAY的最大值

  SUBSCRIPT_OUTSIDE_LIMIT          使用嵌套表或VARRAY时,将下标指定为负数

  VALUE_ERROR               赋值时,变量长度不足以容纳实际数量

  LOGIN_DENIED               PL/SQL应用程序连接到ORACLE数据库时,提供了不正确的用户名和密码

  NO_LOGGED_ON                 PL/SQL应用程序在没有连接ORACLE数据库的情况下访问数据

  PROGRAM_ERROR              PL/SQL内部问题,可能需要重装数据字典& PL/SQL系统包

  ROWTYPE_MISMATCH             宿主游标变量与PL/SQL游标变量的返回类型不兼容

  SELF_IS_NULL                 使用对象类型时,在NULL对象上调用对象方法

  STORAGE_ERROR                运行PL/SQL时,超出内存空间

  SYS_INVALID_ID              无效的ROWID字符串

  TIMEOUT_ON_RESOURCE             ORACLE在等待资源时超时

 

3、实际例子

  2.1 没有参数的过程

  create or replace procedure test_count
  is
  v_total int;
  v_date varchar(20);
  begin

    select count(*) into v_total from dual;
       select to_char(sysdate,'yyyy-mm-dd') into v_date from dual;
         DBMS_OUTPUT.put_line('总人数:'||v_total);
         DBMS_OUTPUT.put_line('当前时间:'||v_date);
  end;

  调用方法:

  begin

    test_count;
  end;

  2.2 仅带传入参数的过程

  create or replace procedure test_count1(v_id in varchar2)
       as
       v_name varchar(100);
       begin
         select c_name into v_name from tb_store where c_stono=v_id;
         DBMS_OUTPUT.put_line(v_id||'店的名称为:'||v_name);
        exception
         when no_data_found then dbms_output.put_line('no_data_found');
       end;

       调用方法:

  begin
           test_count1(11910);
       end;

  2.3 仅带输出参数的过程

  create or replace procedure test_count2(v_name out varchar2)
  is
  begin
        select c_name into v_name from tb_store where c_stono='1101';
    exception
        when no_data_found then dbms_output.put_line('no_data_found');
  end;

  调用方法:

  declare
  v_name varchar(200);
  begin
    test_count2(v_name);
    dbms_output.put_line(v_name);
  end;

  2.4 带输入参数和输出参数的存储过程

  create or replace procedure test_count3(v_id in int,v_name out varchar2)
  is
  begin
    select c_name into v_name from tb_store where c_stono=v_id;
    dbms_output.put_line(v_name);
    exception
      when no_data_found then dbms_output.put_line('no_data_found');

  end;

  调用方法:

  declare
  v_name varchar(200);
  begin
    test_count3('1101',v_name);
  end;

  2.5 带异常输出的存储过程

  

  

【Oracle】存储过程写法小例子的更多相关文章

  1. Oracle存储过程写法

    create or replace procedure QIANFEIGL_JIAOKUANDY( cebenh varchar2, kehuh varchar2, hetongh varchar2, ...

  2. oracle 存储过程和函数例子

    关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c is select * from grade; begin ...

  3. oracle 存储过程和函数例子 --2

    关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c is select * from grade; begin ...

  4. oracle存储过程写法。

    create or replace procedure testwzm(v_gdjdm in varchar2) isv_id varchar2(10);v_xlname varchar2(100); ...

  5. Oracle 动态sql小例子

    错误写法: create or replace procedure testproce20130228issqlstr varchar2(8000);date1 varchar2(10);begins ...

  6. oracle触发器的小例子

    实现功能: 插入数据前触发,检查与插入数据几个属性相同的在表中的列将状态改为false,再执行插入. 解决方案: CREATE OR REPLACE TRIGGER tri_insert BEFORE ...

  7. Oracle存储过程入参传入List集合的小例子

    第一步:创建一个对象类型 create or replace type STUDENT as object( id ), name ), age ) ); / 第二步:创建一个数组类型 (任意选择下面 ...

  8. oracle存储过程的例子

    oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的 ...

  9. Oracle存储过程(增、删、改)写法、oracle执行存储过程

    Oracle存储过程(增.删.改)写法 发布时间: 2010-3-24 11:07    作者: ZHF    来源: 51Testing软件测试网采编 字体:  小  中  大  | 上一篇 下一篇 ...

随机推荐

  1. Android输入控件EditText和软键盘监听

    1. 跳转到新的页面自动软键盘显示情况: 在配置清单文件AndroidManifest.xml文件,对Activity的windowSoftInputMode属性进行设置. stateUnspecif ...

  2. 微信小程序开发-概述

    微信小程序开发-概述 一.小程序申请&APPID 登录微信平台申请成为小程序开发者,小程序不可直接使用服务号或订阅号的AppID,需要登录微信公众平台管理后台,在网站的"设置&quo ...

  3. 可视化Echarts的使用示例

    1.照着官方文档简单做两个图表,感受一下. <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  4. C/C++练习题(二)

    1.下面这些指针分别代表什么? float(**p1)[10]; double*(*p2)[10]; double(*p3[10])(); int*((*p4)[10]); long(**p5)(in ...

  5. Redis笔记(七):Redis应用场景

    特性优势 1 支持持久化 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. 2 数据类型丰富 Redis不仅仅支持简单的key-value类型的数据,同时还 ...

  6. Velocity学习笔记

    一.为什么要使用velocity? 很多人下载了EasyJWeb的开源应用示例,但是对动态页面模板文件中的标签使用不是很熟悉,这里简单介绍一下.EasyJWeb特定把视图限定为Velocity,因为我 ...

  7. For update带来的思考

    For update or not 起源 ​ 之所以想写这个专题,是因为最近在做一个抢占任务的实现.假设数据库很多个任务,在抢占发生之前任务的状态都是FREE.现在假设同时有一堆抢占线程开始工作,抢占 ...

  8. 任务四十二:UI组件之日历组件(三)

    任务四十二:UI组件之日历组件(三) 面向人群: 有一定基础的同学 难度: 困难 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容的质量以及 ...

  9. 问题集录--从初级java程序员到架构师,从小工到专家

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希 ...

  10. ILMerge将源DLL合并到目标EXE

    ILMerge将源DLL合并到目标EXE(.NET4.6.2) 本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EX ...