SAP HANA SQL脚本如何声明动态游标

2020-08-31 06:41发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我们试图将输入表带...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我们试图将输入表带到过程中,然后尝试遍历该表并尝试替换表中每一行中的值。

到目前为止,我们已经能够成功执行以下代码(将每行中的BEDNR值替换为以500开头的值)

创建 过程 PROC_TEST_RANDOM_1

语言 SQLSCRIPT

AS BEGIN

DECLARE RAND_CUR INT ;

拒绝; RAND_CUR_NO INT ;

声明 CURSOR RANDOM_CURSOR FOR SELECT * FROM "模式名称"。 ABAPTABLES_EKPO";

RAND_CUR:= 500;

FOR CUR_ROW AS AS RANDOM_CURSOR DO

更新"模式名称"。" ABAPTABLES_EKPO"

SET BEDNR = RAND_CUR

位置:EBELN = CUR_ROW.EBELN

AND EBELP = CUR_ROW.EBELP;

RAND_CUR:= RAND_CUR + 1;

END FOR

END ;

现在我们要尝试的是将表名替换为输入表名(下面以黄色突出显示)。 基本上在 DECLARE CURSOR 语句中,我们收到语法错误,说不能将Cursor声明为Scalar。 我们正在寻找从输入表变量(IN_TBLNAME)声明游标的方法

创建 过程 PROC_TEST_RANDOM_1(ININ_TBLNAMENVARCHAR(40))

语言 SQLSCRIPT

AS BEGIN

DECLARE RAND_CUR INT ;

拒绝; RAND_CUR_NO INT ;

声明 CURSOR RANDOM_CURSOR FOR SELECT * FROM :IN_TBLNAME;

RAND_CUR:= 500;

FOR CUR_ROW AS AS RANDOM_CURSOR DO

更新:IN_TBLNAME

SET BEDNR = RAND_CUR

位置:EBELN = CUR_ROW.EBELN

AND EBELP = CUR_ROW.EBELP;

RAND_CUR:= RAND_CUR + 1;

END FOR

END ;

我们尝试使用动态Sqlscript动态声明游标

创建 过程 PROC_TEST_RANDOM_POC( IN IN_TBLNAME NVARCHAR (40))

语言 SQLSCRIPT

默认 SCHEMA " ZSDI"

AS BEGIN

声明:RAND_CUR_Value INTEGER := 500;

拒绝; RAND_CUR_NO INTEGER

声明:查询 Nvarchar (256):='

DECLARE RAND_CUR INTEGER;

DECLARE CURSOR RANDOM_CURSOR FOR SELECT * FROM'||:IN_TBLNAME;

执行 立即(:查询);

-RAND_CUR:=:RAND_CUR_Value +1;

FOR CUR_ROW AS AS RANDOM_CURSOR DO

更新 ABAPTABLES_EKPO

SET BEDNR = RAND_CUR_value

位置:EBELN = CUR_ROW.EBELN

AND EBELP = CUR_ROW.EBELP;

RAND_CUR_value:= RAND_CUR_value +1;

END FOR

END ;

激活时出现以下错误

无法执行"创建过程PROC_TEST_RANDOM_POC(IN IN_TBLNAME NVARCHAR(40))语言SQLSCRIPT DEFAULT ..."

SAP DBTech JDBC:[1287]:必须声明标识符:第12行第16行(在pos 399)

付费偷看设置
发送
2条回答
小c菟菟
1楼-- · 2020-08-31 07:16

为什么要为此使用光标? 一个简单的Update(可以动态方式执行)就可以做到这一点。

派大星 ヾ
2楼-- · 2020-08-31 07:25

我们需要根据某些条件用一些值更新表中列的每一行。 因此,我们使用游标获取每一行。

如果我们使用Update,它将仅更新该总计列的值。

我的要求是

col1 col2 col3

1个XYZ空值

2 ABC 123

我需要将col3值更改为一些数字序列,例如

col1 col2 col3

1 XYZ 987

2 ABC 876

要更改每一行的col3值,我们使用游标。这里我们将表名作为输入参数。

预先感谢

一周热门 更多>