Кто-нибудь знает более простой способ работы с пользовательскими типами в Oracle с помощью cx_Oracle?
Например, если у меня есть эти два типа:
CREATE type my_type as object(
component varchar2(30)
,key varchar2(100)
,value varchar2(4000))
/
CREATE type my_type_tab as table of my_type
/
А затем процедура в пакете my_package
выглядит следующим образом:
PROCEDURE my_procedure (param in my_type_tab);
Чтобы выполнить процедуру в PL / SQL, я могу сделать что-то вроде этого:
declare
l_parms my_type_tab;
l_cnt pls_integer;
begin
l_parms := my_type_tab();
l_parms.extend;
l_cnt := l_parms.count;
l_parms(l_cnt) := my_type('foo','bar','hello');
l_parms.extend;
l_cnt := l_parms.count;
l_parms(l_cnt) := my_type('faz','baz','world');
my_package.my_procedure(l_parms);
end;
Однако мне было интересно, как я могу сделать это в Python, как этот код:
import cx_Oracle
orcl = cx_Oracle.connect('foo:bar@mydb.com:5555/blah' + instance)
curs = orcl.cursor()
params = ???
curs.execute('begin my_package.my_procedure(:params)', params=params)
Если параметр был строкой, я могу сделать это, как указано выше, но, поскольку это пользовательский тип, я не знаю, как его вызвать, не прибегая к чистому коду PL / SQL.
Edit: Извините, я должен был сказать, что я искал способы сделать больше в коде Python вместо PL / SQL.