Я пытаюсь выполнить SQL-скрипт с помощью cx_Oracle, который примерно выглядит как
SPOOL /tmp/test.log
SET echo ON
SET serveroutput ON SIZE UNLIMITED
BEGIN
#SOME_PL/SQL_STATEMENTS
END;
/
SPOOL OFF
где я пытаюсь записать результат операторов PL / SQL в файл. Я узнал, что команды SQLPlus не поддерживаются в cx_Oracle. Есть ли способ использовать SPOOL с помощью cx_Oracle?
Можно ли использовать Jython вместо Python? Если да, то могу привести пример.
Или почему бы просто не использовать файловые объекты Python?
@KrisRice Пожалуйста, сделай.
@KaushikNayak Такой вариант есть. Просто хочу изучить и другие варианты.






Нет прямого способа использовать SPOOL в cx_Oracle.
Проблема в том, что SPOOL - это специфическая команда SQL * PLUS. Это не команда Oracle SQL. Таким образом, фактическая буферизация выполняется на стороне клиента. Когда ты делаешь что-то вроде
SPOOL ON
SET PAGESIZE 0
SET SERVEROUTPUT ON
COLUMN username FORMAT A20
все эти команды являются командами SQL * PLUS, локальными (клиентскими) командами, и они не отправляются на сервер Oracle и не изменяют поведение сеанса Oracle вообще.
Эти команды предназначены только для управления тем, как вывод с сервера Oracle будет отображаться на экране (или записываться в файл или на принтер в случае SPOOL).
Вы можете идентифицировать локальную команду по тому факту, что ее не нужно заканчивать точкой с запятой ; (в большинстве случаев).
Полный справочник команд SQL * PLUS можно найти здесь: https://docs.oracle.com/database/121/SQPUG/ch_twelve001.htm#SQPUG023
что, если вы пошли другим путем - используя Python в своем SQLcl (современные команды SQLПлюс) сценарий? blogs.oracle.com/letthesunshinein/… у вас будет полный доступ к SQLPlus на основе Java, такие как SPOOL