Domanda

Sto ricevendo un errore di sintassi che chiama una procedura memorizzata HANA. Nell'editor SQL in Hana Studio funziona, ma la sintassi deve essere diversa per la preparazione in Java. Penso che sia la barra in avanti dopo il nome del pacchetto, ma non sono sicuro di cosa fare al riguardo.

È perché ho creato la procedura memorizzata nella cartella del contenuto? Dovrebbe essere costruito da qualche altra parte?

Ecco la connessione e la chiamata. La connessione va bene

            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)
È stato utile?

Soluzione

Il problema con la mia chiamata di procedura memorizzata è che non sono sfuggito alle doppie citazioni. La sintassi richiede ancora le doppie citazioni per gestire correttamente il pacchetto e la barra in avanti. @Mark Rotteveel, eri vicino. Non riesco a sostituire le citazioni singole per doppie citazioni. Questo è ciò che ha funzionato: cn.prePareCall ("Call " _ sys_bic ". " Mypackaged/zmm_pr_materials_get "")

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top