Захват вывода stdout из хранимых процедур с помощью cx_Oracle - PullRequest
3 голосов
/ 09 марта 2011

Есть ли способ в cx_Oracle для захвата вывода stdout из хранимой процедуры оракула?Они появляются при использовании Oracle SQL Developer или SQL Plus, но, похоже, нет способа извлечь их с помощью драйверов базы данных.

Ответы [ 3 ]

4 голосов
/ 09 марта 2011

Вы можете получить dbms_output с помощью DBMS_OUTPUT.GET_LINE(buffer, status). Состояние равно 0 в случае успеха и 1, когда данных больше нет.

Вы также можете использовать get_lines(lines, numlines). numlines является вводом-выводом. Вы устанавливаете его на максимальное количество строк, и оно устанавливается на фактическое число на выходе. Вы можете вызвать это в цикле и выйти, когда возвращенное значение numlines меньше вашего ввода lines - это выходной массив.

0 голосов
/ 09 марта 2011

Что бы вы ни указали, используя put_line, вы читаете, используя get_line; Я полагаю, что так работают все эти инструменты, возможно, в том числе и SQL * Plus.

Обратите внимание, что вам нужно вызывать get_line достаточно раз, чтобы исчерпать буфер. Если вы этого не сделаете, непрочитанная часть будет перезаписана следующей put_line.

0 голосов
/ 09 марта 2011

Вы пробовали это?

>>> conn = cx_Oracle.connect('user/pw@SCHEMA')
>>> cursor = conn.cursor()
>>> output = cursor.callproc("dbms_output.put_line", ['foo',])
>>> output
['foo']

Первый аргумент - это процедура для вызова, а второй - последовательность аргументов или диктант для bindvars.

см. Также: http://cx -oracle.sourceforge.net / html / cursor.html

...