Error de sintaxis llamando al procedimiento almacenado de HANA en HANA con JDBC

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

  •  29-07-2022
  •  | 
  •  

Pregunta

Recibo un error de sintaxis llamando a un procedimiento almacenado de HANA. En el editor SQL en Hana Studio funciona, pero la sintaxis debe ser diferente para la preparación en Java. Creo que es la barra de avance después del nombre del paquete, pero no estoy seguro de qué hacer al respecto.

¿Es porque creé el procedimiento almacenado en la carpeta de contenido? ¿Debería construirse en otro lugar?

Aquí está la conexión y la llamada. La conexión está bien

            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)
¿Fue útil?

Solución

El problema con mi llamada de procedimiento almacenado es que no escapé de las citas dobles. La sintaxis todavía necesita las cotizaciones dobles para manejar correctamente el paquete y la barra de reenvío. @Mark Rotteveel, estabas cerca. No puedo sustituir citas individuales por citas dobles. Esto es lo que funcionó: cn.prepareCall ("call " _ sys_bic ". " Mypackaged/zmm_pr_materials_get "")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top