2016-07-18 2 views
0

나는 CallableStatement와 Cursors를 사용하여 Student라는 테이블에서 레코드를 가져 와서 'A'에서 시작하는 pl/sql 프로 시저를 사용하여 프로그램을 생성했습니다. SQLException : java.sql.SQLException : 조작이 허가되어 있지 않은 경우 : 서수 바인딩과 네임 바인딩을 결합 할 수 없다 이 문제를 해결하기 위해 나를 도와주세요 ..sqlexception 서수 바인딩과 명명 된 바인딩을 생성하는 커서 프로그램을 결합 할 수 없습니다.

의 절차는 다음과 같습니다

create or replace procedure get_StudDetails(mycur out sys_refcursor,cond in varchar) 
as 
begin 
open mycur for 
select * from Student where stname like cond; 
end; 
/

자바 프로그램입니다 :

import java.sql.*; 
import oracle.jdbc.driver.*; 
class CursorTest 
{ 
public static void main(String s[]) 
{ 
try 
{ 
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","rt","pwdd"); 
CallableStatement cs=con.prepareCall("{call get_StudDetails(?,?)}"); 
cs.getString(2+"A%"); 
cs.registerOutParameter(1,OracleTypes.CURSOR); 
cs.execute(); 
System.out.println("procedure invoked"); 
ResultSet rs=(ResultSet)cs.getObject(1); 
while(rs.next()) 
{ 
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4)); 
} 
} 
catch(Exception e) 
{ 
e.printStackTrace(); 
} 
} 
} 

답변

1

대신 getString하지만 setString를 사용하지 마십시오 :

CallableStatement cs=con.prepareCall("{call get_StudDetails(?,?)}"); 
cs.registerOutParameter(1,OracleTypes.CURSOR); 
cs.setString(2, "A%"); 
cs.execute(); 
+0

thnnxx..for 돕기. – Vikalp

+0

@Vikalp 도움이된다면 대답을 수락하고 upvote하시기 바랍니다. – user272735

관련 문제