`
Johnny_GZ
  • 浏览: 179840 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle存储过程-写法实例--以及调用

阅读更多
总结项目中写的存储过程例子:

Oracle存储过程基本语法 存储过程
  1  CREATE OR REPLACE PROCEDURE 存储过程名

  2  IS/AS

  3  BEGIN

  4  NULL;

  5  EXCEIPTION;

  6  END;

1、创建存储过程,后面可用is或者as:
create or replace procedure PRO_COMPLAIN_TEMPLATE as

2、定义变量,此处用到了%TYPE和%ROWTYPE,参考http://johnny-gz.iteye.com/blog/1726305,另外定义了一个游标,TEM_INSTANCE TEMPLATE_CUR%ROWTYPE这个类型定义必须要在游标定义之后:
NEED_DO_FOR_ZL INTEGER;
CURRENT_MAX_ID MEMO_TEMPLET.TEMPLET_ID%TYPE;
CURSOR TEMPLATE_CUR IS SELECT TEMPLET_NAME, TEMPLET_CONTENT FROM SYS_COMPLAINT_TEMPLET;
TEM_INSTANCE TEMPLATE_CUR%ROWTYPE;
3、begin开始块:
begin
4、该插入语句使用了DBLINK(参考http://johnny-gz.iteye.com/blog/1726028
),还有使用DBMS_OUTPUT.put_line('打印信息')进行信息输出:
  insert into MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT, TEMPLET_TYPE, TEMPLET_MEMO) (SELECT * FROM MEMO_TEMPLET@COMPANY);

  SELECT COUNT(*) INTO NEED_DO_FOR_ZL FROM SYS_COMPLAINT_TEMPLET;
  IF(NEED_DO_FOR_ZL > 0) THEN
  DBMS_OUTPUT.put_line('打印信息');
    SELECT MAX(TEMPLET_ID)+1 INTO CURRENT_MAX_ID FROM MEMO_TEMPLET;
    DBMS_OUTPUT.put_line('MEMO_TEMPLET最大ID' || CURRENT_MAX_ID);
    FOR TEM_INSTANCE IN TEMPLATE_CUR LOOP
      INSERT INTO MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT, TEMPLET_TYPE, TEMPLET_MEMO) VALUES (CURRENT_MAX_ID, TEM_INSTANCE.TEMPLET_CONTENT, '7', NULL);
      CURRENT_MAX_ID := CURRENT_MAX_ID + 1;
      DBMS_OUTPUT.put_line(TEM_INSTANCE.TEMPLET_CONTENT);
    END LOOP;
  END IF;
  COMMIT;
4、exception块,使用WHEN OTHERS THEN(所有异常都这么处理),其中用raise可显示错误信息:
exception
WHEN OTHERS THEN
  DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);
  DBMS_OUTPUT.put_line('sqlerrm : ' || sqlerrm);
  raise;
  ROLLBACK;
  IF TEMPLATE_CUR%ISOPEN THEN
  CLOSE TEMPLATE_CUR;
  END IF;
  DBMS_OUTPUT.put_line('打印信息');
end;

注:关于游标的使用,如果像本例中使用for循环去遍历游标的话则不需要显式的去用open/close cursor打开和关闭游标,此处会自己处理,如果使用fetch into的话就需要显式开关游标,另外任意执行一个update操作,用隐式游标sql的属性%found,%notfound,%rowcount,%isopen观察update语句的执行情况,也可以使用来判断游标状态,如IF TEMPLATE_CUR%ISOPEN THEN。


存储过程调用:
参数对应,最后两个为输出参数,如果要挪动参数位置,则写  参数名=>参数值
declare
  p_CallTime VARCHAR2(255);  
  p_SerialId VARCHAR2(255);  
  p_SystemNo VARCHAR2(255);   
  p_BusinessType VARCHAR2(255); 
  p_TaskType VARCHAR2(255);  
  p_TaskId VARCHAR2(255);   
  p_CustId VARCHAR2(255); 
  p_Phone VARCHAR2(255);      
  p_Content VARCHAR2(255);
  p_AgentName VARCHAR2(255);   
  p_ProdCode VARCHAR2(255);     
  p_SMachineID VARCHAR2(255);     
  p_InfoRecordID VARCHAR2(255);   
  p_RetCode varchar2(255);
  p_RetInfo varchar2(255); 
begin
  p_CallTime:='2013-03-29 14:22:44';
  p_SerialId:='E11122';
  p_SystemNo:='MDKT';
  p_BusinessType:='14';
  p_TaskType:='4';
  p_TaskId:='T332133';
  p_CustId:='C44332211';
  p_Phone:='15999979607';
  p_Content:='test';
  p_AgentName:='admin';
  p_ProdCode:=p_SystemNo;
  p_SMachineID:='M2334343';
  p_InfoRecordID:=p_TaskId;
  P_Create_Callback_Task_Ocs(p_CallTime, p_SerialId, p_SystemNo, p_BusinessType, p_TaskType, p_TaskId, p_CustId, p_Phone, p_Content, p_AgentName, p_ProdCode, p_SMachineID, p_InfoRecordID, p_RetCode, p_RetInfo);
  Dbms_Output.put_line(p_RetCode || '---' || p_RetInfo);
end;
1
1
分享到:
评论

相关推荐

    oracle存储过程详解-开发技术

    ### Oracle存储过程详解 #### 一、存储过程概述 存储过程是一种存储在数据库中的SQL脚本集合,它可以接受输入参数并返回输出结果。在Oracle数据库中,存储过程使用PL/SQL语言编写,这是一种专为Oracle设计的过程化...

    oracle存储过程学习经典[语法+实例+调用]

    以上就是从给定文件中提取出来的Oracle存储过程学习的经典知识点,涵盖了基本语法、常见问题、调用方法以及与函数的区别等内容。希望这些内容能帮助读者更好地理解和掌握Oracle存储过程的相关知识。

    mybatis连接oracle实例

    首先,确保你已经安装了Eclipse集成开发环境、JDK、Oracle数据库以及MyBatis框架。Oracle数据库需要设置相应的环境变量,如`TNS_ADMIN`指向tnsnames.ora文件的位置,以便MyBatis能够找到数据库连接。 1. **创建数据...

    数据库存储过程的写法\\连接各种数据库写法

    ### 数据库存储过程的写法及连接各种数据库的方法 #### 概述 本文将详细介绍如何在不同的数据库系统中编写存储过程以及如何建立与这些数据库的连接。存储过程是一种预编译的SQL代码块,它可以存储在数据库服务器上...

    批处理的oracle导出备份写法

    这个批处理脚本首先设置了Oracle的环境变量,然后调用`expdp`命令进行导出。`dumpfile`指定了导出的DMP文件名,而`logfile`则是导出过程的日志文件。最后,`pause`命令会暂停脚本执行,显示“按任意键继续…”的提示...

    Oracle中触发器示例详解

    触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    提升数据库Oracle开发性能探究.pdf

    本篇文档深入探讨了如何提升Oracle数据库开发的性能,涵盖了解析、调用、简洁和细致四个核心领域。 首先,在解析方面,重点在于如何减少数据库中的解析动作。解析过程指的是Oracle通过优化器生成SQL语句的最佳执行...

    oracle常见面试题及答案.pdf

    最后,写一个Java程序来调用存储过程。 2. FUNCTION、PROCEDURE和PACKAGE的区别是什么? 答案:FUNCTION和PROCEDURE都是PL/SQL代码的集合,用于完成一个任务。FUNCTION返回一个值,而PROCEDURE不需要返回任何值。...

    oracle动态性能表

     按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图存储下列的统计信息: 1>.事件发生次数的统计(如:user commits) 2>...

    java面试题

    EJB必须部署在支持它的容器中,如IBM WebSphere或Oracle WebLogic等。客户端不直接访问EJB组件本身,而是通过EJB容器间接访问。 **EJB容器的作用** EJB容器为部署在其内的EJB组件提供了一系列的管理和支持服务,...

    jdk-8u201-windows-x64

    1. **Lambda表达式**:JDK 8引入了lambda表达式,这是一种简洁的匿名函数写法,可以用于简化处理函数接口实例的代码。它们在处理集合数据时尤其有用,通过Stream API和lambda表达式,可以实现更高效的代码。 2. **...

    IBM华为Java面试题

    本资料集合了IBM和华为在Java面试过程中可能会遇到的问题,旨在帮助准备面试的候选人深入理解和熟练掌握Java的关键知识点。 1. **基础概念** - **Java简介**:Java是由Sun Microsystems(后被Oracle收购)开发的一...

    超详细PHP笔试题宝典(搜狐、新浪、网易、等等)

    - `null instanceof Object`: 结果为`false`,因为`null`不是任何对象的实例。 - `null === undefined`: 结果为`false`,`null`与`undefined`不相等。 - `null == undefined`: 结果为`true`,在宽松比较模式下,`...

    SSH分页技术详解与实例

    7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...

    Java面试题

    而在Oracle数据库中,存储过程使用PL/SQL语言编写,具有更强大的编程能力,支持复杂的逻辑控制结构。两者在语法、功能及执行效率上都有所不同。 #### 5. 实例化对象的不同方式 创建对象的常见方法有两种:直接使用...

    ODI集成sql server解决方案.doc

    据描述中提到,作者在测试过程中发现,即使将接口的驱动改为 SQL Server 2005 的写法,也没有影响到已有的集成。然而,这仍然建议在生产环境中进行全面测试,因为不同环境和接口可能会有不同的行为。 总结来说,...

    Java数据库接口JDBC介绍

    - **连接数据库**:Java应用程序可以通过JDBC接口连接到不同的数据库,如MySQL、Oracle、SQL Server等。 - **执行SQL语句**:包括数据查询、插入、更新和删除操作。 - **处理结果集**:将数据库查询的结果组织成...

Global site tag (gtag.js) - Google Analytics