传递 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的主要内容,如果未能解决你的问题,请参考以下文章