Как мне запросить хранимую процедуру в node-odbc / sybase?

#node.js #odbc #sybase #node-odbc

#node.js #odbc #sybase #узел-odbc

Вопрос:

После долгих поисков в Google я нашел способ запросить древнюю базу данных sybase, чтобы начать создавать rest api для мобильного приложения, над которым я работаю, используя node-odbc (https://github.com/markdirish/node-odbc/blob/master/README.md#callprocedurecatalog-schema-name-parameters-callback).

Мне удалось успешно выполнить запрос с помощью оператора select, но я предпочел бы не делать этого в целях безопасности. когда я пытаюсь использовать хранимую процедуру, я получаю странный ответ. Мне нужна проверка работоспособности здесь и выяснить, чего мне не хватает.

пример хранимой процедуры, которую я пробовал, — это простой sp с одним параметром для проверки адреса электронной почты с использованием номера учетной записи (это, конечно, поддельный sp, но отформатированный таким же образом):

«DB».»spGetEmail» (@acctnum varchar(50) )

документы показывают это:

const odbc = require(‘odbc’);

odbc.connect( ${process.env.CONNECTION_STRING} , (ошибка, подключение) => { connection.callProcedure(null, null, ‘MY_PROC’, [не определено], (ошибка, результат) => { if (error) {console.error(ошибка) } // handle // результат содержит массив результатови имеет parameters свойство для доступа к параметрам, возвращаемым процедурой. console.log(результат); }); });

Я интерпретировал это так:

odbc.connect(${process.env.CONNECTION_STRING}, (ошибка, подключение) => { connection.callProcedure(null, «DB», «spGetEmail», [123456], (ошибка, результат) => { if (ошибка) {console.error(ошибка) } // handle // result содержит массив результатов и имеет parameters свойство для доступа к параметрам, возвращаемым процедурой. console.log(результат); }); });

тогда я получаю это:

[Ошибка: [odbc] Количество параметров, ожидаемых процедурой, и количество переданных параметров не равно] { odbcErrors: [] } ошибка неопределенной сегментации

кажется, что мне не хватает некоторых параметров, но я ЗНАЮ, что это не так. Проклятый sp принимает один параметр! 😖

Чего мне здесь не хватает??

Комментарии:

1. Какую именно базу данных Sybase вы имеете в виду?

2. sybase 16, SQL Anywhere 16, если быть точным.

3. Вы пробовали sqlanywhere package?

4. да. он разбился перед установкой, выдав следующее сообщение об ошибке: ОШИБКА npm! ошибка code ELIFECYCLE npm! ошибка № 4294967295 ОШИБКА npm! sqlanywhere@1.0.24 установка: node build.js ошибка нпм! Статус выхода 4294967295 ошибка npm! ОШИБКА npm! Сбой при sqlanywhere@1.0.24 установите скрипт. ОШИБКА npm! Вероятно, это не проблема с npm. Вероятно, есть дополнительный вывод журнала выше. ОШИБКА npm! Полный журнал этого запуска можно найти в: ОШИБКА npm! C:Usersjasmine . loganAppDataRoamingnpm-cache_logs2020-12-14T19_39_17_409Z-debug.log

5. также попробовал ручную версию, в которой вы устанавливаете npm -global windows-build-tools от имени администратора в powershell. Это не привело к сбою, но и не сработало в коде. 😄

Ответ №1:

[РЕШЕНО] Я не уверен, что встроенный метод .callProcedure() сломан или просто не подходит для Sybase16, но я нашел способ обойти его на случай, если он пригодится кому-нибудь в будущем. Вместо того, чтобы использовать метод callProcedure(), сделайте это:

   odbc.connect(connectionString, (error, connection) => {

    let my_procedure = "exec spGetEmail @acct='12345678'"

    connection.query(my_procedure, (error, result) => {
        if (error) { console.error(error) }
        console.log(result);
    });
}); 
 

Комментарии:

1. Привет, @Jasmine Logan, не могли бы вы, пожалуйста, сообщить мне формат вашей строки подключения? Мне также необходимо подключиться к Sybase через NodeJS

2. @Jasmine Logan — Не уверен, как вы могли бы получить параметры из sproc, подобного этому.