ABAP内表导出MYSQL 代码
用ABAP将SAP的表结构导出成mysql的代码
*&---------------------------------------------------------------------*
*& Report Y_TABLE_FIELD_TO_MYSQL_CODE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Y_TABLE_FIELD_TO_MYSQL_CODE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_TNAME LIKE DD03L-TABNAME.
SELECTION-SCREEN END OF BLOCK B1.
*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
* PARAMETERS:P_CREATE RADIOBUTTON GROUP RBG1 DEFAULT 'X',
* P_UPDATE RADIOBUTTON GROUP RBG1,
* P_DELETE RADIOBUTTON GROUP RBG1.
*SELECTION-SCREEN END OF BLOCK B2.
INITIALIZATION.
*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM FRM_GENERA_MYSQL_CODE.
*&---------------------------------------------------------------------*
*& Form FRM_GENERA_MYSQL_CODE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_GENERA_MYSQL_CODE .
DATA:LV_MYSQL_CODE TYPE STRING.
SELECT
DD03L~TABNAME AS TABNAME,
DD03L~FIELDNAME AS FIELDNAME,
DD03L~AS4LOCAL AS AS4LOCAL,
DD03L~AS4VERS AS AS4VERS,
DD03L~POSITION AS POSITION,
DD03L~KEYFLAG AS KEYFLAG,
DD03L~MANDATORY AS MANDATORY,
DD03L~ROLLNAME AS ROLLNAME,
DD03L~CHECKTABLE AS CHECKTABLE,
DD03L~ADMINFIELD AS ADMINFIELD,
DD03L~INTTYPE AS INTTYPE,
DD03L~INTLEN AS INTLEN,
DD03L~REFTABLE AS REFTABLE,
DD03L~PRECFIELD AS PRECFIELD,
DD03L~REFFIELD AS REFFIELD,
DD03L~CONROUT AS CONROUT,
DD03L~NOTNULL AS NOTNULL,
DD03L~DATATYPE AS DATATYPE,
DD03L~LENG AS LENG,
DD03L~DECIMALS AS DECIMALS,
DD03L~DOMNAME AS DOMNAME,
DD03L~SHLPORIGIN AS SHLPORIGIN,
DD03L~TABLETYPE AS TABLETYPE,
DD03L~DEPTH AS DEPTH,
DD03L~COMPTYPE AS COMPTYPE,
DD03L~REFTYPE AS REFTYPE,
DD03L~LANGUFLAG AS LANGUFLAG,
DD03L~DBPOSITION AS DBPOSITION,
DD03L~ANONYMOUS AS ANONYMOUS,
DD03L~OUTPUTSTYLE AS OUTPUTSTYLE,
DD03L~SRS_ID AS SRSID,
DD03M~SCRTEXT_S,
DD03M~SCRTEXT_M,
DD03M~SCRTEXT_L,
DD02T~DDTEXT AS DDTEXT
INTO TABLE @DATA(LT_DD03V)
FROM DD03L LEFT OUTER JOIN DD02T
ON DD02T~TABNAME = DD03L~TABNAME
AND DD02T~DDLANGUAGE = @SY-LANGU
LEFT OUTER JOIN DD03M
ON DD03M~TABNAME = DD03L~TABNAME
AND DD03M~FIELDNAME = DD03L~FIELDNAME
AND DD03M~DDLANGUAGE = @SY-LANGU
WHERE DD03L~TABNAME EQ @P_TNAME
AND DD03L~FIELDNAME NE '.INCLUDE'
ORDER BY POSITION.
DATA:LV_STREMP TYPE STRING,
LV_MYSQL_FIELD_TYPE TYPE STRING,"CHAR , VARCHAR,INT,BIGING,TINYINT,DATETIME,TIMESTAMP,DECIMAL
LV_END_FLAG TYPE C,
LV_MYSQL_KEY TYPE STRING.
LOOP AT LT_DD03V ASSIGNING FIELD-SYMBOL(<FS_DD03V>).
AT FIRST.
CONCATENATE 'CREATE TABLE IF NOT EXISTS' P_TNAME INTO LV_MYSQL_CODE SEPARATED BY SPACE.
LV_MYSQL_CODE = LV_MYSQL_CODE && '('.
ENDAT.
IF <FS_DD03V>-KEYFLAG EQ 'X'.
IF LV_MYSQL_KEY IS INITIAL.
LV_MYSQL_KEY = <FS_DD03V>-FIELDNAME.
ELSE.
CONCATENATE LV_MYSQL_KEY <FS_DD03V>-FIELDNAME INTO LV_MYSQL_KEY SEPARATED BY ','.
ENDIF.
ENDIF.
"动态生成类型改这里,默认都是VARCHAR
* CASE <FS_DD03V>-INTTYPE.
* WHEN 'C' OR 'N'.
* LV_MYSQL_FIELD_TYPE = 'VARCHAR'.
* WHEN ''.
* WHEN OTHERS.
* ENDCASE.
CONCATENATE <FS_DD03V>-FIELDNAME 'VARCHAR(' <FS_DD03V>-INTLEN ')' INTO LV_STREMP SEPARATED BY SPACE.
IF <FS_DD03V>-KEYFLAG EQ 'X'..
LV_STREMP = LV_STREMP && ' NOT NULL COMMENT ''' && <FS_DD03V>-SCRTEXT_M && ''','.
ELSE.
LV_STREMP = LV_STREMP && ' COMMENT ''' && <FS_DD03V>-SCRTEXT_M && ''','.
ENDIF.
LV_MYSQL_CODE = LV_MYSQL_CODE && LV_STREMP.
AT LAST.
LV_END_FLAG = 'X'.
LV_MYSQL_CODE = LV_MYSQL_CODE && 'PRIMARY KEY(' && LV_MYSQL_KEY && ') ) ENGINE=INNODB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1 COMMENT=''' && <FS_DD03V>-DDTEXT && ''';'."改字符集在这里
ENDAT.
IF LV_END_FLAG NE 'X'.
* LV_STREMP = LV_STREMP && ','.
* LV_MYSQL_CODE = LV_MYSQL_CODE && LV_STREMP.
ENDIF.
CLEAR:LV_STREMP.
ENDLOOP.
IF LV_MYSQL_CODE IS NOT INITIAL.
PERFORM FRM_DOWNLOAD_TXT USING LV_MYSQL_CODE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TXT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_MYSQL_CODE
*&---------------------------------------------------------------------*
FORM FRM_DOWNLOAD_TXT USING P_LV_MYSQL_CODE.
DATA : c_file_path TYPE string.
DATA:LT_TABLE TYPE TABLE OF STRING,
LS_TABLE LIKE LINE OF LT_TABLE.
LS_TABLE = P_LV_MYSQL_CODE.
APPEND LS_TABLE TO LT_TABLE.
c_file_path = 'D:/MYSQL_CODE.TXT'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = c_file_path "file path
filetype = 'DAT'
TABLES
data_tab = LT_TABLE "internal table name
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc = 0.
DATA : w_msg(100) TYPE c.
CONCATENATE text-001 c_file_path INTO w_msg SEPARATED BY space. "file downloaded message
MESSAGE w_msg TYPE 'S'.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架