2016-11-29 1 views
0

안녕하세요 다음과 같은 데이터를 삽입하는 패키지에 프로 시저를 작성했습니다 :오라클 숫자 또는 값 오류 PL/SQL

create or replace package Proj2_student_reg_package is 
    type data_cursor is ref cursor; 

procedure add_students(sidIn IN students.sid%type, fnameIn IN students.firstname%type, 
         lnameIn IN students.lastname%type, statusIn IN students.status%type, 
         gpaIn IN students.gpa%type, emailIn IN students.gpa%type, 
         ret_message OUT varchar2); 

end Proj2_student_reg_package; 
/

create or replace package body Proj2_student_reg_package as 

procedure add_students(sidIn IN students.sid%type, fnameIn IN students.firstname%type, 
         lnameIn IN students.lastname%type, statusIn IN students.status%type, 
         gpaIn IN students.gpa%type, emailIn IN students.gpa%type, 
         ret_message OUT varchar2) 
is 
begin 
insert into students values(sidIn ,fnameIn,lnameIn,statusIn,gpaIn,emailIn); 
COMMIT; 
ret_message := 'Success'; 

EXCEPTION 
WHEN OTHERS THEN 
ret_message := 'Error'; 
end add_students; 




end Proj2_student_reg_package; 
​ 

을 나는 자바 프로그램을 통해 호출 오전 :

import java.sql.CallableStatement; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.sql.Types; 
import java.util.Scanner; 

import oracle.jdbc.OracleTypes; 
import oracle.jdbc.pool.OracleDataSource; 

public class AddStudent { 
    public void addStudent(){ 
     Scanner line = new Scanner(System.in); 
     try 
     {  

      //Connection to Oracle server 
      OracleDataSource ds = new oracle.jdbc.pool.OracleDataSource(); 
      ds.setURL("jdbc:oracle:thin:@localhost:1521:xe"); 
      Connection conn = ds.getConnection("*****", "****"); 

      System.out.print("Enter the sid: "); 
      String sid = line.next(); 
      System.out.print("Enter first name: "); 
      String fname = line.next(); 
      System.out.print("Enter last name: "); 
      String lname = line.next(); 
      System.out.print("Enter status: "); 
      String status = line.next(); 
      System.out.print("Enter gpa: "); 
      String gpa = line.next(); 
      System.out.print("Enter email: "); 
      String email = line.next(); 


      CallableStatement cs = conn.prepareCall("{call Proj2_student_reg_package.add_students(?,?,?,?,?,?,?)}"); 

      cs.setString(1, sid); 
      cs.setString(2, fname); 
      cs.setString(3, lname); 
      cs.setString(4, status); 
      cs.setString(5, gpa); 
      cs.setString(6, email); 
      cs.registerOutParameter(7, Types.VARCHAR); 

      cs.executeQuery(); 
      System.out.println(cs.getString(7)); 
      cs.close(); 
      //line.close(); 
     } 
     catch (SQLException e) { System.out.println("SQLException " + e.getMessage());} 
     catch (Exception e) {System.out.println(e);} 
    } 

} 

학생들 테이블이다 : 나는 SID로 자바 프로그램에서 값을주고있다

create table students (sid char(4) primary key check (sid like 'B%'), 
firstname varchar2(15) not null, lastname varchar2(15) not null, status varchar2(10) 
check (status in ('freshman', 'sophomore', 'junior', 'senior', 'graduate')), 
gpa number(3,2) check (gpa between 0 and 4.0), email varchar2(20) unique); 

: B987, fname : akki, lname : aror, satus : junior , gpa : 3,email : [email protected]

그러나이 나에게 오류를주고는 :

SQLException ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 1 

나는 너무 많이 찾는 시도했지만 실수가 어디 있는지 알아낼 수 없었다. 누구나 실수를 말하면서 오류를 해결할 수 있습니까? 당신의 CallableStatementcs 객체에서

+0

'sid'는'char (4)'이지만 5 문자 문자열을 보내려고합니다. 이 특정 오류가 발생할 수도 있고 그렇지 않을 수도 있지만 문제가 될 수 있습니다. –

+0

또한 게시물의 코드와 데이터를 올바르게 포맷하려면 시간이 필요합니다. 누군가의 도움을 요청할 때, 그들이 당신을 도울 수 있도록하십시오. –

+0

@JimGarrison 내가 잘못 입력했습니다. B987로 시드로 보내고 있습니다. – Akshay

답변

1

, 당신은 cs.setString(5, gpa)에서 gpa 데이터베이스에 number 유형 cs.setDouble(5, gpa);로 변경해야합니다.

+0

시도했지만 오류가 해결되지 않았습니다. 나는 gpa를 문자열로 선언하고 문자열로 보내는 것으로 프로 시저에서 % type으로 변환되기 때문에 이것이 문제라고 생각하지 않습니다. – Akshay

+0

당신의 삽입 포화를보세요 :'학생들의 값 (sidIn, fnameIn, lnameIn, statusIn, gpaIn, emailIn)에 삽입하십시오. '거기에 변환이 없으므로 위의 그림과 같이 setDouble로 gpa를 전달해야합니다. – developer

+0

오류가 수정되지 않았습니다. 나는 gpa를 입력으로 사용하고있다. – Akshay

관련 문제