不会吧,一天了,没有一个人帮助我。
大家帮我看一下吧。
可能是我的数据存储写错了。我只是想取出select username into v_username from all_users where user_id = 5 ;
里面的v_username,然后用java调用数据存储,把他取出来,
大家帮我看一下吧。
可能是我的数据存储写错了。我只是想取出select username into v_username from all_users where user_id = 5 ;
里面的v_username,然后用java调用数据存储,把他取出来,
cs.execute();
user=cs.getString("username");
我看到有介绍如果要有返回值,必须这样("? ={call all_users_seleproc}");你这种方法我也试过,好象不行。今天休息,由于现在没有环境,没法调试了。数据存储不能有返回值,我怎么才能用
程序取得我要的值。
eg:
TYPE type_varchar IS TABLE OF VARCHAR2(80) INDEX BY BINARY_INTEGER
如果取出来的话,结果v_username=system,不知道怎么搞的,取不出来。
( result out varchar2
) is
v_username all_users.username%type;
begin
select username into v_username from all_users
where user_id = 5 ;
result := v_username ;
end all_users_seleproc;
SQLException: ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'ALL_USERS_SELEPROC' 时参数数量或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored没有错误啊
如果我把它改成我写的程序
CallableStatement cs = con.prepareCall( "? ={call all_users_seleproc}");
cs.registerOutParameter(1, java.sql.Types.INTEGER); cs.executeQuery();
他也保错误:
Exception in thread "main" java.lang.NullPointerException
at oracle.jdbc.ttc7.TTCAdapter.newTTCType(TTCAdapter.java:270)
at oracle.jdbc.ttc7.TTCAdapter.createNonPlsqlTTCColumnArray(TTCAdapter.j
ava:256)
at oracle.jdbc.ttc7.TTCAdapter.createNonPlsqlTTCDataSet(TTCAdapter.java:
231)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1269)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:738
)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.ja
va:1313)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.jav
a:1232)
at oracle.jdbc.driver.OracleStatement.doExecuteWithBatch(OracleStatement
.java:1353)
at oracle.jdbc.driver.OracleStatement.doExecute(OracleStatement.java:176
0)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStateme
nt.java:1805)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepar
edStatement.java:322)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePrepare
dStatement.java:280)
at testDB.main(testDB.java:3
cs.registerOutParameter(1,Types.VARCHAR);
cs.execute();
user=cs.getString(1);
CallableStatement cs = con.prepareCall("{call all_users_seleproc(?)}");cs.execute();
String user=cs.getString("username");D:\test>java testDB
SQLException: ORA-01008: 并非所有变量都已关联
CallableStatement cs = con.prepareCall("{call all_users_seleproc(?)}");
cs.registerOutParameter(1, java.sql.Types.INTEGER);
cs.executeQuery();D:\test>java testDB
SQLException: ORA-06502: PL/SQL: 数字或值错误 : 字符到数值的转换错误
ORA-06512: 在line 1
好象存储还不对。
cs.registerOutParameter(1,Types.VARCHAR);
cs.execute();
user=cs.getString(1);按照我的写,
cs.executeQuery();可能我用的这句话不对。
为了表示感谢给你介绍本书:
http://javaalmanac.com/egs/?里面有很多的例子可以查阅。
ResultSet rs = cs.executeQuery();executeQuery与execute区别是什么?
建议看看Oracle PL/SQL 这本书。