خطأ في بناء الجملة استدعاء الإجراء المخزن في HANA مع JDBC

StackOverflow https://stackoverflow.com/questions/19845652

  •  29-07-2022
  •  | 
  •  

سؤال

أحصل على خطأ في بناء الجملة استدعاء إجراء مخزّن 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)
هل كانت مفيدة؟

المحلول

المشكلة في مكالمة الإجراءات المخزنة هي أنني لم أهرب من الاقتباسات المزدوجة. لا يزال بناء الجملة يحتاج إلى عروض أسعار مزدوجة من أجل التعامل بشكل صحيح مع الحزمة والرقابة الأمامية. Mark Rotteveel ، كنت قريب. لا يمكنني استبدال اقتباسات واحدة للحصول على عروض أسعار مزدوجة. هذا ما نجح: cn.preparecall ("Call " _ sys_bic ".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top