繁体   English   中英

oracle程序包中包含的调用过程

[英]Call procedure included in oracle package

我已经在Oracle数据库中创建了一个包含几个过程的程序包,现在我想从Java程序中调用过程需要两个输入参数并且什么都不返回。

请帮我这样做,我一直在使用下面的连接来连接数据库:

String i =username.getText(); 
String j =psswd.getText();
String k = sid.getText();
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@ora211g.home.com:1654:ora11g",username,password);
st =  con.createStatement();
rs =st.executeQuery("SELECT DISTINCT SUBJECT_AREA FROM REP_SUBJECT");

这件事工作正常,现在我如何通过传递一些参数(例如两个字符串值)来调用过程

这篇有用的博客文章将为您提供帮助

http://jameajudo.blogspot.com.br/2009/03/call-procedure-oracle-with-java-and.html

他使用的示例是:

String command = "{call SALDOS(?,?)}"; 
CallableStatement cstmt = con.prepareCall (command);
cstmt.registerOutParameter(2, Types.DECIMAL);

cstmt.execute();

2这就是你想要的

st =  con.prepareStatement("SELECT DISTINCT SUBJECT_AREA FROM REP_SUBJECT WHERE A = ? AND B = ?");
st.setString(1, "val1");
st.setString(2, "val2");
rs =st.executeQuery();

使用con.prepareCall()

然后使用返回的CallableStatement对象设置参数和执行。

在这里,我得到了问题的解决方案,因此想到了将其发布在这里,以便每个人都可以详细了解:

     Connection con = null;
       ResultSet rs = null;
       Statement st = null;
    Class.forName = Class.forName("oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection( "jdbc:oracle:thin:@host:port:SID);

CallableStatement csmt = con.prepareCall("{call PACKAGE_NAME.PROCEDURE_NAME(?,?,?,?)}");
                        csmt.setString(1,"abc");
                        csmt.setString(2,"def");
                        csmt.setString(3,"ghi");
                        csmt.registerOutParameter(4,java.sql.Types.VARCHAR);
                        csmt.execute();
                        String message =csmt.getString(4);

这里 '?' 指示过程中输入和输出参数的数量。 我有3个输入和1个输出参数,所以数量为'?' 在程序中是4。

索引从1,2,3 ....开始

我的前三个输入参数是一个字符串,所以我使用以下命令将它们传递给过程:

                            csmt.setString(1,"abc");
                            csmt.setString(2,"def");
                            csmt.setString(3,"ghi");

我的过程返回字符串,所以为了首先在Java中接收到它,我必须注册out参数,所以我使用以下命令做了同样的事情:

csmt.registerOutParameter(4,java.sql.Types.VARCHAR); /*4 becuase out parameter is 4th*/

然后我执行了可调用语句,然后我收到了从过程返回到

字符串消息= csmt.getString(4);

享受..... \\ M /

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM