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;
请问这个是哪里的错误,求救,谢谢,急急急,在线等
这个存储过程,没有任何的参数 展开
// 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;
请问这个是哪里的错误,求救,谢谢,急急急,在线等
这个存储过程,没有任何的参数 展开
4个回答
展开全部
存储过程应该要有返回参数,这样在程序中才能得到执行完存储过程后的数据,不然你调用这个存储过程是没办法得到数据的
追问
哦,那我加个返回参数试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
存储过程如果没有定义输出参数,就不能通过String testPrint = proc.getString(1);获取数据
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String testPrint = proc.getString(1); 这个你确定是proc.getString(1),不是proc.getString(0),rs.getString()?这边没环境没法测试具体的问题
追问
因为
System.out.println(proc.execute());
的结果就是false,那个存储过程就是一个查询语句,没有输入和输出参数,proc.getString(1),我试了,1,0都不行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
V_SQL := 'SELECT c.bumen_code '; 这select 语句怎么没有from table
追问
有,在后面拼装的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询