功能说明

适用场景

本文档仅适用于在离线开发sql节点中使用Oracle存储过程说明,调用Oracle 存储过程,不支持新增、修改存储过程操作

前置要求

版本在 EasyData-V8.0-Update05 及以上
oracle 存储过程不支持call ide,支持BEGIN XXX END

具体说明
1,全局修改az参数切换Oracle client模式,开启存储过程

1 azkaban 配置组做以下修改:
    新增配置组 plugin.common.properties,该配置组新增配置 sql.need.remove.semicolon=false
    修改配置组 global  oracle.sql.default.exec.mode,从 jdbc 改为 native 
    同步配置并重启 azkaban exec 服务

注意:azkaban修改以上配置之后,不能使用Oracle节点作为上游对下游进行参数传递

# native表示使用 client模式, jdbc表示使用jdbc模式
原因:oracle.sql.default.exec.mode 默认是jdbc时,在Oracle节点走的sql模式,会有结果数据输出,那么下游节点可以拿到当前节点输出值

INFO-离线开发调用Oracle存储过程 - 图1

# native表示使用 client模式, jdbc表示使用jdbc模式
oracle.sql.default.exec.mode修改为native时,在Oracle节点走的是脚本模式,此时没有结果输出,那么下游再通过数组方式来拿上游的值时,会报错outputs1's shape is [0], but expr value is outputs1[0]

INFO-离线开发调用Oracle存储过程 - 图2

2.仅修复某个任务的执行模式为Oracle client

1.不进行全局修改az参数,仅在任务添加参数
sql.need.remove.semicolon=false
job.oracle.sql.exec.mode=nativeaz全局修改的是插件的配置,在任务中增加此配置,可以控制此任务的执行模式,任务的优先级高于插件中的)

INFO-离线开发调用Oracle存储过程 - 图3
3.若已经全局修改了az配置,或用oracle存储过程场景较多修改了全局配置,使用oracle节点进行参数传递时,修复节点为jdbc模式

任务添加参数:
job.oracle.sql.exec.mode=jdbc

开发说明

由于 SQL IDE 开发页面与外部节点执行的调用方式不一致,两边正确调用需要有所调整,完整的开发流程如下:

1、开发人员在 SQL IDE 编写调用Oracle 存储过程的代码,测试执行成功后,在语句最后新增仅有 / 字符的行;
2、新增最后带有 / 字符的行后,离线开发选择执行该节点可以成功并实际调用,如果没有则会执行成功但实际未调用;
3、后续如果在 SQL IDE 修改代码,如果需要执行,则要去除 / 后才能执行

作者:李凌威