在HANA中调用存储过程

时间:2014-04-30 15:28:41

标签: javascript stored-procedures hana

我试图从我的 .xsjs文件中调用java中的存储过程。该过程获得2个输入参数并返回一个。我可以通过编写SQL控制台来调用它:

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

这是我的 .xsjs文件中的代码,我认为它在 prepareCall 语句中失败了。我尝试了不同的组合(有和没有双引号,有和没有架构/包的名称,有和没有“(?,?,?)”,有和没有“{}”....但没有当我尝试执行它时,我总是得到500内部服务器错误。

有人知道错误的位置或 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 - 函数或过程的名称无效:MyPackage.procedures / addUserC50:第1行第18行(位于第17位)ptime / query / checker /check_call.cc:21

根据这个documentation,它应该是

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

谢谢

2 个答案:

答案 0 :(得分:3)

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

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

感谢您的帮助@shofmn

答案 1 :(得分:2)

呼叫失败可能有不同的原因。如果在HTTP响应中返回错误消息,则可以更轻松地调查错误。你可以很容易地做到这一点:

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

如果错误消息无法帮助您解决问题,请在此处粘贴错误消息,以便我们更容易进行调查。