java调用oracle存储过程报错

publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubStringdriver="oracle... public static void main(String[] args) {
// TODO Auto-generated method stub
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.1.222:1521:wjzb";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "zhuangbei", "zhuangbei");
CallableStatement proc = null;
proc = conn.prepareCall("{ call P_TEST }");

proc.execute();
System.out.println(proc.execute());
String testPrint = proc.getString(1);
System.out.println("=testPrint=is="+testPrint);
}catch (SQLException ex2) {
ex2.printStackTrace();
}catch (Exception ex2) {
ex2.printStackTrace();
}
}
输出结果:
false
java.sql.SQLException: 无效的列索引

存储过程是
CREATE OR REPLACE PROCEDURE P_TEST ISV_SQL VARCHAR2(2000);
CURSOR CURSOR_1 IS select distinct d.classcode classcode , c.classname classname from plan_car d,plan_carstandard c where d.classcode=c.classcode order by d.classcode ;
BEGIN
V_SQL := 'SELECT c.bumen_code ';

FOR V_t IN CURSOR_1
LOOP
V_SQL := V_SQL || ',' || 'max(DECODE(classcode,''' || V_t.classcode ||
''',carnum)) as ' ||V_t.classname;
END LOOP;

V_SQL := V_SQL || ',max(atarget) atarget from plan_car c,plan_target a where a.bumen_code=c.bumen_code GROUP BY c.bumen_code ';
--DBMS_OUTPUT.PUT_LINE(V_SQL);
V_SQL := 'CREATE OR REPLACE VIEW RESULT AS '|| V_SQL;

execute immediate V_SQL; END;
请问这个是哪里的错误,求救,谢谢,急急急,在线等
这个存储过程,没有任何的参数
展开
 我来答
枫吣
2012-11-07 · TA获得超过190个赞
知道答主
回答量:50
采纳率:100%
帮助的人:64.7万
展开全部
存储过程应该要有返回参数,这样在程序中才能得到执行完存储过程后的数据,不然你调用这个存储过程是没办法得到数据的
追问
哦,那我加个返回参数试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Nodo_cn
2012-11-16 · 超过10用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:15.2万
展开全部
存储过程如果没有定义输出参数,就不能通过String testPrint = proc.getString(1);获取数据
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
起啥名c9
2012-11-07 · TA获得超过129个赞
知道小有建树答主
回答量:290
采纳率:0%
帮助的人:122万
展开全部
String testPrint = proc.getString(1); 这个你确定是proc.getString(1),不是proc.getString(0),rs.getString()?这边没环境没法测试具体的问题
追问
因为
System.out.println(proc.execute());

的结果就是false,那个存储过程就是一个查询语句,没有输入和输出参数,proc.getString(1),我试了,1,0都不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
法澜59
2012-11-07
知道答主
回答量:66
采纳率:0%
帮助的人:15.4万
展开全部
V_SQL := 'SELECT c.bumen_code '; 这select 语句怎么没有from table
追问
有,在后面拼装的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式