Oracle 存储过程—为数传递变量
发布时间:2020-12-31 04:53:59 所属栏目:站长百科 来源:网络整理
导读:oracle 存储过程的基本语法 create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 in out varchar2 )as v_name varchar2(20); begin v_name := ‘张三丰‘; p_para3 := v_name; dbms_output.put_line(‘p_para3:‘||p_para3
? ---调用2 begin proc_test(e_id => ‘dd‘,e_username => ‘A‘,e_password => ‘aa‘,e_sex => ‘d‘,e_sal => 1000); commit; end; --调用3 call proc_test(e_id => ‘dd‘,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_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,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) is begin open p_cursor for select * from userinfo; end; java中的调用: ? public static void select() throws ClassNotFoundException,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; (编辑:吉安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 华为手机耳机设置在何 华为手机耳机设置教程
- 美国十多所大学与Magic Leap合作,探索MR赋能教育学习
- 数字化如何影响地摊经济?其实地摊经营与数字化早已密不可分
- 华为开发者大会今日揭幕,EMUI 10.0系统将率先登场
- 首批HoloLens IVAS系统40219套,2021年交付美国陆军
- 网易港交所二次上市,能否伺机跻身互联网第一梯队?
- 午报 | ZARA母公司半年亏损15亿;董明珠说不希望奥克斯倒掉
- 外媒:软银和其他投资者拟向Uber自动驾驶部门投资10亿美元
- 谷歌宣布退出平板电脑领域 取消两款未发布产品
- Oracle Database - Overview of Database Patch Delivery M