【问题标题】:How to execute multiple Oracle statements from .sql script in Airflow OracleOperator如何在 Airflow OracleOperator 中从 .sql 脚本执行多个 Oracle 语句
【发布时间】:2018-10-31 13:38:35
【问题描述】:

我正在使用 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);

我做错了吗? 如果任何人都可以分享尝试不同或指出正确的做法,那将是有帮助的。

【问题讨论】:

    标签: airflow


    【解决方案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。

    【讨论】:

    • 我有一个问题:这个“sql_smt := q'[]'”是否包含所有三个 sql 语句?
    猜你喜欢
    • 2019-11-01
    • 2018-01-19
    • 1970-01-01
    • 2012-06-11
    • 2020-05-27
    • 2017-06-02
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多