我正在使用OracleOperator在远程数据库源上执行sql。 下面是用Airflow DAG编写的简单操作员代码,
t2 = OracleOperator(
task_id='task_2',
oracle_conn_id='ORA_DATABASE_SYSTEM',
sql='/query.sql',
dag=dag)
query.sql是创建的文件,我希望具有多个可以是DDL或DML的sql语句,但是在运行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);
我做错什么了吗? 如果任何人都可以分享尝试不同的方法或指向正确的方法,那将是有帮助的。
答案 0 :(得分:1)
经过一些试用后,我能够使用Oracle Operator通过.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的查询。