存储过程问题,在本地但不在服务器上运行

时间:2011-03-28 13:49:15

标签: mysql sql stored-procedures mysql-error-1064

我对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 个答案:

答案 0 :(得分:3)

只是一个疯狂的猜测(我更像是Oracle而不是MySQL类型的人):
- 您是否在Java中声明参数错误? (my_id在存储过程中被声明为out参数,Java和MySQL中的签名是否匹配?)
- 如果从MySQL命令行界面调用过程会发生什么?

亲切的问候,弗兰克