加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle 存储过程—为数传递变量

发布时间:2020-12-31 20:06:28 所属栏目:站长百科 来源:网络整理
导读: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;

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读