- 浏览: 809005 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
存储过程创建语法:
create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;
If (判断条件) then
Select 列名 into 变量2 from 表A 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;
注意事项:
1, 存储过程参数不带取值范围,in表示传入,out表示输出
2, 变量带取值范围,后面接分号
3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录
4, 用select 。。。into。。。给变量赋值
5, 在代码中抛异常用 raise+异常名
以命名的异常
命名的系统异常 产生原因
ACCESS_INTO_NULL 未定义对象
CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置
ELSE 时
COLLECTION_IS_NULL 集合元素未初始化
CURSER_ALREADY_OPEN 游标已经打开
DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值
INVALID_CURSOR 在不合法的游标上进行操作
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 数据库时,提供了不
正确的用户名或密码
NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下
访问数据
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 在等待资源时超时
实例学习:
1. 建立一个存储过程 一个入参,一个出参 create or replace procedure test_xg_p5(a in number,x out varchar2) is 在sql 模式下运行 以上存储过程 调用方式 3种 a. 在 windows 客户端 使用PLSQL Developer 的 command模式 执行
begin
if a=0 then
select count(1) into x from log;
else
select count(1) into x from id_table;
end if;
exception
when others then
ROLLBACK;
end test_xg_p5;
b.在安装 oracle 的linux 客户机上使用 oracle 用户在控制台 使用sqlpuls 执行存贮过程 图 pd2
c. 使用java客户端
/*掉oracle存储过程 返回一个 数字*/
Connection conn=null;
CallableStatement proc = null;
conn= OracleJDBCTest.getConn();
proc = conn.prepareCall("{call test_xg_p5(?,?)}");
//传递0 返回1 传递1 返回106 两个表的记录数目不同
proc.setInt(1,1);
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
System.out.println(proc.getString(2));
conn.close();
2 建立一个存储过程 返回一个结果集合
步骤:
第一步: 首先建立一个包,定义游标类型
CREATE OR REPLACE PACKAGE TYPES AS
TYPE BJ_CURSOR IS REF CURSOR;
END;
第二步: 建立 中间存贮过程过程 返回游标
CREATE OR REPLACE PROCEDURE BJ_TEST_PROC
(
V_TEMP OUT TYPES.BJ_CURSOR,
PID IN VARCHAR
)
AS
BEGIN
OPEN V_TEMP FOR select * from id_table t where t.quantity=PID;
END BJ_TEST_PROC;
调用方式2 种
a. 在sqlplus 控制台下 (貌似不能在 commond 模式下执行,不然var a refcursor会报错)
var a refcursor
call BJ_TEST_PROC(:a,1);
print a;
图 pb3
b. 使用java客户端
首先看下表名 为id_table的表结构
图pd4
调用代码
Connection conn=null;
CallableStatement proc = null;
conn= OracleJDBCTest.getConn();
proc = conn.prepareCall("{call BJ_TEST_PROC(?,?)}");
proc.setString(2,"1");
proc.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
ResultSet rs = (ResultSet) proc.getObject(1);
while (rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
conn.close();
一个在eusp 项目中自己写的存储过程 以及 客户端调用代码
功能:给学校初始化 客户管理菜单
create or replace procedure pr_initCustManageMenu(flag in varchar2,sysOrg in varchar2,outPut out number) is
begin
-- 增加菜单 flag=0,删除菜单 flag=1
if flag='0' then
insert into xs_menu (menu_name,menu_type,menu_icon,SYS_ORGANIZATION) values('客户管理','系统类','customer.gif',sysOrg);
insert into xs_menu (upper_menu_id,menu_name,menu_type,tech_type,SYS_ORGANIZATION)
select menu_id,'教职工管理','系统类','tecOrgCustPanel',sysOrg
from XS_MENU where XS_MENU.MENU_NAME='客户管理' and SYS_ORGANIZATION=sysOrg;
insert into xs_menu (upper_menu_id,menu_name,menu_type,tech_type,SYS_ORGANIZATION)
select menu_id,'临时人员管理','系统类','worOrgCustPanel',sysOrg
from XS_MENU where XS_MENU.MENU_NAME='客户管理' and SYS_ORGANIZATION=sysOrg;
insert into xs_menu (upper_menu_id,menu_name,menu_type,tech_type,SYS_ORGANIZATION)
select menu_id,'学生管理','系统类','stuOrgCustPanel',sysOrg
from XS_MENU where XS_MENU.MENU_NAME='客户管理' and SYS_ORGANIZATION=sysOrg;
insert into xs_menu (upper_menu_id,menu_name,menu_type,tech_type,SYS_ORGANIZATION)
select menu_id,'营业组管理','系统类','shoOrgCustPanel',sysOrg
from XS_MENU where XS_MENU.MENU_NAME='客户管理' and SYS_ORGANIZATION=sysOrg;
insert into xs_menu (upper_menu_id,menu_name,menu_type,tech_type,SYS_ORGANIZATION)
select menu_id,'设备管理','系统类','xxTermPanel',sysOrg
from XS_MENU where XS_MENU.MENU_NAME='客户管理' and SYS_ORGANIZATION=sysOrg;
--- 添加权限
insert into XS_LEVEL_SYSMODULE(MENU_ID,ROLE_ID)
select m.menu_id,(select role_id from xs_role where name='ROLE_admin' and SYS_ORGANIZATION=sysOrg)
from xs_menu m where m.sys_organization=sysOrg start with
m.menu_id=(select m.menu_id from xs_menu m where m.menu_name='客户管理' and m.sys_organization=sysOrg)
connect by prior m.menu_id = m.upper_menu_id;
-- 添加成功返回
outPut:=0;
commit;
else
-- 删除权限
delete from XS_LEVEL_SYSMODULE ls where exists
(
select menu_id from (
(select m.menu_id from xs_menu m where m.sys_organization=sysOrg start with
m.menu_id=(select m.menu_id from xs_menu m where m.menu_name='客户管理' and m.sys_organization=sysOrg)
connect by prior m.menu_id = m.upper_menu_id)
) a where a.menu_id=ls.menu_id);
-- 删除菜单
delete from xs_menu ls where exists
(
select menu_id from (
(select m.menu_id from xs_menu m where m.sys_organization=sysOrg start with
m.menu_id=(select m.menu_id from xs_menu m where m.menu_name='客户管理' and m.sys_organization=sysOrg)
connect by prior m.menu_id = m.upper_menu_id)
) a where a.menu_id=ls.menu_id and ls.sys_organization=sysOrg);
--删除成功返回
outPut:=0;
commit;
end if;
exception
when others then
ROLLBACK;
--失败
outPut:=1;
end pr_initCustManageMenu;
客户端调用代码:使用了spring的 JdbcDaoSupport
@Override
public int initCustManageMenu(final String flag, final String sysOrg) {
String sql = "{call pr_initCustManageMenu(?,?,?)}";
Object obj=getJdbcTemplate().execute(sql,new CallableStatementCallback(){
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.setString(1,flag);
cs.setString(2,sysOrg);
cs.registerOutParameter(3,Types.INTEGER);
cs.execute();
return cs.getInt(3);
}
});
return Integer.valueOf(obj.toString());
}
发表评论
-
使用shell+procedure构造测试数据
2012-01-17 15:27 1236more test.sh #!/usr/bin/bash ... -
porting oracle to mysql
2011-09-02 08:09 1371很久都没写blog了,忙着结婚,忙着和媳妇度过在西安为数不 ... -
ORACLE+UNIX易错问题集锦
2011-02-26 23:31 1579很好的文章! -
Oracle 常用SQL技巧收藏(转载)
2010-11-19 12:53 12761. SELECT子句中避免使用 “*” 当你想 ... -
oracle trigger 的使用
2010-08-29 17:14 16561.目的: 网厅前台订单查询中只查到net ... -
记录一次 mysql 无法启动 的问题
2010-05-10 14:10 1739早上看了下我的mysql 服务器,发现无法启动了 ... -
Oracle Sql优化笔记
2010-05-05 10:33 1293基本的Sql编写注意事项 尽量少用IN操作符,基本上所有 ... -
oracle恢复误删除数据,解除锁定的等sql语句
2010-04-27 12:54 21670. (SELECT SID,SERIAL# FROM ... -
Oracle数据库中分区表的操作方法
2010-04-15 08:34 1225在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以 ... -
谈谈怎么实现Oracle数据库分区表
2010-04-15 08:13 2106谈谈怎么实现Oracle数据库分区表 Oracle ... -
使用 exp, imp命令 导出导入数据
2010-04-09 00:08 1619目标 : 我是吧64上的数据用netbnew用户( ... -
SQL注入攻击例子及Statement和PreparedStatement的比较
2010-03-19 22:56 5663SQL injection is a technique th ... -
mysql explain语法解释
2010-02-01 15:13 1346explain显示了mysql如 何使用索引来处理select ... -
Redhad4 下安装mysql5
2010-01-25 21:18 2138一开始是下载的是2进制的包,按照网上的教 ... -
redhat5 下安装 oracle10g
2010-01-23 05:36 2677工作中使用的一直是oracle 数据库 从来 ... -
oracle 小技巧
2009-12-24 21:58 10521.启动和关闭数据库 举例:我们64 测试环境 ... -
mysql 小技巧
2009-12-24 21:45 11101. mysql 看所有表的信息 select * ... -
解决远程连接mysql错误1130代码的方法
2009-12-22 21:27 8887解决远程连接mysql错误 ... -
powerdesigner 基本操作
2009-11-19 22:30 14151.将物理模型 pdm文件 导成数据字典 ... -
oracle 分页例子
2009-10-28 08:44 1467select tp_card_num,serial,resul ...
相关推荐
Oracle 存储过程学习经典入门 Oracle 存储过程学习目录是 Oracle 存储过程学习的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些常见问题的解决方法是非常重要的。本文将从 Oracle 存储过程的基础知识...
### ORACLE存储过程学习知识点详解 #### 一、存储过程概述 存储过程是数据库中预编译好的一组SQL语句,它可以实现复杂的数据处理逻辑,提高应用开发效率,并且能够增强应用程序的安全性。Oracle存储过程使用PL/SQL...
这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...
### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...
### Oracle存储过程学习经典知识点详解 #### Oracle存储过程概述与基础知识 存储过程是数据库中预编译的一系列SQL和PL/SQL语句的集合,它提供了执行复杂操作的能力,如事务处理、数据处理和错误处理。Oracle存储...
这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何创建、执行和管理存储过程。 存储过程在数据库管理中扮演着关键角色,它可以提升系统的性能,通过减少网络流量和提供预编译的...
### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程概述 - **定义**: 存储过程是在数据库中预编译并存储的一段SQL或PL/SQL代码块,它可以包含复杂的逻辑处理,用于实现特定的功能。存储过程提高了代码...
### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程概述 **存储过程**是在数据库中预先定义并编译好的一系列SQL语句或PL/SQL代码块,它可以接受输入参数,输出参数,并能实现复杂的业务逻辑处理。通过...
### Oracle存储过程学习文档知识点详解 #### 一、Oracle存储过程概述 **1.1 存储过程定义:** Oracle存储过程是一种存储在数据库中的PL/SQL代码块,它可以接收输入参数并返回输出参数。存储过程能够执行复杂的业务...
### Oracle存储过程学习经典知识点详解 #### 一、创建存储过程 存储过程是数据库中预编译的一段SQL代码,可以提高程序的可维护性和执行效率。在Oracle中,可以通过`CREATE OR REPLACE PROCEDURE`语句来创建存储过程...
在本学习资料中,你将深入理解Oracle存储过程的创建、调用、调试以及优化等多个方面。 1. **存储过程的创建**: Oracle存储过程通过`CREATE PROCEDURE`语句来定义。你可以指定输入参数、输出参数、输入输出参数,...
在"Oracle存储过程学习"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **定义与创建**: 存储过程通过`CREATE PROCEDURE`语句创建。例如: ```sql CREATE OR REPLACE PROCEDURE proc_name (param1 ...
Oracle存储过程学习总结涵盖了Oracle中存储过程的编写与应用,涉及到字符串处理、游标使用、PL/SQL编程等方面的知识点。 首先,字符串处理是存储过程中常见的操作。文章中提到了多个内置函数,如CONCAT用于连接字符...
在本篇“Oracle存储过程学习笔记(四)”中,我们将深入探讨存储过程的概念、创建、执行以及在实际应用中的优势。 1. **存储过程的概念** 存储过程是一组预先编译的SQL和PL/SQL语句,存储在数据库服务器中。当需要...
在这个“Oracle存储过程学习实例文档”中,我们将深入探讨如何创建存储过程,以及如何在Java应用程序中调用这些过程。 1. **创建Oracle存储过程** 创建存储过程的基本语法如下: ```sql CREATE OR REPLACE ...
1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字
这个压缩包文件"oracle存储过程学习经典入门.rar_oracle"显然包含了帮助初学者理解并掌握Oracle存储过程的基础教程。下面将详细讲解Oracle存储过程的相关知识点。 首先,存储过程是预编译的SQL语句集合,它在数据库...