我正在尝试从我的.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。抄送:21
根据此文档,它应该类似于
var myCallableStatement = myconnection.prepareCall("{call myprocedure(?)}");
谢谢