Как выполнить несколько операторов Oracle из сценария .sql в Airflow OracleOperator - PullRequest
0 голосов
/ 31 октября 2018

Я использую OracleOperator для выполнения sql на удаленном источнике базы данных. Ниже приведен простой код оператора, написанный на Airflow DAG,

t2 = OracleOperator(
    task_id='task_2',
    oracle_conn_id='ORA_DATABASE_SYSTEM',
    sql='/query.sql',
    dag=dag)

query.sql - это созданный файл, в котором я хочу иметь несколько операторов sql, которые могут быть DDL или DML, но при запуске DAG выдает

cx_Oracle.DatabaseError: ORA-00922: отсутствует или недействительна опция

.sql файл имеет следующий оператор SQL,

create table SP(name varchar(50), age int);
insert into SP (name,age) values('Suraj',24);
insert into SP values('Ashish',27);

Я делаю что-то не так? Было бы полезно, если бы кто-нибудь поделился, пытаясь по-другому или указывая правильный способ сделать это.

1 Ответ

0 голосов
/ 02 ноября 2018

После некоторых попыток я могу использовать оператор Oracle для выполнения нескольких SQL-операторов в удаленной базе данных Oracle с использованием сценария .sql.

# template_searchpath is the path where .sql files are stored
dag = DAG('Test_Oracle_Connection', default_args=default_args,template_searchpath=['/home/Ashish'])

t2 = OracleOperator(
    task_id='task_2',
    oracle_conn_id='Oracle_connection',
    sql='/oracle_query.sql',                             #SQL file name
    dag=dag)

Файл oracle_query.sql содержит несколько операторов SQL, например

DECLARE
  sql_smt VARCHAR2 (5000);
sql_smt := q'[<SQL_STATEMENT>]'
EXECUTE IMMEDIATE sql_smt;
EXECUTE IMMEDIATE 'commit';

Возможно, это не лучший способ, но, по крайней мере, сейчас он мне подходит. Пожалуйста, поделитесь любым другим лучшим способом подключения к удаленной базе данных Oracle и выполнения ваших запросов, которые могут быть DDL или DML.

...