存储过程 --- 2 --- 结合代码案例
来源:互联网 发布:量化投资python为工具 编辑:程序博客网 时间:2024/06/04 01:23
--1.无参数存储过程
--对应的存储过程create or replace procedure sequence_proc1 AS
RES_ORDER_NO VARCHAR2(22);
begin
--delete dept where deptno='11';
--select * from dept where deptno='11';
--任意表中插入一个数据或增加改变一个数字,调用后用于验证存储过程运行了
insert into dept(deptno) values('11');
commit;
SELECT TO_CHAR(SYSDATE, 'YYMMDD') into RES_ORDER_NO FROM DUAL;
dbms_output.put_line(RES_ORDER_NO);
END;
--删除存储过程
drop procedure sequence_proc1 ;
--编写 PL/SQL块验证过程:查看存储过程的运行->在PL/SQL工具中窗口中的输出页面查看输出结果
begin
sequence_proc1;
end;
public void storedProcedureTest1() throws SQLException, ClassNotFoundException { //JDBC调用存储过程: CallableStatement在Java里面调用存储过程,写法那是相当的固定: Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@User-PC:1521:XE","scott","tiger"); //sequence_proc1是要调用的存储过程的名字 CallableStatement cstmt = conn.prepareCall("{call sequence_proc1}"); //执行 cstmt.execute(); //用完后关闭,后开先关 if(cstmt != null){ cstmt.close(); } if(conn != null){ conn.close(); }}--2.有参数返回的存储过程
--对应的存储过程
create or replace procedure sequence_proc2(RES_ORDER_NO OUT VARCHAR2) AS
RES_ORDER_NO1 VARCHAR2(22);
begin
SELECT TO_CHAR(SYSDATE, 'YYMMDD') as RES_ORDER_NO1 into RES_ORDER_NO FROM DUAL;
END;
--删除存储过程
drop procedure sequence_proc2 ;
--编写 PL/SQL块验证过程:查看存储过程的运行->在PL/SQL工具中窗口中的输出页面查看输出结果
declare
RES_ORDER_NO varchar2(20);
begin
sequence_proc2(
RES_ORDER_NO);
Dbms_output.put_line('出库日期:'||RES_ORDER_NO);
end;
public void storedProcedureTest2() throws SQLException, ClassNotFoundException { //JDBC调用存储过程: CallableStatement在Java里面调用存储过程,写法那是相当的固定: Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@User-PC:1521:XE","scott","tiger"); //sequence_proc2是要调用的存储过程的名字,存储过程的1个参数,用1个?号占位符代替*其余地方写法固定 CallableStatement cstmt = conn.prepareCall("{call sequence_proc2(?)}"); /** * 告诉JDBC,这些个参数,哪些是输出参数,输出参数的类型用java.sql.Types来指定 * 下面的意思是, * 第1个?是输出参数,类型是VARCHAR的 * Types后面具体写什么类型,得看你的存储过程参数怎么定义的 * */ cstmt.registerOutParameter(1, Types.VARCHAR); //执行 cstmt.execute(); //把第1个参数的值当成String类型拿出来 String dateString = cstmt.getString(1); System.out.println(dateString); //用完后关闭,后开先关 if(cstmt != null){ cstmt.close(); } if(conn != null){ conn.close(); }}--3.仅有输入参数的存储过程
--对应的存储过程
create or replace procedure sequence_proc3(RES_ORDER_NO IN dept.dname%TYPE) AS
DEPTNO VARCHAR2(14);
begin
--delete dept where deptno='11';
--select * from dept where deptno='10';
--任意表中插入一个数据或改变一个值,调用后用于验证存储过程运行了
UPDATE DEPT SET DNAME=RES_ORDER_NO WHERE DEPTNO='10';
commit;
dbms_output.put_line(RES_ORDER_NO);
END;
--删除存储过程
drop procedure sequence_proc3 ;
--编写 PL/SQL块验证过程:查看存储过程的运行->在PL/SQL工具中窗口中的输出页面查看输出结果
declare
RES_ORDER_NO varchar2(20);
begin
RES_ORDER_NO:='XIAOFENG';
sequence_proc3(RES_ORDER_NO);
end;
public void storedProcedureTest3() throws SQLException, ClassNotFoundException { //JDBC调用存储过程: CallableStatement在Java里面调用存储过程,写法那是相当的固定: Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@User-PC:1521:XE","scott","tiger"); //sequence_proc3是要调用的存储过程的名字,存储过程的1个参数,用1个?号占位符代替*其余地方写法固定 CallableStatement cstmt = conn.prepareCall("{call sequence_proc3(?)}"); /** * 在我这里第1个?是输入参数 * 下面是设置他们的值,第一个设为"iloveyou" */ cstmt.setString(1, "iloveyou"); //执行 cstmt.execute(); //用完别忘给人家关了,后开的先关 if(cstmt != null){ cstmt.close(); } if(conn != null){ conn.close(); }}--4.既有输入参数又有输出参数的存储过程
create or replace procedure sequence_proc4(param1 IN number,param2 IN number,param3 out number,param4 IN OUT dept.dname%TYPE) AS
begin
param3 := param1 + param2 ;
--delete dept where deptno='11';
--select * from dept where deptno='10';
--任意表中插入一个数据或改变一个值,调用后用于验证存储过程运行
UPDATE DEPT SET DNAME=param4 WHERE DEPTNO=param3;
commit;
dbms_output.put_line(param3);
dbms_output.put_line(param4);
EXCEPTION
WHEN OTHERS THEN
param3 := 01;
param4 := '失败!';
ROLLBACK;
END;
--删除存储过程
drop procedure sequence_proc4 ;
--编写 PL/SQL块验证过程:查看存储过程的运行->在PL/SQL工具中窗口中的输出页面查看输出结果
declare
param1 number;
param2 number;
param3 number;
param4 VARCHAR2(14);
begin
param1:=0;
param2:=10;
param4:='abccc';
sequence_proc4(param1,param2,param3,param4);
end;
public void storedProcedureTest4() throws SQLException, ClassNotFoundException { //JDBC调用存储过程: CallableStatement在Java里面调用存储过程,写法那是相当的固定: Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@User-PC:1521:XE","scott","tiger"); //sequence_proc4是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替*其余地方写法固定 CallableStatement cstmt = conn.prepareCall("{call sequence_proc4(?,?,?,?)}"); /** * 告诉JDBC,这些个参数,哪些是输出参数,输出参数的类型用java.sql.Types来指定 * 下面的意思是, * 第3个?和第4个?是输出参数,类型是INTEGER与VARCHAR * Types后面具体写什么类型,得看你的存储过程参数怎么定义的 * */ cstmt.registerOutParameter(3, Types.INTEGER); cstmt.registerOutParameter(4, Types.VARCHAR); /** * 在我这里第1个?和第2个?是输入参数,第3个是输出参数,第4个既输入又输出 * 下面是设置他们的值,第一个设为0,第二个设为00,第4个设置为"iloveyou" * 没设第3个,因为它是输出参数*/ cstmt.setInt(1, 0); cstmt.setInt(2, 10); cstmt.setString(4, "iloveyouiloveyouiloveyouiloveyouiloveyouiloveyou"); //执行 cstmt.execute(); //把第3个参数的值当成int类型拿出来 int three = cstmt.getInt(3); //把第4个参数的值当成int类型拿出来 String four = cstmt.getString(4); System.out.println("修改了id为" + three + "的姓名,修改为了:" + four); //用完别忘给人家关了,后开的先关 if(cstmt != null){ cstmt.close(); } if(conn != null){ conn.close(); }}
希望对你有帮助,祝你有一个好心情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充;转载请注明出处!
1 0
- 存储过程 --- 2 --- 结合代码案例
- asp.net 结合mysql存储过程进行分页代码
- asp.net 结合mysql存储过程进行分页代码
- 存储过程案例
- nysql 存储过程案例
- mysql存储过程案例
- 存储过程 mysql 案例
- Mysql存储过程案例
- oracle中的存储过程案例
- 存储过程与事务案例
- 简单的存储过程案例
- oracle 存储过程初学案例
- 结合存储过程开发数据库应用程序
- 结合存储过程开发数据库应用程
- 结合存储过程开发数据库应用程序
- 结合存储过程自定义Datagrid分页功能
- ASP与存储过程结合运用
- 结合存储过程开发数据库应用程
- Problem B: 平面上的点——Point类 (II)
- BZOJ 2648 SJY摆棋子 K-D Tree
- NYOJ 304 DP
- Problem C: 平面上的点——Point类 (III)
- Problem D: 平面上的点——Point类 (IV)
- 存储过程 --- 2 --- 结合代码案例
- Problem E: 平面上的点——Point类 (V)
- Problem F: 平面上的点——Point类 (VI)
- Problem A: 类的初体验
- JAVA的静态绑定与动态绑定
- Problem B: 类的初体验(II)
- Problem C: 类的初体验(III)
- Problem C: 分数类的输出
- Github全面详解-09 使用issues