标签: sap

SAP HANA 存储过程中的动态 SQL

我想在 HANA 中创建一个存储过程,它执行以下操作:

  • 接受表类型的 IN 参数。
  • 接受另一个 varchar 类型的 IN 参数。
  • 根据第一个输入参数的列值从现有表中过滤一些行。
  • 尝试根据第二个输入参数给出的条件对 (ORDER BY) 行进行排序。

这是我要创建的存储过程

CREATE PROCEDURE DEMO_PROD_EXAMPLE_DYNAMIC(IN TEMPLIST PRODLISTTYPE,IN ORDERSTRING VARCHAR(200))
AS
BEGIN
OUTVAR = SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST);

SELECT * FROM :OUTVAR ORDER BY :ORDERSTRING DESC;

END;
Run Code Online (Sandbox Code Playgroud)

我面临以下障碍:

  • 在上述过程中,根本不会发生排序!如果我对列名进行硬编码,例如 SELECT * FROM :OUTVAR ORDER BY ID DESC; 有用 。
  • 如果我尝试创建像 SELECT * FROM'|| 这样的动态 SQL 查询 :OUTVAR||' ORDER BY '||:ORDERSTRING||'DESC'; 我得到一个例外,即不允许将 varchar 和表类型与连接运算符一起使用。

如何根据 HANA 中的动态条件(列名/传递给过程)对结果集进行排序。

TIA

sap dynamic-sql hana

1
推荐指数
1
解决办法
1万
查看次数

SELECT does not return rows when queried by VBELN

I'm trying to display table in alv from an internal table where rows are added form a table stored in the database. Without a where condition I see rows displayed in alv but with a where condition in the select statement no rows are returned.

Here is the code:

REPORT  ZSAM.

DATA: IT_1 TYPE STANDARD TABLE OF VBAK.

select vbeln audat netwr waerk vkorg vtweg 
    from VBAK 
    into corresponding fields of Table IT_1 
    where vbeln > 4500 
      and vbeln < …
Run Code Online (Sandbox Code Playgroud)

sql sap abap

1
推荐指数
1
解决办法
107
查看次数

源代码交易SNOTE

如何查看事务SNOTE的源代码?我使用系统对话框(系统 - >状态 - >程序名称),但"程序"字段为空.

在此输入图像描述

sap abap

0
推荐指数
1
解决办法
592
查看次数

在ABAP中读取字符串中的字符

如何读取ABAP中字符串中的每个字符?例如,我想读取字符串"a7m4d0"中的每个字符.之后我想验证每个字符是字符还是数字.任何提示或想法?

sap abap

0
推荐指数
2
解决办法
6万
查看次数

检查表是否存在

我需要SELECT在ABAP中使用一个语句,但问题是该表在该系统上不存在.
我正在检查FM表的存在:

CALL FUNCTION 'DDIF_TABL_GET'
  EXPORTING
     name     = 'mytable'
  IMPORTING
     gotstate = l_got_state
  EXCEPTIONS
     OTHERS   = 1.

IF sy-subrc = 0.
  SELECT SINGLE * FROM mytable  INTO  mylocalstructure WHERE ...........  .
ENDIF.
Run Code Online (Sandbox Code Playgroud)

但是仍然存在语法错误:

"mytable"未在ABAP词典中定义为表格

sap abap

0
推荐指数
1
解决办法
2264
查看次数

WHERE条件下的OpenSQL语法CASE语句

我想问问是否可以将CASE语句直接写入WHERE子句(我知道WHERE子句也可以通过字符串传递),例如 

 SELECT * FROM db_table INTO TABLE @mt_table[]
     WHERE key1 = @l_key1
          AND key2 = @l_key2
          AND key3 = @l_key3
          AND key4 = @l_key4
          AND ( WHEN l_auth = 'A' THEN username = @sy-uname
                WHEN l_auth = 'U' THEN username = @sy-uname OR username = @space 
                END ). 
Run Code Online (Sandbox Code Playgroud)

sap abap opensql

0
推荐指数
1
解决办法
333
查看次数

检查表Y中是否存在列X.

我有两个字符串变量:

  • lv_table_name 包含表名
  • lv_column_name 包含列名称

有没有办法检查是否有一个具有给定列的表(或视图)?

sap abap

0
推荐指数
1
解决办法
678
查看次数

功能组与类

在ABAP中,我想知道功能组具有哪些OO属性。

函数组具有封装,因为我可以在函数组中放入全局变量。函数组中不能实现多态和继承。它是否正确?

那么功能组的不同实例呢?这是完全面向对象的功能,是否可以通过功能组来实现?

sap abap

0
推荐指数
1
解决办法
144
查看次数

“选择列表”列表中的元素必须使用逗号分隔

我想进行以下选择,但是返回了一个我不知道该怎么办的错误。

“选择列表”列表中的元素必须使用逗号分隔。

我的版本是NW 7.4。有人可以帮我吗?

TYPES : BEGIN OF ty_meal,
          carrid     TYPE smeal-carrid,
          mealnumber TYPE smeal-mealnumber,
          text       TYPE smealt-text,
        END OF ty_meal,
        ty_meal_s TYPE STANDARD TABLE OF ty_meal WITH EMPTY KEY.
DATA meals TYPE ty_meal_s.

SELECT smeal~carrid smeal~mealnumber smealt~text
  INTO TABLE meals
  FROM smeal
    LEFT JOIN smealt 
        ON smealt~carrid = smeal~carrid
        AND smealt~mealnumber = smeal~mealnumber
  WHERE smealt~sprache EQ 'E'.
Run Code Online (Sandbox Code Playgroud)

sap abap

0
推荐指数
1
解决办法
156
查看次数

异常CX_SY_REF_IS_INITAL

我正在建立一个类的方法调用

DATA: r_info TYPE REF TO zcl_sv_job_offline_ctrl.


 CALL METHOD r_info->create
    EXPORTING
         is_data   = lr_test_record.
Run Code Online (Sandbox Code Playgroud)

并收到以下错误:

CX_SY_REF_IS_INITAL

You are trying to access a component with a 'ZERO' object reference (points to nothing). Variable: "R_INFO".
Run Code Online (Sandbox Code Playgroud)

我想念什么吗?

sap abap

0
推荐指数
1
解决办法
72
查看次数

标签 统计

sap ×10

abap ×9

dynamic-sql ×1

hana ×1

opensql ×1

sql ×1