传递 CLOB TO Sys 过程 SAP HANA

Posted

技术标签:

【中文标题】传递 CLOB TO Sys 过程 SAP HANA【英文标题】:Pass CLOB TO Sys procedure SAP HANA 【发布时间】:2018-12-19 22:07:11 【问题描述】:

如何将 clob 传递给系统 rpocedure 而不会出错?

我正在尝试通过

   CALL SYS.GET_PROCEDURE_OBJECTS(CREATE PROCEDURE "IA_ATP"."ia_xsjob.xsjob_procedures_folder::atp_procedure" ( ) 
        LANGUAGE SQLSCRIPT
        SQL SECURITY INVOKER 

    AS BEGIN

    DROP TABLE IA_ATP.ATP;

    CREATE COLUMN TABLE IA_ATP.ATP AS (SELECT ATP_VIEW.*, UTCTOLOCAL(CURRENT_UTCTIMESTAMP,'EST') AS CREATE_TS FROM IA_ATP.ATP_VIEW WHERE  
    OPEN_PRICE_REQUESTS <>0
    OR TOTAL_ON_HAND <> 0 
    OR OPEN_CUSTOMER_ORDERS <> 0  
    OR OPEN_CUSTOMER_DELIVERIES <> 0 
    OR OPEN_OUTBOUND_STOS <> 0 
    OR ATP <> 0 
    OR NEGATIVE_ATP <> 0
    OR BLOCK_STOCK <> 0
    );END;

【问题讨论】:

您是否尝试通过创建过程字符串调用 CALL SYS.GET_PROCEDURE_OBJECTS? 是的先生,我正在传递我创建的程序之一。 【参考方案1】:

过程"SYS"."GET_PROCEDURE_OBJECTS" 尚未记录为一般用途。

但我设法从 SQL 脚本上下文中成功调用它:

有一个过程定义:

create procedure pr_test (in i int)
as
begin
declare a, b int;

    select :i into a from dummy;
    select count(*) into b from objects;

    select :a, :b, :a*:b from dummy;
end;


call pr_test(10);

将此源代码分配给CLOB 变量并使用此变量调用系统过程:

do begin
declare proc_source clob;

proc_source :='create procedure pr_test (in i int)
                as
                begin
                declare a, b int;

                    select :i into a from dummy;
                    select count(*) into b from objects;

                    select :a, :b, :a*:b from dummy;
                end;';

 CALL SYS.GET_PROCEDURE_OBJECTS(:proc_source);

end;

从系统视图PROCEDURE_OBJECTS获取procecure结果:

select * from procedure_objects;


SCHEMA_NAME PROCEDURE_NAME  OBJECT_SCHEMA   OBJECT_NAME OBJECT_TYPE_ID  OBJECT_TYPE START_POSITION  END_POSITION
SYSTEM      PR_TEST         PUBLIC          DUMMY       128             SYNONYM     100             105         
SYSTEM      PR_TEST         SYS             DUMMY       32              TABLE       100             105         
SYSTEM      PR_TEST         PUBLIC          OBJECTS     128             SYNONYM     141             148         
SYSTEM      PR_TEST         SYS             OBJECTS     31              VIEW        141             148         
SYSTEM      PR_TEST         PUBLIC          DUMMY       128             SYNONYM     189             194         
SYSTEM      PR_TEST         SYS             DUMMY       32              TABLE       189             194         

【讨论】:

你好 Lars,当我在 do-begin-end 中执行 CALL 语句时,我收到以下错误消息“SAP DBTech JDBC:[258]:权限不足:未授权”。但是当我查询“select * from procedure_objects;”时单独我没有行作为输出而没有错误消息 该表将只包含当前会话中过程执行的结果。因此,如果缺少阻止程序运行的特权,则不会有任何结果。我不知道哪些权限或角色涵盖了此过程 - 我只是通过 SYSTEM 用户运行它,因为它拥有该过程。 拉斯非常感谢你。还有一个问题,如果我插入的过程中有撇号,我该如何调用 GET_PROCEDURE_OBJECTS?我运行了您的程序,并且使用您的示例运行良好,但是,当我使用上面粘贴的程序运行它时,我在“EST”附近得到不正确的语法。提前感谢您的支持。 没试过,但我敢打赌,你只需要像通常在 SQLSCRIPT 中那样转义单引号(重复单引号 ''' 转义 '

以上是关于传递 CLOB TO Sys 过程 SAP HANA的主要内容,如果未能解决你的问题,请参考以下文章

基于事件驱动过程链理论的SAP项目实施

Oracle TO u CLOB函数

在mybatis中传递是日期类型怎样去和日期比较

oracle 中clob内容怎么查询

SAP中我用BADI增强XD01一个字段,但不能更新数据,请教应如何才能更新数据?

oracle CLOB/BLOB to varchar2