- 浏览: 179286 次
- 性别:
- 来自: 广州
文章分类
最新评论
总结项目中写的存储过程例子:
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;
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;
发表评论
-
PL/SQL执行存储过程
2013-04-01 18:11 11161、PL/SQL中SQL窗口执行过程: BEGIN DBMS ... -
(转)SQL 优化原则
2013-02-28 10:29 732一、问题的提出 在应用系统开发初期,由于开发数据库数据比 ... -
Sybase数据bcp导出
2013-02-27 18:30 1395命令行操作Sybase以及数据bcp导出: C:\Docum ... -
递归查询—写法
2013-02-02 10:39 1244WITH RecursiveCategories (paren ... -
Oracle数组使用以及PLSQL操作记录
2012-12-21 15:23 9827----------------------------固定长 ... -
转:sqlserver日期转字符串以及oracle函数
2012-12-11 18:25 1590SQL SERVER: SELECT convert(char ... -
Oracle常用函数
2012-11-29 14:04 1119--常用函数-- 一、-字符串函数 --1、lower ... -
转:mysql/oracle连接命令
2012-11-27 22:38 936一、MySQL 连接本地数据库, 用户名为“root”,密码“ ... -
oracle游标使用
2012-11-15 16:00 0Oracle 游标使用全解 这个文档几乎包含了oracle游标 ... -
Oracle中%TYPE和%ROWTYPE说明
2012-11-16 00:26 107061. 使用%TYPE 在许多情况下,变量应该拥有与表列相同 ... -
Oracle存储过程创建及调用
2012-11-15 14:33 0Oracle存储过程创建及调用 Posted on 2010 ... -
Oracle存储过程
2012-11-15 14:27 0Oracle存储过程基本语法 ... -
存储过程
2012-11-15 14:04 0存储过程和触发器笔记 1. 存储过程和触发器是什么 ... -
DBLINK以及其他语法
2012-11-15 10:30 1607项目中使用到DBLINK,总结了一下: 当用户要跨本地 ... -
sqlserver和oracle修改表结构常用
2012-10-11 09:16 938SQL Server: 1、增加列 ALTER TABLE ...
相关推荐
### Oracle存储过程详解 #### 一、存储过程概述 存储过程是一种存储在数据库中的SQL脚本集合,它可以接受输入参数并返回输出结果。在Oracle数据库中,存储过程使用PL/SQL语言编写,这是一种专为Oracle设计的过程化...
以上就是从给定文件中提取出来的Oracle存储过程学习的经典知识点,涵盖了基本语法、常见问题、调用方法以及与函数的区别等内容。希望这些内容能帮助读者更好地理解和掌握Oracle存储过程的相关知识。
首先,确保你已经安装了Eclipse集成开发环境、JDK、Oracle数据库以及MyBatis框架。Oracle数据库需要设置相应的环境变量,如`TNS_ADMIN`指向tnsnames.ora文件的位置,以便MyBatis能够找到数据库连接。 1. **创建数据...
### 数据库存储过程的写法及连接各种数据库的方法 #### 概述 本文将详细介绍如何在不同的数据库系统中编写存储过程以及如何建立与这些数据库的连接。存储过程是一种预编译的SQL代码块,它可以存储在数据库服务器上...
这个批处理脚本首先设置了Oracle的环境变量,然后调用`expdp`命令进行导出。`dumpfile`指定了导出的DMP文件名,而`logfile`则是导出过程的日志文件。最后,`pause`命令会暂停脚本执行,显示“按任意键继续…”的提示...
触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。...
有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用...
本篇文档深入探讨了如何提升Oracle数据库开发的性能,涵盖了解析、调用、简洁和细致四个核心领域。 首先,在解析方面,重点在于如何减少数据库中的解析动作。解析过程指的是Oracle通过优化器生成SQL语句的最佳执行...
最后,写一个Java程序来调用存储过程。 2. FUNCTION、PROCEDURE和PACKAGE的区别是什么? 答案:FUNCTION和PROCEDURE都是PL/SQL代码的集合,用于完成一个任务。FUNCTION返回一个值,而PROCEDURE不需要返回任何值。...
按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图存储下列的统计信息: 1>.事件发生次数的统计(如:user commits) 2>...
1. **Lambda表达式**:JDK 8引入了lambda表达式,这是一种简洁的匿名函数写法,可以用于简化处理函数接口实例的代码。它们在处理集合数据时尤其有用,通过Stream API和lambda表达式,可以实现更高效的代码。 2. **...
本资料集合了IBM和华为在Java面试过程中可能会遇到的问题,旨在帮助准备面试的候选人深入理解和熟练掌握Java的关键知识点。 1. **基础概念** - **Java简介**:Java是由Sun Microsystems(后被Oracle收购)开发的一...
- `null instanceof Object`: 结果为`false`,因为`null`不是任何对象的实例。 - `null === undefined`: 结果为`false`,`null`与`undefined`不相等。 - `null == undefined`: 结果为`true`,在宽松比较模式下,`...
7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...
而在Oracle数据库中,存储过程使用PL/SQL语言编写,具有更强大的编程能力,支持复杂的逻辑控制结构。两者在语法、功能及执行效率上都有所不同。 #### 5. 实例化对象的不同方式 创建对象的常见方法有两种:直接使用...
据描述中提到,作者在测试过程中发现,即使将接口的驱动改为 SQL Server 2005 的写法,也没有影响到已有的集成。然而,这仍然建议在生产环境中进行全面测试,因为不同环境和接口可能会有不同的行为。 总结来说,...
* JDBC是一套协议,由Sun定义的一组接口,由数据库厂商来实现,规定了Java开发人员访问数据库所使用的方法的调用规范。 * JDBC的实现是由数据库厂商提供,以驱动程序形式提供。 * 在使用JDBC之前,需要加载驱动程序...
- **基础查询**:创建`BaseDAO`实例,并构建SQL语句。 ```java BaseDAO dao = new BaseDAO(); // 只能在private端使用 String querySql = "SELECT * FROM demo_quotation WHERE dr = 0"; // 完整正确的SQL语句 `...