المشكلة في مكالمة الإجراءات المخزنة هي أنني لم أهرب من الاقتباسات المزدوجة. لا يزال بناء الجملة يحتاج إلى عروض أسعار مزدوجة من أجل التعامل بشكل صحيح مع الحزمة والرقابة الأمامية. Mark Rotteveel ، كنت قريب. لا يمكنني استبدال اقتباسات واحدة للحصول على عروض أسعار مزدوجة. هذا ما نجح: cn.preparecall ("Call " _ sys_bic ".
خطأ في بناء الجملة استدعاء الإجراء المخزن في HANA مع JDBC
سؤال
أحصل على خطأ في بناء الجملة استدعاء إجراء مخزّن HANA. في محرر SQL في Hana Studio ، يعمل ، ولكن يجب أن يكون بناء الجملة مختلفًا عن التحضير في Java. أعتقد أنه الملاذ للأمام بعد اسم الحزمة ، ولكن لست متأكدًا مما يجب فعله حيال ذلك.
هل لأنني أنشأت الإجراء المخزن ضمن مجلد المحتوى؟ هل يجب بناؤه في مكان آخر؟
إليك الاتصال والمكالمة. الاتصال جيد
Class.forName("com.sap.db.jdbc.Driver");
String url = "jdbc:sap://10.9.9.139:30015/GL1";
String user = "userid";
String password = "password";
cn = java.sql.DriverManager.getConnection(url, user, password);
if (cn == null) {
System.out.println("failed");
}
cs = cn.prepareCall("call '_SYS_BIC'.'myPackaged/ZMM_PR_MATERIALS_GET'"); <---- THROWS EXCEPTION BELOW
rs = cs.executeQuery();
while(rs.next()) {
System.out.println(rs.getString(0));
}
} catch(Exception e) {
e.printStackTrace();
}
// this WORKS FINE... i get a connection and get some records.
// rs = cn.createStatement().executeQuery("SELECT * FROM MYSCHEMA.ORDERS");
// int i = 0;
// while (rs.next()) {
// System.out.println(String.format("rec %2d: %s=%2s", ++i, "ORDER_ID", rs.getString("ORDER_ID")));
// }
com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "_SYS_BIC": line 1 col 6 (at pos 6)
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.createException(SQLExceptionSapDB.java:334)
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.generateDatabaseException(SQLExceptionSapDB.java:174)
at com.sap.db.jdbc.packet.ReplyPacket.buildExceptionChain(ReplyPacket.java:104)
at com.sap.db.jdbc.ConnectionSapDB.execute(ConnectionSapDB.java:1106)
at com.sap.db.jdbc.CallableStatementSapDB.sendCommand(CallableStatementSapDB.java:1961)
at com.sap.db.jdbc.StatementSapDB.sendSQL(StatementSapDB.java:972)
at com.sap.db.jdbc.CallableStatementSapDB.doParse(CallableStatementSapDB.java:253)
at com.sap.db.jdbc.CallableStatementSapDB.constructor(CallableStatementSapDB.java:212)
at com.sap.db.jdbc.CallableStatementSapDB.<init>(CallableStatementSapDB.java:123)
at com.sap.db.jdbc.CallableStatementSapDBFinalize.<init>(CallableStatementSapDBFinalize.java:31)
at com.sap.db.jdbc.ConnectionSapDB.prepareCall(ConnectionSapDB.java:1295)
at com.sap.db.jdbc.trace.Connection.prepareCall(Connection.java:318)
at com.glazers.hana.utils.HanaStoredProcedure.execute(HanaStoredProcedure.java:54)
at com.glazers.hana.utils.HanaStoredProcedure.main(HanaStoredProcedure.java:20)
المحلول
لا تنتمي إلى StackOverflow