Я пытаюсь написать функцию PL / SQL, которая возвращает массив целых чисел, а затем может вызвать его с помощью функции вызова cx_Oracles. Я думаю, что правильно понял функцию PL / SQL, но я не знаю, как вызвать ее с помощью cx_Oracle.
create or replace type test_type is table of NUMBER(10);
create or replace function test_function (n in INTEGER)
RETURN test_type
AS
tmp_tab test_type := test_type();
BEGIN
tmp_tab.EXTEND(n);
FOR i IN 1 .. n LOOP
tmp_tab(i) := i;
END LOOP;
RETURN tmp_tab;
END;
Работает с sqlplus:
SQL> select test_function(20) from dual;
TEST_FUNCTION(20)
--------------------------------------------------------------------------------
TEST_TYPE(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
Как я могу получить результат такой функции, используя cx_Oracle? Это возможно?
Я нашел это http://osdir.com/ml/python.db.cx-oracle/2005-06/msg00014.html, но я действительно не знаю, как его использовать. Когда я изменяю свое определение типа на:
create or replace type test_type is table of NUMBER(10) index by binary_integer;
Я получаю:
Предупреждение: тип создан с ошибками компиляции.
SQL> sho err
Errors for TYPE TEST_TYPE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/19 PLS-00355: use of pl/sql table not allowed in this context