【问题标题】:Call a Stored Procedure in HANA在 HANA 中调用存储过程
【发布时间】:2014-04-30 15:28:41
【问题描述】:

我正在尝试从我的 .xsjs 文件调用 java 中的存储过程。该过程获得 2 个输入参数并返回一个。我可以通过以下方式从 SQL 控制台毫无问题地调用它:

call "MYSCHEMA"."MyPackage.procedures::addUserC50" ('name', 'lastname', ?)

这是我的 .xsjs 文件中的代码,我认为它在 prepareCall 语句中失败了。我尝试了不同的组合(带和不带双引号,带和不带模式/包的名称,带和不带“(?,?,?)”,带和不带“{}”......但什么都没有有效,当我尝试执行它时,我总是收到 500 Internal server error。

有谁知道错误在哪里或者 prepareCall 方法的确切语法是什么?

var output = 0,
    query = "";
var conn;
var cstmt;

try {

    conn = $.db.getConnection();

    query = "{ call \"MYSCHEMA\".\"MyPackage.procedures/addUserC50\"(?,?,?) }";

    cstmt = conn.prepareCall(query); // <-- Fails
    cstmt.setString(1, userName);
    cstmt.setString(2, userLastname);

    cstmt.execute();

    output = cstmt.getInteger(3);

    conn.commit(); 

    $.response.status = $.net.http.OK;
    $.response.setBody("Successfully created: " + output);

}
catch (e) {
    $.response.status = $.net.http.BAD_REQUEST;
    $.response.setBody("0");

}
finally {
    if (cstmt !== null) 
        cstmt.close();
    if (conn !== null) 
        conn.close();
}

这是返回的错误:InternalError: dberror(Connection.prepareCall): 328 - invalid name of function or procedure: MyPackage.procedures/addUserC50: line 1 col 18 (at pos 17) at ptime/query/checker /check_call.cc:21

根据这个documentation,应该是这样的

var myCallableStatement = myconnection.prepareCall("{call myprocedure(?)}");

谢谢

【问题讨论】:

    标签: javascript stored-procedures hana


    【解决方案1】:

    我设法让它运行,这是有效的语法:

    query = "call \"MyPackage.procedures::addUserC50\"(?, ?, ?)";
    

    感谢您的帮助@shofmn

    【讨论】:

      【解决方案2】:

      调用失败可能有多种原因。如果您在 HTTP 响应中返回错误消息,则可以更轻松地调查您的错误。您可以轻松做到这一点:

      try {
         // Your code execution here
      }
      catch (e) {
         $.response.contentType = "text/html";
         $.response.setBody(e.name + ": " +  e.message));
      }
      

      如果错误消息不能帮助您解决问题,请将错误消息粘贴到此处,以便我们也更容易调查。

      【讨论】:

      • 这是返回的错误:InternalError: dberror(Connection.prepareCall): 328 - invalid name of function or procedure: MyPackage.procedures/addUserC50: line 1 col 18 (at pos 17) at ptime /query/checker/check_call.cc:21
      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多