【传智播客郑州校区】Java,PL/SQL调用 ORACLE存储函数以及存储过程
2017-11-20 09:35
801 查看
【郑州校区】Java,PL/SQL调用
ORACLE存储函数以及存储过程
文/传智播客郑州校区就业服务部
1. Java,PL/SQL调用
ORACLE存储函数以及存储过程1.1.1. 准备工作
· 创建表
--- 创建测试用表 school
CREATE TABLE school(
ID number, --学校id
NAME VARCHAR2(30) ---学校名
);
--- 添加数据
INSERT into school values(1,'北京大学');
INSERT into school values(2,'南京大学');
INSERT into school values(1,'东京大学');
COMMIT;
· 编写java代码连接数据库,获取Connection连接对象
public class OracleUtil {
// 加载Oracle驱动
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@iP:1521:orcl", "system",
"密码");
return connection;
}
}
1.1. ——-存储函数——-
·
1.什么是存储函数
·
存储函数又称为自定义函数。可以接收一个或多个参数,返回一个结果。在函数中我们可以使用PL/SQL进行逻辑的处理。
·
存储函数语法结构
CREATE [ OR REPLACE ] FUNCTION 函数名称
(参数名称 [in|out|in out] 参数类型,...)
RETURN
结果变量数据类型
IS
变量声明部分;
BEGIN
逻辑部分;
RETURN
结果变量;
[EXCEPTION
异常处理部分
END;
1.1.1. 创建函数
· 此处只是返回了一个varchar2的数据. 返回值可以为cursor,table.
--- 创建函数. 根据地址ID查询地址名称
CREATE OR REPLACE FUNCTION fn_getName(sid NUMBER)
RETURN VARCHAR2 --- 返回值类型
AS
r_name VARCHAR2(30); --- 声明变量
BEGIN
SELECT name INTO r_name FROM school WHERE id=sid; ---将查询的name 存储到r_name 中
RETURN r_name; -- 返回r_name
END;
1.1.2. PL/SQL调用oracle函数
--- PL/SQL调用过程 使用函数,传参 id = 2
select fn_getName(2) 学校 from dual;
java代码调用oracle函数
/**
* 调用ORACLE函数
*
* @param sid
*/
public static void getenamefun(int sid) {
String sname;
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
String sql = "{?=call fn_getName(?)}"; // 调用方式
CallableStatement fun = null;
try {
conn = OracleUtil.getConnection();
fun = conn.prepareCall(sql);
fun.setInt(2, sid);
fun.registerOutParameter(1, Types.VARCHAR);//注册传出参数类型
fun.execute();
sname = fun.getString(1); // 取返回的参数结果
System.out.println(sname);
} catch (SQLException e) {
e.printStackTrace();
}
}
1.2. ——-存储过程——-
· 1.什么是存储过程
存储过程是被命名的PL/SQL块,存储于数据库中,是数据库对象的一种。应用程序可以调用存储过程,执行相应的逻辑。
存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如
下:
1.存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过
传出参数返回多个值。
2.存储函数可以在select语句中直接使用,而存储过程不能。过程多数是
被应用程序所调用。
3.存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码
存储函数语法结构
CREATE [ OR REPLACE ] PROCEDURE 存储过程名称(参数名 类型,
参数名 类型,参数名
类型...)
IS|AS
变量声明部分;
BEGIN
逻辑部分
[EXCEPTION
异常处理部分
END;
注意:
1.参数只指定类型,不指定长度
2.过程参数的三种模式:
IN :传入参数(默认)
OUT :传出参数主要用于返回程序运行结果
IN OUT :传入传出参数
1.3. 一:不带传出参数
CREATE OR REPLACE PROCEDURE pro_insert(
ID NUMBER,
NAME VARCHAR2 ----注意这里不带长度,不能写成(VARCHAR(30))
)
AS
BEGIN
INSERT INTO school values(ID,NAME);
END;
1.3.1. PL/SQL调用过程
CALL pro_insert(4,'郑州大学');
· 1
1.3.2. java代码调用oracle函数
public static void callPr() {
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
try {
conn = OracleUtil.getConnection();
stmt = conn.prepareCall("{ call pro_insert(?,?) }"); //设置存储过程 call为关键字.
stmt.setInt(1, 4); //设置第一个输入参数
stmt.setInt(2, "郑州大学");//设置第二个输入参数
stmt.execute();//执行
} catch (SQLException e) {
e.printStackTrace();
}
}
1.4. 二:带传出参数
---. 带传出参数
CREATE OR REPLACE PROCEDURE pro_getCount(s_name VARCHAR2,s_count OUT NUMBER)
AS
BEGIN
SELECT COUNT(*) INTO s_count FROM school
WHERE name LIKE '%'||s_name||'%';
END;
1.4.1. PL/SQL调用过程
--- PL/SQL调用
declare
s_count number; --定义传出参数的变量
begin
pro_getCount('大学',s_count); --- 执行过程
DBMS_OUTPUT.put_line('查询结果,数量:'||s_count); ---打印结果
end;
1.4.2. java代码调用oracle函数
public static void pro_Gount(String name) {
java.sql.Connection conn = null;
java.sql.CallableStatement stmt = null;
try {
conn = DaoUtil.getConnection();
stmt = conn.prepareCall("{ call pro_getCount(?,?) }"); //设置存储过程 call为关键字.
stmt.setString(1, "大学"); //设置第一个输入参数
stmt.registerOutParameter(2,OracleTypes.NUMBER);// 设置第二个输入参数
stmt.execute();//执行.
// 执行完毕后,从占位符中去对应的列就可以了
int count = stmt.getInt(2);
System.out.println("查询结果" + count); // 4
} catch (SQLException e) {
e.printStackTrace();
}
}
1.5. 二:带传出参数
---- 返回值为游标
CREATE OR REPLACE PROCEDURE pro_cursor(s_cur OUT SYS_REFCURSOR)
AS
BEGIN
OPEN s_cur FOR SELECT * FROM school;
END;
1.5.1. PL/SQL调用过程
declare
s_cur SYS_REFCURSOR; -- 定义传出参数的变量
s_row school%ROWTYPE; -- 将传出参数赋值给s_row
begin
pro_cursor(s_cur); -- 执行过程
loop -- 循环结果
FETCH s_cur into s_row;
EXIT WHEN s_cur%NOTFOUND;
dbms_output.put_line(s_row.name);
end loop;
end;
1.5.2. java代码调用oracle函数
/**
* 返回结果为cursor
*/
public static void pro_cur() {
java.sql.Connection conn = null;
java.sql.CallableStatement stmt = null;
try {
conn = DaoUtil.getConnection();
stmt = conn.prepareCall("{ call pro_cursor(?) }"); //设置存储过程 call为关键字
stmt.registerOutParameter(1,OracleTypes.CURSOR);// 设置第一个输入参数
stmt.execute();//执行.
// 执行完毕后,从占位符中去对应的列就可以了
ResultSet resultSet = (ResultSet) stmt.getObject(1);
while (resultSet.next()){
String id = resultSet.getString("id");
String name = resultSet.getString("name");
System.out.println("序号" + id + "学校名" +
name);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
传智播客·黑马程序员郑州校区
高新区长椿路11号大学科技园(西区)东门8号楼三层
地铁一号线梧桐街站A口出
联系方式0371-56061160/61/62
ORACLE存储函数以及存储过程
文/传智播客郑州校区就业服务部
1. Java,PL/SQL调用
ORACLE存储函数以及存储过程1.1.1. 准备工作
· 创建表
--- 创建测试用表 school
CREATE TABLE school(
ID number, --学校id
NAME VARCHAR2(30) ---学校名
);
--- 添加数据
INSERT into school values(1,'北京大学');
INSERT into school values(2,'南京大学');
INSERT into school values(1,'东京大学');
COMMIT;
· 编写java代码连接数据库,获取Connection连接对象
public class OracleUtil {
// 加载Oracle驱动
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@iP:1521:orcl", "system",
"密码");
return connection;
}
}
1.1. ——-存储函数——-
·
1.什么是存储函数
·
存储函数又称为自定义函数。可以接收一个或多个参数,返回一个结果。在函数中我们可以使用PL/SQL进行逻辑的处理。
·
存储函数语法结构
CREATE [ OR REPLACE ] FUNCTION 函数名称
(参数名称 [in|out|in out] 参数类型,...)
RETURN
结果变量数据类型
IS
变量声明部分;
BEGIN
逻辑部分;
RETURN
结果变量;
[EXCEPTION
异常处理部分
END;
1.1.1. 创建函数
· 此处只是返回了一个varchar2的数据. 返回值可以为cursor,table.
--- 创建函数. 根据地址ID查询地址名称
CREATE OR REPLACE FUNCTION fn_getName(sid NUMBER)
RETURN VARCHAR2 --- 返回值类型
AS
r_name VARCHAR2(30); --- 声明变量
BEGIN
SELECT name INTO r_name FROM school WHERE id=sid; ---将查询的name 存储到r_name 中
RETURN r_name; -- 返回r_name
END;
1.1.2. PL/SQL调用oracle函数
--- PL/SQL调用过程 使用函数,传参 id = 2
select fn_getName(2) 学校 from dual;
java代码调用oracle函数
/**
* 调用ORACLE函数
*
* @param sid
*/
public static void getenamefun(int sid) {
String sname;
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
String sql = "{?=call fn_getName(?)}"; // 调用方式
CallableStatement fun = null;
try {
conn = OracleUtil.getConnection();
fun = conn.prepareCall(sql);
fun.setInt(2, sid);
fun.registerOutParameter(1, Types.VARCHAR);//注册传出参数类型
fun.execute();
sname = fun.getString(1); // 取返回的参数结果
System.out.println(sname);
} catch (SQLException e) {
e.printStackTrace();
}
}
1.2. ——-存储过程——-
· 1.什么是存储过程
存储过程是被命名的PL/SQL块,存储于数据库中,是数据库对象的一种。应用程序可以调用存储过程,执行相应的逻辑。
存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如
下:
1.存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过
传出参数返回多个值。
2.存储函数可以在select语句中直接使用,而存储过程不能。过程多数是
被应用程序所调用。
3.存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码
存储函数语法结构
CREATE [ OR REPLACE ] PROCEDURE 存储过程名称(参数名 类型,
参数名 类型,参数名
类型...)
IS|AS
变量声明部分;
BEGIN
逻辑部分
[EXCEPTION
异常处理部分
END;
注意:
1.参数只指定类型,不指定长度
2.过程参数的三种模式:
IN :传入参数(默认)
OUT :传出参数主要用于返回程序运行结果
IN OUT :传入传出参数
1.3. 一:不带传出参数
CREATE OR REPLACE PROCEDURE pro_insert(
ID NUMBER,
NAME VARCHAR2 ----注意这里不带长度,不能写成(VARCHAR(30))
)
AS
BEGIN
INSERT INTO school values(ID,NAME);
END;
1.3.1. PL/SQL调用过程
CALL pro_insert(4,'郑州大学');
· 1
1.3.2. java代码调用oracle函数
public static void callPr() {
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
try {
conn = OracleUtil.getConnection();
stmt = conn.prepareCall("{ call pro_insert(?,?) }"); //设置存储过程 call为关键字.
stmt.setInt(1, 4); //设置第一个输入参数
stmt.setInt(2, "郑州大学");//设置第二个输入参数
stmt.execute();//执行
} catch (SQLException e) {
e.printStackTrace();
}
}
1.4. 二:带传出参数
---. 带传出参数
CREATE OR REPLACE PROCEDURE pro_getCount(s_name VARCHAR2,s_count OUT NUMBER)
AS
BEGIN
SELECT COUNT(*) INTO s_count FROM school
WHERE name LIKE '%'||s_name||'%';
END;
1.4.1. PL/SQL调用过程
--- PL/SQL调用
declare
s_count number; --定义传出参数的变量
begin
pro_getCount('大学',s_count); --- 执行过程
DBMS_OUTPUT.put_line('查询结果,数量:'||s_count); ---打印结果
end;
1.4.2. java代码调用oracle函数
public static void pro_Gount(String name) {
java.sql.Connection conn = null;
java.sql.CallableStatement stmt = null;
try {
conn = DaoUtil.getConnection();
stmt = conn.prepareCall("{ call pro_getCount(?,?) }"); //设置存储过程 call为关键字.
stmt.setString(1, "大学"); //设置第一个输入参数
stmt.registerOutParameter(2,OracleTypes.NUMBER);// 设置第二个输入参数
stmt.execute();//执行.
// 执行完毕后,从占位符中去对应的列就可以了
int count = stmt.getInt(2);
System.out.println("查询结果" + count); // 4
} catch (SQLException e) {
e.printStackTrace();
}
}
1.5. 二:带传出参数
---- 返回值为游标
CREATE OR REPLACE PROCEDURE pro_cursor(s_cur OUT SYS_REFCURSOR)
AS
BEGIN
OPEN s_cur FOR SELECT * FROM school;
END;
1.5.1. PL/SQL调用过程
declare
s_cur SYS_REFCURSOR; -- 定义传出参数的变量
s_row school%ROWTYPE; -- 将传出参数赋值给s_row
begin
pro_cursor(s_cur); -- 执行过程
loop -- 循环结果
FETCH s_cur into s_row;
EXIT WHEN s_cur%NOTFOUND;
dbms_output.put_line(s_row.name);
end loop;
end;
1.5.2. java代码调用oracle函数
/**
* 返回结果为cursor
*/
public static void pro_cur() {
java.sql.Connection conn = null;
java.sql.CallableStatement stmt = null;
try {
conn = DaoUtil.getConnection();
stmt = conn.prepareCall("{ call pro_cursor(?) }"); //设置存储过程 call为关键字
stmt.registerOutParameter(1,OracleTypes.CURSOR);// 设置第一个输入参数
stmt.execute();//执行.
// 执行完毕后,从占位符中去对应的列就可以了
ResultSet resultSet = (ResultSet) stmt.getObject(1);
while (resultSet.next()){
String id = resultSet.getString("id");
String name = resultSet.getString("name");
System.out.println("序号" + id + "学校名" +
name);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
传智播客·黑马程序员郑州校区
高新区长椿路11号大学科技园(西区)东门8号楼三层
地铁一号线梧桐街站A口出
联系方式0371-56061160/61/62
相关文章推荐
- Java,PL/SQL调用 ORACLE存储函数以及存储过程
- pl/sql 编写 Oracle分页的存储过程 Java调用该过程
- java连接Oracle以及调用其中的存储过程与存储函数
- 【Oracle 】PL/SQL重用函数调用过程中PLS-307的错误
- oracle常用函数以及调用入参为record的存储过程的方法,
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- 在 PL/SQL 中调用存储过程 oracle
- 使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码
- jdbc的pl/sql的java调用存储过程
- java jdbc调用oracle的函数或过程返回SQL语句查询的结果集
- java下实现调用oracle的存储过程和函数
- Oracle 编写存储过程,在pl/sql中调用编写好的存储过程例子
- 使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码
- java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- oracle pl/sql应用解析以及存储过程对应到java中的调用方法
- 在java中调用pl/sql编写的存储过程
- Oracle pl/sql学习 之 子程序 过程和函数 存储过程 存储函数
- 存储过程的输出参数为游标,PL/SQL中如何调用 Java代码如何调用
- java下实现调用oracle的存储过程和函数