关于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 ...
随机推荐
- 设置westorm自动代码提示
打开settings 然后在js文件下 打出co 按TAB键就出现了color了
- cookie ,session Storage, local storage
先来定义: cookie:是网站为了标识用户身份存储在本地终端的数据,其数据始终在APP请求中存在,会在服务器和浏览器中来回传递 数据大小不超过4k, 可以设置有效期,过了有效期自动删除 sessio ...
- jmeter 构建一个Web测试计划
添加用户 第一步你想做的每一个JMeter测试计划是添加一个 线程组 元素. 线程组告诉 JMeter的用户数量你想模拟,用户应该发送的次数 请求,请求他们应该送多少. 继续添加ThreadGroup ...
- 1029c语言文法2理解
program → external_declaration | program external_declaration <程序>→ <外部声明>|<程序>< ...
- postgresql异常快速定位
今天下午在使用.NET链接postgresql的时候报了“3D000”的错误,经过测试得知原来是web.config中的数据库配置问题. 在这里有个小情况需要注意,postgresql是不允许创建相同 ...
- Qt之QCustomPlot(图形库)
简述 QCustomPlot是一个基于Qt C++的图形库,用于绘制和数据可视化 - 制作漂亮的2D图 - 曲线图.趋势图.坐标图.柱状图等,并为实时可视化应用程序提供高性能服务.它没有进一步的依赖关 ...
- 输出有序数组的中两个元素差值为指定值diff的两个元素
题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...
- centos修改文件及文件夹权限
查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是 ...
- spring集成环境下的axis webservice的发布,调试
在spring集成的环境下,无论你是ssh集成,还是ssi集成的情况下,发布webservice往往在调用的时候会出错. 特别是,如果你是这个方式: 将webservice打aar包,放到tomcat ...
- soap base64 调用
xsd__base64Binary data; data.__ptr = (unsigned char*) soap_malloc(_soapProxy,picLen); data ...