Синтаксическая ошибка при вызове хранимой процедуры HANA в HANA с помощью JDBC

Я получаю синтаксическую ошибку при вызове хранимой процедуры HANA. В редакторе SQL в Hana Studio он работает, но синтаксис метода prepareCall в Java должен быть другим. Я думаю, что это косая черта после имени пакета, но не знаю, что с этим делать.

Это потому, что я создал хранимую процедуру в папке Content? Следует ли его строить где-нибудь еще?

Вот связь и звонок. Связь в порядке

            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)

person Davidson    schedule 07.11.2013    source источник
comment
Вы пытались заменить его на {call <your stored procedure>}, поскольку это escape-код JDBC, который драйвер преобразует в формат, специфичный для сервера. Также вы используете ' как кавычки для идентификаторов, в большинстве реализаций баз данных кавычки для цитируемых идентификаторов - это двойные кавычки (") или иногда обратная кавычка (`). Одиночные кавычки обычно зарезервированы для строковых литералов.   -  person Mark Rotteveel    schedule 08.11.2013
comment
Привет ... да .. Я пробовал 100 способов .. без кавычек / да кавычек, без пакета, да пакета ..... вообще без кавычек .... без схемы, да схемы ... все мыслимые да / нет, думаю, я пробовал. Возможно ли, что у SAP есть ОДИН пример вызова хранимой процедуры, которая объяснена и работает? только ОДИН ... Я использую клиентскую банку hana, ng * .jar. Я действительно устал от SAP, хвастающегося морем помощи, которую они имеют. Это шутка. Это ничто. Вызов хранимой процедуры в HANA должен быть простым и глупым делом. Я думаю, проблема в синтаксисе пакета. Итак, каков синтаксис?   -  person Davidson    schedule 09.11.2013
comment
К сожалению, я не знаю HANA, поэтому не могу вам помочь (а поиск в Google полезной информации не дает).   -  person Mark Rotteveel    schedule 09.11.2013
comment
Я ценю ваш ответ и усилия. Я останусь на нем. Есть ответ. Когда я это сделаю, я вернусь и положу сюда. Это здорово - иметь доступ к Hana через вызовы Java. Это можно сделать, и я хочу это сделать. Спасибо еще раз. Я уверен, что это что-то очень простое.   -  person Davidson    schedule 09.11.2013


Ответы (1)


Проблема с моим вызовом хранимой процедуры в том, что я не избежал двойных кавычек. Синтаксису по-прежнему нужны двойные кавычки для правильной обработки пакета и косая черта. @Mark Rotteveel, вы были близки. Я не могу заменять двойные кавычки одинарными. Вот что сработало: cn.prepareCall ("call \" _ SYS_BIC \ ". \" MyPackaged / ZMM_PR_MATERIALS_GET \ "")

person Davidson    schedule 18.11.2013