使用NATIVE SQL将变量用作表名

2020-08-15 16:45发布

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

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


大家好,

我正在尝试执行SELECT语句,以便按照以下说明从外部Oracle DB表中获取数据到SAP:

EXEC SQL。

从城市选择城市

进入结构:wa

来自spfli

mandt =:sy-mandt AND

carrid =:p_carrid AND connid =:p_connid

ENDEXEC。

但是,我需要从变量而不是上面的解决方案中指明外部表名称。 也就是说,声明一个变量并在其中存储表的名称(例如,spfli)。 产生的ABAP代码类似于:

EXEC SQL。

从城市选择城市

进入结构:wa

来自

mandt =:sy-mandt AND

carrid =:p_carrid AND connid =:p_connid

ENDEXEC。

有人知道是否可以这样做?

如果没有,还有其他解决方法吗?

提前谢谢

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

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


大家好,

我正在尝试执行SELECT语句,以便按照以下说明从外部Oracle DB表中获取数据到SAP:

EXEC SQL。

从城市选择城市

进入结构:wa

来自spfli

mandt =:sy-mandt AND

carrid =:p_carrid AND connid =:p_connid

ENDEXEC。

但是,我需要从变量而不是上面的解决方案中指明外部表名称。 也就是说,声明一个变量并在其中存储表的名称(例如,spfli)。 产生的ABAP代码类似于:

EXEC SQL。

从城市选择城市

进入结构:wa

来自

mandt =:sy-mandt AND

carrid =:p_carrid AND connid =:p_connid

ENDEXEC。

有人知道是否可以这样做?

如果没有,还有其他解决方法吗?

提前谢谢

付费偷看设置
发送
9条回答
空代码
1楼 · 2020-08-15 16:51.采纳回答

是的,正如Suhas所说,您可以使用ADBC API和他的类CL_SQL_CONNECTION来实现这一目标...

这是一个小例子:

 参数:p_carrid TYPE spfli-carrid,
                            p_connid TYPE spfli-connid。

 数据:
   l_con_ref类型参考cl_sql_connection,
   l_stmt TYPE字符串,
   l_stmt_ref类型引用到cl_sql_statement,
   l_dref TYPE REF TO数据,
   l_res_ref类型参考cl_sql_result_set,
   l_col1 TYPE spfli-carrid,
   l_col2 TYPE spfli-connid,
   l_wa TYPE spfli。

 常数:
   c_tabname TYPE字符串VALUE'SPFLI'。


 *创建连接对象
 创建对象l_con_ref。

 *创建SQL语句对象
 CONCATENATE'select * from'c_tabname'其中carrid =? 和connid =?'
        INTO l_stmt由空格分隔。  " #EC NOTEXT

 l_stmt_ref = l_con_ref-> create_statement()。

 *绑定输入变量
 将l_col1的引用获取到l_dref中。
 l_stmt_ref-> set_param(l_dref)。
 将l_col2的引用获取到l_dref中。
 l_stmt_ref-> set_param(l_dref)。

 *设置输入值并执行查询
 l_col1 = p_carrid。
 l_col2 = p_connid。

 l_res_ref = l_stmt_ref-> execute_query(l_stmt)。

 *设置输出结构
 引用l_wa到l_dref。
 l_res_ref-> set_param_struct(l_dref)。

 *显示结果
 当l_res_ref-> next()> 0时。
   写:/'结果:',l_wa-carrid,l_wa-connid。
 结束。

 *关闭结果集对象
 l_res_ref-> close()。
 

否则,您也可以使用FM DB_EXECUTE_SQL ...

K,

m。

小c菟菟
2楼-- · 2020-08-15 17:16

您是如何解决的?

BR美林

哎,真难
3楼-- · 2020-08-15 17:11

你好,

否则,您将无法在本机SQL中使用动态令牌。 为了满足您的要求,您必须使用[ADBC | http://help.sap .com/abapdocu_702/en/abenadbc.htm ]类。

BR,

苏哈斯

PS:IMHO ADBC类更易于使用和维护????

hongfeng1314
4楼-- · 2020-08-15 17:17

感谢Suhas,

我会留意未来的。

compass1988
5楼-- · 2020-08-15 17:04

看看程序adbc_demo。 很好。

Keshav

Tong__Ming
6楼-- · 2020-08-15 17:16

您可以尝试在运行时使用SQL语句动态创建FORM并执行该FORM。

SAP砖家
7楼-- · 2020-08-15 16:54

你能尝试这样的事情吗

数据:lv_table类型的字符串值'theTable'。

select * from:lv_table

一周热门 更多>