Ошибка при вызове хранимой процедуры Hana из python sqlalchemy - PullRequest
0 голосов
/ 12 марта 2020

Я получаю сообщение об ошибке при вызове хранимой процедуры с табличным вводом и параметром varchar out из python с использованием sqlalchemy lib.Below упоминается ошибка

Ошибка при вызове процедуры из python sqlalchemy.ex c .DatabaseError: (pyhdb.exceptions.DatabaseError) недопустимый аргумент: входной параметр не подходит как параметр таблицы:

параметр один - это тип таблицы, а второй - тип varchar *

Я добавляю фрагмент кода, который пытаюсь выполнить с помощью

engine = create_engine("hana+pyhdb://{username}:{password}@{host}:{port}".format(username='username', password='password', host='hostname', port='30015'))

output="

input = '[{"RULE_ID": 1, "RULE_NAME": null, "SO_SSA": "1074", "PO_NUMBER" : нулевой, "CODE": "DDD", "ROUTE_CODE": "", "РАБОЧИЙ": нулевой, "SHIP_TO": "IND", "SHIP_TO_REGION": "МХ", "SHIP_TO_CUSTOMER_ID": нулевой, "BILL_TO_CUSTOMER_ID ": null," END_TO_CUSTOMER_ID ": null," SLCA ":" AKP123 "," HOLD_NAME ":" Удержание утверждения фьючерса "," SHIPPING_PREFERENCE ": пусто," EAD ": пусто," CUSTOMER_REQUEST_TYPE ": пусто," CRD ": нуль "CRSD": нулевой, "CURRENT_PROMISE_DATE": нулевой, "CURRENT_PROMISE_DELIVERY_DATE": нулевой, "OPDATE": нулевой, "OPDD": нулевой, "ON_HOLD": нулевая "FLOW_STATUS_CODE": нулевой, "PICK_RESULT": нулевой, "IS_IN_OTM": нулевой, "BUSINESS_UNIT": нулевой, "REVENUE_FLAG": нулевой, "ACTION_CATEGORY": нулевой, "ACTION_OWNER": нулевой, "SS_REVENUE": NULL,» CARTONS ": null," INVOICE_ELIGIBILITY_EVENT ": null," SALES_CHANNEL ": null," CREATED_BY ":" NEW "," CREATION_DATE ":" 2020-02-11 22:24 PM "," LAST_UPDATED_BY ":" NEW "," LAST_UPD_ ":" 2020-03-04 22:39 "," FDA_FLAG ": пусто," POE_FLAG ": пусто," CONSOLIDATED_FLAG ": пусто," START_DATE ":" 2019-01-02 "," END_DATE ":" 2020- 01-02 "," ACTIVE ":" T "}] '

test=engine.execute('call SCHEMA.PROC(?,?)',(input,output))

Я получаю входные данные в виде строки JSON из интерфейса пользователя. В HANA SP ввод является типом типа таблицы. I я не уверен, как я могу преобразовать входные данные в таблицу типа

1 Ответ

0 голосов
/ 13 марта 2020

В сообщении об ошибке уже сказано: ожидаемым параметром для процедуры является таблица, но это не то, что предоставляется при вызове процедуры.

Здесь важно знать, что «тип таблицы» для определение параметра не означает, что клиентская программа может каким-либо образом создать набор записей, назвать его таблицей и передать его параметру.

Вместо этого можно передать фактические таблицы SAP HANA или переменные таблицы SQLScript в параметр типа таблицы.

Чтобы обойти это ограничение, клиентские программы имеют различные параметры:

  • создать (временную) таблицу, заполнить ее записями, которые должны быть переданы в процедуру, и вызвать процедуру с именем этой таблицы.
  • использует анонимный блок SQLScript, где записи сначала собираются в табличную переменную , а затем эта табличная переменная передается в процедуру.

Это может выглядеть примерно так:

 DO BEGIN
      tab_var = select ‘some data’ as COL_1, 1234 as COL_2 from dummy union all 
                select ‘some other data’ as COL_1, 4711  as COL_2 from dummy;

     call my_procedure (tab_param => :tab_var );
 END; 
...