使用Oracleoperator调用存储过程流程

时间:2019-08-29 22:25:25

标签: python oracle stored-procedures airflow cx-oracle

我是Python的新手。我正在使用apache airflow和一个任务,我正在调用存储过程oracle。我看到错误的非法变量名称/编号

t1 = OracleOperator(
    task_id='Exe_PA',
    oracle_conn_id='DEV_SR',
    parameters=('1', 'TC', 'ESPA', '99', '2', '100', '28-08-2019', '0'),
    sql= 'Begin pno_validacion_inicial(); end;',
    dag=dag)
  

[2019-08-29 18:09:21,089] {dbapi_hook.py:168}信息-开始pno_validacion_inicial();结束;带有参数('1','TC','ESPA','99','2','100','28-08-2019','0')   [2019-08-29 18:09:21,091] { init .py:1580}错误-ORA-01036:非法的变量名称/编号   追溯(最近一次通话):     _run_raw_task中的文件“ /usr/local/lib/python2.7/dist-packages/airflow/models/init.py”,第1441行       结果= task_copy.execute(context = context)     执行中的文件“ /usr/local/lib/python2.7/dist-packages/airflow/operators/oracle_operator.py”,第63行       参数= self.parameters)     运行中的文件“ /usr/local/lib/python2.7/dist-packages/airflow/hooks/dbapi_hook.py”,第169行       cur.execute(s,参数)

2 个答案:

答案 0 :(得分:0)

您对<body> <div id="Test"></div> <script type="text/javascript"> document.getElementById("Test").innerHTML = "whatever"; </script> </body> 的调用不包含任何参数,但您要传递8个参数。您的SQL应该看起来像这样:

<body> <div id="Test">whatever</div> <script type="text/javascript"> document.getElementById("Test").innerHTML = "whatever"; </script> </body>

答案 1 :(得分:0)

参考documentation,您可以看到参数必须是映射或可迭代的。您的代码应类似于:

t1 = OracleOperator(
     task_id='Exe_PA',
     oracle_conn_id='DEV_SR',
     parameters=({'param1':'1', 'param2':'TC', 'param3':'ESPA', 'param4':'99', 'param5':'2', 'param6':'100', 'param7':'28-08-2019', 'param8':'0'}),
     sql= 'Begin pno_validacion_inicial(:param1, :param2, :param2, :param3, :param4, :param5, :param6, :param7, :param8 ); end;',
     dag=dag)