Проблема с хранимой процедурой, работает на локальном сервере, но не на сервере - PullRequest
0 голосов
/ 28 марта 2011

У меня странная проблема с хранимой процедурой MySQL.

Я написал простую хранимую процедуру следующим образом:

{

    DELIMITER $$

    CREATE DEFINER=`username`@`%` PROCEDURE `sp_create_my_log`(IN source TEXT,
      OUT my_id INT)
    BEGIN
      --
      -- insert record and return primary key
      INSERT INTO my_log (source) VALUES (source);
      SET my_id = LAST_INSERT_ID();

      COMMIT;
    END
}

Эта хранимая процедура работает абсолютно нормально на моей локальной машине (MySQL Server 5.1, Windows XP).Но когда я пытаюсь запустить его на сервере, я получаю следующую ошибку:

java.sql.SQLException: Parameter index of 2 is out of range (1, 0)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
    at com.mysql.jdbc.CallableStatement$CallableStatementParamInfo.checkBounds(CallableStatement.java:274)
    at com.mysql.jdbc.CallableStatement.checkParameterIndexBounds(CallableStatement.java:710)
    at com.mysql.jdbc.CallableStatement.checkIsOutputParam(CallableStatement.java:672)
    at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:1846)
    at org.apache.commons.dbcp.DelegatingCallableStatement.registerOutParameter(DelegatingCallableStatement.java:95)
    at org.apache.commons.dbcp.DelegatingCallableStatement.registerOutParameter(DelegatingCallableStatement.java:95)
    at com.mycomp.myprj.importer.ImporterImpl.onPreLoad(ImporterImpl.java:160)
    at com.mycomp.myprj.importer.csv.FileImporter.load(FileImporter.java:43)
    at com.mycomp.myprj.importer.csv.MyImporter.main(MyImporter.java:82)
0.843 seconds

Есть идеи, почему это происходит?

1 Ответ

3 голосов
/ 28 марта 2011

Просто дикая догадка (я скорее Oracle, чем парень типа MySQL):
- Возможно, вы объявили свой параметр в Java неправильно? (my_id объявлен как параметр out в хранимой процедуре, совпадают ли подписи в Java и MySQL?)
- Что произойдет, если вы вызовете свою процедуру из интерфейса командной строки MySQL?

С уважением, Фрэнк

...