Abap 如何执行存储在变量中的OpenSQL查询?
是否可以将串联的select查询存储在变量中并执行??abap变量中是否有任何关键字可以运行字符串???是的,使用viaAbap 如何执行存储在变量中的OpenSQL查询?,abap,opensql,Abap,Opensql,是否可以将串联的select查询存储在变量中并执行??abap变量中是否有任何关键字可以运行字符串???是的,使用viacl\u sql\u语句类进行本机sql注入是可能的,您可以查看internet上的文档。但是,您应该小心,因为本机sql注入可能是危险的。您可以查看演示程序ADBC\u demo DATA: QUERY TYPE STRING, Q2 TYPE STRING, MAINQUERY TYPE STRING. QUERY = 'SELECT MARA~MATNR MA
cl\u sql\u语句
类进行本机sql注入是可能的,您可以查看internet上的文档。但是,您应该小心,因为本机sql注入可能是危险的。您可以查看演示程序ADBC\u demo
DATA: QUERY TYPE STRING,
Q2 TYPE STRING,
MAINQUERY TYPE STRING.
QUERY = 'SELECT MARA~MATNR MARA~MBRSH MARA~MTART MARA~ERSDA MARA~PACKCODE FROM MARA INTO TABLE ITAB'.
Q2 = 'WHERE MARA~MBRSH = IDNAME.'.
CONCATENATE QUERY Q2 INTO MAINQUERY.
WRITE: /3 MAINQUERY.
MAINQUERY.
还有另一种方法,即动态选择查询创建,但必须键入“select”关键字。这是一些有用的信息 是的,使用via
cl\u sql\u语句
class进行本机sql注入是可能的,您可以查看internet上的文档。但是,您应该小心,因为本机sql注入可能是危险的。您可以查看演示程序ADBC\u demo
DATA: QUERY TYPE STRING,
Q2 TYPE STRING,
MAINQUERY TYPE STRING.
QUERY = 'SELECT MARA~MATNR MARA~MBRSH MARA~MTART MARA~ERSDA MARA~PACKCODE FROM MARA INTO TABLE ITAB'.
Q2 = 'WHERE MARA~MBRSH = IDNAME.'.
CONCATENATE QUERY Q2 INTO MAINQUERY.
WRITE: /3 MAINQUERY.
MAINQUERY.
还有另一种方法,即动态选择查询创建,但必须键入“select”关键字。这是一些有用的信息 基于Oguz提案的解决方案:
DATA: con_ref TYPE REF TO cl_sql_connection,
l_sqlerr_ref TYPE REF TO cx_sql_exception.
DATA:
l_stmt TYPE string,
l_stmt_ref TYPE REF TO cl_sql_statement.
CREATE OBJECT con_ref.
con_ref = cl_sql_connection=>get_connection( ).
" create a statement object
l_stmt_ref = con_ref->create_statement( ).
"Create query
CONCATENATE
'insert into' p_tabsim 'select * from' p_tabreal
INTO l_stmt SEPARATED BY space.
TRY .
l_stmt_ref->execute_update( l_stmt ).
CATCH cx_sql_exception INTO l_sqlerr_ref.
MESSAGE 'Problem' TYPE 'W'.
* RAISE EXCEPTION l_sqlerr_ref.
ENDTRY.
con_ref->commit( ).
con_ref->close( ).
您应该仔细修改SQL查询,因为本机SQL高度依赖于DB后端。例如,查询中的~
符号与大多数数据库不兼容,列通常需要逗号/大写
有两种方法可以完成这项任务:您也可以使用不推荐的
EXEC-SQL
,或者,但是现在强烈反对使用这些构造。是最简单和最新的,正如Oguz明智地指出的那样。基于Oguz建议的解决方案:
DATA: con_ref TYPE REF TO cl_sql_connection,
l_sqlerr_ref TYPE REF TO cx_sql_exception.
DATA:
l_stmt TYPE string,
l_stmt_ref TYPE REF TO cl_sql_statement.
CREATE OBJECT con_ref.
con_ref = cl_sql_connection=>get_connection( ).
" create a statement object
l_stmt_ref = con_ref->create_statement( ).
"Create query
CONCATENATE
'insert into' p_tabsim 'select * from' p_tabreal
INTO l_stmt SEPARATED BY space.
TRY .
l_stmt_ref->execute_update( l_stmt ).
CATCH cx_sql_exception INTO l_sqlerr_ref.
MESSAGE 'Problem' TYPE 'W'.
* RAISE EXCEPTION l_sqlerr_ref.
ENDTRY.
con_ref->commit( ).
con_ref->close( ).
您应该仔细修改SQL查询,因为本机SQL高度依赖于DB后端。例如,查询中的~
符号与大多数数据库不兼容,列通常需要逗号/大写
有两种方法可以完成这项任务:您也可以使用不推荐的
EXEC-SQL
,或者,但是现在强烈反对使用这些构造。是最简单和最新的,正如Oguz明智地指出的那样。…为什么?您计划如何提供适当的目标表?您想要解决的问题是什么?select语句的哪些部分必须是可变的,哪些部分可以固定?…为什么?您计划如何提供适当的目标表?您想要解决的问题是什么?select语句的哪些部分必须是可变的,哪些部分可以固定?