Oracle 存储过程
来源:互联网 发布:java冒泡排序代码详解 编辑:程序博客网 时间:2024/06/14 11:02
一、在学习存储过程之前,先学一些Oracle sql编程的基础知识---
--1. 语句块的定义
declare -- 变量声明 var1 number(2); -- 仅声明 var2 char(2) := 'var2'; -- 在声明的同时初始化begin -- 语句end; -- 语句块结束
--2. if语句
if a = 1 or b = 2 then elsif c = 3 thenelse end if;
--3. case分支控制语句
这里的dbms_output.put_line() 是输出的方法,在dos里需要在这之前输入set serveroutput on;才会输出相应的信息
declarenum number(10) := 11;begin case when num = 10 then dbms_output.put_line( '我是10'); when num = 11 then dbms_output.put_line( '我是11'); else dbms_output.put_line( '我不知道我是谁了'); end case; case num when 0 then dbms_output.put_line( '我是10'); when 1 then dbms_output.put_line( '我是11'); else dbms_output.put_line( '我不知道我是谁了'); end case;end;
--4. for 循环
--for循环主要有两个用处。
--4.1、 循环一个范围 declare i number(2); begin for i in 0 .. 9 loop dbms_output.put_line('i:' || i); end loop; end;-- 4.2、遍历隐式游标 --隐式游标的好处是不需要手动关闭,方便BEGIN FOR re IN (SELECT username FROM userinfo) LOOP DBMS_OUTPUT.PUT_LINE(re.username); END LOOP;END;
二、下面是存储过程的使用:
我这里创建了一个表userinfo,
-- Create table创建表create table userinfo( id varchar2(32) not null, username varchar2(20), password varchar2(20), sex varchar2(2), sal number(20), insertdate date default sysdate);-- Add comments to the columns comment on column userinfo.id is 'id';comment on column userinfo.username is '用户名';comment on column userinfo.password is '密码';comment on column userinfo.sex is '性别'; comment on column userinfo.sal is '工资'; comment on column userinfo.insertdate is '插入时间';
2.1创建插入数据的存储过程并调用
CREATE OR REPLACE--创建存储过程,如果存在就更新,不存在就创建,插入一条数据procedure proc_test(e_id in varchar, e_username in varchar, e_password in varchar, e_sex in varchar, e_sal in number)--这里的参数不要限定长度,否则会错误 isbegin insert into userinfo (id, username, password, sex, sal) values (e_id, e_username, e_password, e_sex, e_sal);end; --调用1DECLARE id varchar(32); username varchar(20); password varchar(20); sex varchar(2); sal number(20);BEGIN id := 'asdfasdfa'; username := 'text11'; password := 'pas'; sex := '男'; sal := 2000; proc_test(e_id => id, e_username => username, e_password => password, e_sex => sex, e_sal =>sal); commit;END;select * from userinfo;--查看数据插入成功
---调用2begin proc_test(e_id => 'dd', e_username => 'A',e_password => 'aa', e_sex => 'd',e_sal => 1000); commit;end;--调用3call proc_test(e_id => 'dd', e_username => 'A',e_password => 'aa', e_sex => 'd',e_sal => 1000);commit;
java中的调用:
public static void insert() throws ClassNotFoundException, SQLException {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String name = "user2";String pwd = "user2";String Drivername = "oracle.jdbc.driver.OracleDriver";Class.forName(Drivername);Connection connection = DriverManager.getConnection(url, name, pwd);CallableStatement call = connection.prepareCall("call PROc_TEST(e_id => 'dd', e_username => 'A',e_password => 'aa', e_sex => 'd',e_sal => 1000)");// 执行存储过程boolean b = call.execute();if (b = true) {System.out.println("插入成功!");}connection.close();}
--2. 创建带返回参数的
--in是输入入的参数,out是输出的参数 CREATE OR REPLACE procedure proc_test1(t in varchar, r out varchar) as begin select count(*) into r from userinfo where username like t; end;--调用, --在dos里执行多行语句是以'/'表示结束 DECLARE outobj VARCHAR2(4); BEGIN proc_test1(t => 'A',r => outobj ); dbms_output.put_line('outobj = ' || outobj); END;
java中的调用:
public static void one() throws ClassNotFoundException, SQLException {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String name = "user2";String pwd = "user2";String Drivername = "oracle.jdbc.driver.OracleDriver";Class.forName(Drivername);Connection conn = DriverManager.getConnection(url, name, pwd);CallableStatement proc = conn.prepareCall("{ call PROC_TEST1(?,?) }"); // 存储过程proc.setString(1, "%A%");// 设置第一个参数输入参数proc.registerOutParameter(2, Types.VARCHAR);// 第二个参数输出参数,是VARCHAR类型的proc.execute();// 执行String testPrint = proc.getString(2);// 获得输出参数System.out.println("=用户名包含A的个数为=" + testPrint);conn.close();}
--3.创建带查询结果的
--3. 由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,--3.1, 建一个程序包。如下:create or replace package testpackage as type test_cursor is ref cursor;end;--3.2,建立存储过程,存储过程为:create or replace procedure testc(p_cursor out testpackage.test_cursor) isbegin open p_cursor for select * from userinfo;end;
java中的调用:
public static void select() throws ClassNotFoundException, SQLException {String url = "jdbc:oracle:thin:@localhost:1521:orcl";String name = "user2";String pwd = "user2";String Drivername = "oracle.jdbc.driver.OracleDriver";Class.forName(Drivername);Connection conn = DriverManager.getConnection(url, name, pwd);CallableStatement proc = conn.prepareCall(" call testc(?) "); // 存储过程proc.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);// 设置输出参数是一个游标.第一个参数,游标类型proc.execute();// 执行ResultSet rs = (ResultSet) proc.getObject(1); // 获得第一个参数是一个游标,转化成ResultSet类型while (rs.next()) // 获得数据{System.out.println("id:" + rs.getString("id") + "\tusername:"+ rs.getString("username") + "\tinsertdate:"+ rs.getString("insertdate"));}}
4.创建可以调用其他存储过程的存储过程
-------------------------- 3.实例create or replace procedure sp_name(defaultVar in varchar2 default 'A') -- 默认参数,如果不传,要注意参数的顺序 as -- 变量声明,每个声明用分号结束。可以在声明的同时初始化 robj varchar2(4); var2 number(20) := 123;begin -- 字符串拼接用 || dbms_output.put_line('isok:' || 'abc'); -- 调用其他存储过程 proc_test1(T => 'A', R => robj); dbms_output.put_line('R = ' || R);end; -- 存储过程结束--调用begin sp_name('A');end;
存储过程介绍和使用实例介绍完毕,这里还需要了解到包和游标的使用,我会在以后的时间里写到我的博客中的,谢谢!
0 0
- Oracle:存储过程,存储函数
- Oracle-存储过程 存储函数
- Oracle存储过程、存储函数
- oracle 存储函数,存储过程
- Oracle存储过程
- 调试oracle存储过程。
- ORACLE 存储过程实战
- Oracle 存储过程
- oracle存储过程使用
- Oracle 创建存储过程
- 调试oracle存储过程
- oracle java存储过程
- 创建Oracle存储过程
- 加密oracle存储过程
- oracle存储过程分页
- oracle存储过程笔记
- ORACLE存储过程--注意事项
- oracle procedure 存储过程
- 手机端弹出层:Layer Mobile API文档手册v1.2
- 解决无权限访问从硬盘中桌面文件的问题
- ZOJ 1151--(字符反转,重点在字符的输入)
- 读书笔记:《写给大家看的设计书》
- Spring Integration入门
- Oracle 存储过程
- android 播放局域网共享多媒体文件
- 两点间距离 杭电2001
- 博弈学习 (二) 斐波那契博弈
- cuda6.5/7.0与QT5.4的安装问题
- 不安装oracle服务器,配置监听的方法
- 【FFmpeg】ffplay播放rtsp视频流花屏问题
- php实现的一个简单json rpc框架实例
- libsvm中参数c与g的调整