12
返回列表 发新帖
楼主: showxz

ABAP支持不支持动态SQL?W39版主,帮忙呀

[复制链接]
论坛徽章:
13
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44喜羊羊
日期:2015-03-29 14:09:22鲜花蛋
日期:2012-02-17 14:01:342012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412010年世界杯参赛球队:意大利
日期:2010-07-03 12:16:242010新春纪念徽章
日期:2010-03-01 11:20:522009日食纪念
日期:2009-07-22 09:30:00奥运会纪念徽章:艺术体操
日期:2008-09-16 10:57:10奥运会纪念徽章:射击
日期:2008-08-21 14:50:56
11#
发表于 2007-3-19 17:05 | 只看该作者
REPORT demo_select_dynamic_database .
DATA wa TYPE scarr.

DATA name(10) TYPE c VALUE 'SCARR'.

SELECT *
INTO wa
FROM (name) CLIENT SPECIFIED
WHERE mandt = '000'.

WRITE: / wa-carrid, wa-carrname.

ENDSELECT.





REPORT demo_select_dynamic_conditions .

DATA: cond(72) TYPE c,
itab LIKE TABLE OF cond.

PARAMETERS: city1(10) TYPE c, city2(10) TYPE c.

DATA wa TYPE spfli-cityfrom.

CONCATENATE 'CITYFROM = ''' city1 '''' INTO cond.
APPEND cond TO itab.
CONCATENATE 'OR CITYFROM = ''' city2 '''' INTO cond.
APPEND cond TO itab.
CONCATENATE 'OR CITYFROM = ''' 'BERLIN' '''' INTO cond.
APPEND cond TO itab.

LOOP AT itab INTO cond.
WRITE cond.
ENDLOOP.

SKIP.

SELECT cityfrom
INTO wa
FROM spfli
WHERE (itab).

WRITE / wa.

ENDSELECT.




REPORT demo_select_dynamic_columns .

DATA: itab TYPE STANDARD TABLE OF spfli,
wa LIKE LINE OF itab.

DATA: line(72) TYPE c,
list LIKE TABLE OF line(72).

line = ' CITYFROM CITYTO '.
APPEND line TO list.

SELECT DISTINCT (list)
INTO CORRESPONDING FIELDS OF TABLE itab
FROM spfli.

IF sy-subrc EQ 0.
LOOP AT itab INTO wa.
WRITE: / wa-cityfrom, wa-cityto.
ENDLOOP.
ENDIF.

使用道具 举报

回复
论坛徽章:
0
12#
发表于 2007-3-21 16:11 | 只看该作者
whaisheng给的demo不错

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
13#
发表于 2007-5-31 11:46 | 只看该作者
同志们都理解错了,楼主问的是native sql里的动态sql
如:
EXEC SQL PERFORMING sub_append_data.
   select MANDT,
               SEQNO
            into :g_zfibxsum-MANDT,
                  :g_zfibxsum-SEQNO
           from lis_test.liaccsapsummary
ENDEXEC.
此处的sql语句是否可以动态指定,如动态指定一个表名:
如:
l_table = 'lis_test.liaccsapsummary'.
EXEC SQL PERFORMING sub_append_data.
   select MANDT,
               SEQNO
            into :g_zfibxsum-MANDT,
                  :g_zfibxsum-SEQNO
           from (l_table)
ENDEXEC.
但上述语句是会报错的

使用道具 举报

回复
论坛徽章:
6
生肖徽章:羊
日期:2007-09-26 17:02:14ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:狗
日期:2008-10-14 10:47:19生肖徽章2007版:牛
日期:2008-10-24 11:04:53生肖徽章2007版:兔
日期:2009-11-16 18:40:362010新春纪念徽章
日期:2010-03-01 11:20:51
14#
 楼主| 发表于 2007-5-31 14:35 | 只看该作者
嘿嘿, 谢谢大伙.

whaisheng提供的例子是对的,我是问的open sql的, 至于native sal,项目中还没有用过.

但也谢谢 izyw

使用道具 举报

回复
论坛徽章:
33
嫦娥
日期:2008-03-17 09:35:292010新春纪念徽章
日期:2010-03-01 11:04:582013年新春福章
日期:2013-02-25 14:51:24蛋疼蛋
日期:2013-03-19 10:28:51
15#
发表于 2007-6-1 08:34 | 只看该作者
学习.

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
16#
发表于 2007-6-1 15:53 | 只看该作者
要看你的系统版本是什么,我记得ECC5还是ECC6提供了一系列的class可以实现dynamic sql,不用写死句子的。之前看过一个老外的例子

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2007-6-24 13:06 | 只看该作者

看这个有没有用

/nse38 ADBC_DEMO

使用道具 举报

回复
论坛徽章:
0
18#
发表于 2007-6-25 09:27 | 只看该作者
ABAP动态查询的实现:可以完全实现动态查询,每个字段都可以动态。


(1) 利用宏


(2) 利用abap指针


(3) 利用FIELD-SYMBOL


具体实现:


1.结构的动态查询


DEFINE Select_DATA_TO_WA.


Select &1


FROM &2


INTO CORRESPONDING FIELDS OF &3


Where (&4).


EXIT.


ENDSelect.


END-OF-DEFINITION.


2.变量的动态查询


DEFINE Select_DATA_TO_VARIANT.


Select &1


FROM &2


INTO &3


Where (&4).


EXIT.


ENDSelect.


END-OF-DEFINITION.


3.内表的动态查询


DEFINE Select_DATA_TO_VARIANT.


Select &1


FROM &2


INTO CORRESPONDING FIELDS OF TABLE &3


Where (&4).


EXIT.


ENDSelect.


END-OF-DEFINITION.




具体程序实现:


DATA: L_FIELD(100) TYPE C,


L_TABLE(10) TYPE C,


L_COND(100) TYPE C.


DATA: I_COND TYPE TALBE OF L_COND.


FIELD-SYMBOLS TYPE ANY.




START-OF-SelectION.


CONCATENATE ‘CARRID’ ‘CONNID’ ‘CITYFROM’


INTO L_S


SEPARATE BY SPACE.


CONCATENATE ‘CONNID = ‘ ‘’ ‘0123’ ‘’’’ INTO L_COND.


APPEND COND TO I_COND.


L_TABLE = ‘SPFLI’.


IF IS ASSIGNED.


UNASSIGN .


ASSIGN SPFLI TO .


ELSE.


ASSIGN SPFLI TO .


ENDIF.




Select_DATA_TO_WA (L_S) (L_TABLE) I_COND.

使用道具 举报

回复
论坛徽章:
1
目光如炬
日期:2015-05-25 17:31:39
19#
发表于 2007-7-10 10:51 | 只看该作者
动态表名, 动态字段,动态条件 都好象都是可以的
放到一个STRING里面, 然后加括号就可以执行了.

  CONCATENATE '/BIC/T' i_object INTO id_text.

  CONCATENATE id_name ' = ' l_mark l_wrk_hier-nodename l_mark
    INTO l_con_sql.


  TRY.
        SELECT SINGLE txtsh FROM  (id_text)
               INTO   l_shtext
               WHERE (l_con_sql).
    CATCH cx_sy_dynamic_osql_error.
        MESSAGE `Wrong WHERE condition!` TYPE 'I'.
    ENDTRY.

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2007-7-20 23:13 | 只看该作者
受益匪浅!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表