У меня есть следующая таблица и следующая хранимая процедура (упрощенная до простых основ, необходимых для демонстрации проблемы):
CREATE TABLE T(C INT);
CREATE PROCEDURE PROC(IN T TABLE(C INT), OUT X INT) AS BEGIN
X = 5;
END;
Из HANA Studio я могу CALL PROC(T, ?)
и получить 5. ОднакоЯ не нашел ни одного хорошего способа сделать то же самое с драйвером Python hdbcli .
callproc
, похоже, не может принять параметры таблицы.Передача имени таблицы в виде строки не работает:
>>> from hdbcli import dbapi
>>> conn = dbapi.connect(userkey='testkey')
>>> cur = conn.cursor()
>>> cur.callproc('PROC', ('T', '?'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/hdbcli/dbapi.py", line 498, in callproc
ret = self.__callproc(callproc, parameters)
File "/usr/local/lib/python3.6/site-packages/hdbcli/dbapi.py", line 257, in __callproc
return self.__cursor.callproc(operation, parameters)
hdbcli.dbapi.Error: (8, 'invalid argument: Input parameter is inadequate as table parameter: line 1 col 13 (at pos 12)')
execute
может выполнить процедуру, но, по-видимому, она не предоставляет никакого способа доступа к выходному параметру.Для него нет набора результатов:
>>> cur.execute('CALL PROC(T, ?)')
True
>>> cur.fetchone()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/hdbcli/dbapi.py", line 434, in fetchone
raise ProgrammingError(0,"No result set")
hdbcli.dbapi.ProgrammingError: (0, 'No result set')
Я нашел один чрезвычайно неуклюжий обходной путь, который я публикую в качестве ответа, но он ужасно многословен и плохо взаимодействует со значениями параметров по умолчанию.Есть ли хороший способ получить доступ к выходному параметру?