Java 응용 프로그램에서 PostgreSQL 저장 프로 시저를 호출하려고합니다. 프로 시저에는 DATE 유형 매개 변수가 있으므로 CallableStatement.setDate()에 java.sql.Date 유형을 사용하고 있습니다. 그러나, 항상 문을 실행하면 예외를 초래하고 SQL 로그는이 보여Java 및 PostgreSQL 저장 프로 시저 - 매개 변수에 문제가 발생하여 out 매개 변수로 등록 반환
LOG: execute <unnamed>: select * from athlete.create_athlete($1,$2,$3,$4,$5,$6,$7) as result
DETAIL: parameters: $1 = '', $2 = '[email protected]', $3 = 'Joe', $4 = 'Blow', $5 = 'foobar', $6 = 'M', $7 = '1979-03-22 -04:00:00'
ERROR: column "dob" is of type date but expression is of type text at character 122
HINT: You will need to rewrite or cast the expression.
QUERY: INSERT INTO athlete.athlete (email, first_name, last_name, password, gender, dob) VALUES ($1 , $2 , $3 , $4 , $5 , $6)
CONTEXT: PL/pgSQL function "create_athlete" line 2 at SQL statement
STATEMENT: select * from athlete.create_athlete($1,$2,$3,$4,$5,$6,$7) as result
저장 프로 시저 실제로 6 개 매개 변수가 있습니다 (그리고 위의 값을 $부터 2 $ 7 받아야한다) - 제 7 회는 반환 값을 등록에서 온다 out 매개 변수로 사용합니다. 이것은 나 혼란 스럽다 - 반환 값에 대한 out 매개 변수를 등록 할 때 7 개의 매개 변수로 나타나는 것이 맞습니까? 내가 반환 값은 첫 번째 매개 변수로 등록하는 인상을 해요 읽은 모든 문서에서
는 :
registerQuery = "{? = call athlete.create_athlete(?,?,?,?,?,?)}";
...
CallableStatement cs = conn.prepareCall(registerQuery);
cs.registerOutParameter(1, Types.BOOLEAN);
cs.setString(2, email);
...
오류는 위의 저장 사이에 불일치가 있다는 것을 나에게 제안 프로 시저 매개 변수 및 insert 문에 제공된 매개 변수 나는이 모든 것을 문서화했지만 분명히 잘못된 것을하고있다. 저장 프로 시저에 적절한 매개 변수를 제공하고 호출 후에 반환 값을 검색하려면 어떻게합니까?
전 저장 프로 시저 서명을 사용하고 있습니다. 문제가 아닌 것으로 판단됩니다. Date (날짜) 매개 변수를 전달하면 Date 열에 삽입하는 삽입을 위해 캐스팅해야합니다. – Matt
저장된 proc의 서명으로 질문을 업데이트 할 수 있습니까? –