关于oracle存储过程的一些知识点
一、创建一个存储过程,批量清空数据库中所有表的数据。
--清空数据库中所有表的数据
create or replace procedure truncateAllTables as
v_sql varchar2(2000);
CURSOR cur is
select table_name from user_tables order by table_name;
begin
--dbms_output.put_line('1111');
for rows in cur loop
v_sql := 'truncate table ' || rows.table_name;
--dbms_output.put_line(v_sql);
execute immediate v_sql;
end loop;
end;
执行存储过程如下:
exec truncateAllTables;
二、如何在plsql中调用一个有参数的存储过程呢?
比如这样一个存储过程:
create or replace procedure proc_CpNumber(cpNumber out varchar2) is
begin
....
-- 一些调试信息
dbms_output.put_line('==0'||cpNumber);
dbms_output.put_line('==0'||length(cpNumber));
--赋值
select 'E'||(to_number(substr(cpNumber,2,10))+1) into cpNumber from dual;
......
end;
调用方法如下:
--调用带有参数的存储过程
declare
cp_number varchar2(2000);
begin
proc_CpNumber(cp_number);
dbms_output.put_line(cp_number);
end;
/
三、在java代码中调用上面带有输出参数的存储过程如下:
public class OracleDBHelper {
static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
//开发环境
static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
static final String USER = "test123";
static final String PWD = "test123";
private OracleDBHelper() {
}
private static Connection con = null;
public static Connection getConnection() {
if(con == null) {
try {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, USER, PWD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
}
public static void main(String[] args) throws Exception {
CallableStatement cStatement = OracleDBHelper.getConnection().prepareCall("{call proc_cpnumber(?)}");
cStatement.setString(1, "aa");
cStatement.registerOutParameter(1, java.sql.Types.VARCHAR);
cStatement.execute();
System.out.println(cStatement.getString(1));
OracleDBHelper.getConnection().close();
}
}
四、如果使用了mybatis框架,则调用上述存储过程,方法如下
首先定义调用的语句。
<select id="proc_cpnumber" statementType="CALLABLE" parameterType="java.util.HashMap" resultType="java.util.HashMap">
<![CDATA[
{call proc_cpnumber(#{eNumber,mode=OUT,jdbcType=VARCHAR})}
]]>
</select>
java代码调用如下:
public synchronized String getNumber() {
String eNumber = "";
Map map=new HashMap();
getSqlSession().selectOne("proc_cpnumber",map);
eNumber=(String)map.get("eNumber");
return eNumber;
}
其中为了保证获取到的number的唯一性,需要加上同步锁。其中getSqlSession是通过注入的SqlSessionDao的getSqlSession获取返回的。
关于oracle存储过程的一些知识点的更多相关文章
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- ORACLE存储过程调用Web Service
1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...
- Oracle存储过程基本语法介绍
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- Oracle存储过程(转)
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER
关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...
- ORACLE存储过程学习
存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...
随机推荐
- FileReader本地预览图片
<body> <p><label>请选择一个图像文件:</label><input type="file" id=" ...
- 32-HTML辅助方法
顾名思义,HTML辅助方法(HTML Helper)就是用来辅助产生HTML之用,在开发View的时候一定会面对许多HTML标签,处理这些HTML的工作非常繁琐,为了降低View的复杂度,可以使用HT ...
- spring来了-02-HelloWorld
spring的各个版本说明: 在3.0以下的版本,源码有spring中相关的所有包[spring功能+依赖包],如:2.5版本 在3.0以上的版本,源码中只有spring的核心功能包[没有依赖包],如 ...
- js获取随机数
js 获取随机数方法如下: 1.Math.random()表示 结果为0-1间的一个随机数(包括0,不包括1) : 返回指定范围的随机数(m-n之间)的公式 Math.random()*(n-m)+m ...
- HIbernate实现增、删、改、查。
//大配置 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC " ...
- 转:怎样在VMware ESXi上 克隆虚拟机
Cloning virtual machines on VMware ESXi 翻译自http://www.dedoimedo.com/computers/vmware-esxi-clone-mach ...
- github注册使用以及体会
一.个人介绍 我叫冯越,学号是1413042065,班级是网络工程143,兴趣爱好有打羽毛球,素描,读书,个人编程能力一般,行数没有计算过,大一学习C++时,实验题目一些书后的题目,大二学习数据结构时 ...
- 452. Minimum Number of Arrows to Burst Balloons——排序+贪心算法
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...
- Nginx 引入线程池,提升 9 倍性能
转载:http://blog.csdn.net/wuliusir/article/details/50760357 众所周知,NGINX 采用异步.事件驱动的方式处理连接.意味着无需对每个请求创建专门 ...
- 关于PATH_INFO SCRIPT_NAME SCRIPT_FILENAME REDIRECT_URL 详解
参考:http://www.nginx.cn/426.html http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/13/217507 ...