|
************************************************************************
* system name :
* author : jinlei
* program name : ZSQL
************************************************************************
REPORT ZSQL MESSAGE-ID AT
NO STANDARD PAGE HEADING.
INCLUDE <SYMBOL>.
INCLUDE <LINE>.
INCLUDE <ICON>.
TABLES: DD03L, DD01L, DD02T, DD17S, DD12T, DD04T.
DATA: BEGIN OF ITAB_PROG OCCURS 1,
CODE(80) TYPE C,
END OF ITAB_PROG.
DATA: BEGIN OF ITAB_SQL OCCURS 1,
CODE(80) TYPE C,
END OF ITAB_SQL.
DATA: BEGIN OF ITAB_COL OCCURS 1,
COL(30) TYPE C,
ALIAS(10) TYPE C,
END OF ITAB_COL.
DATA: BEGIN OF ITAB_TAB OCCURS 1,
TAB(10) TYPE C,
ALIAS(10) TYPE C,
END OF ITAB_TAB.
DATA: BEGIN OF ITAB_WRITE OCCURS 1,
DATA(80) TYPE C,
END OF ITAB_WRITE.
DATA: BEGIN OF ITAB_INTO OCCURS 1,
CODE(80) TYPE C,
END OF ITAB_INTO.
DATA: BEGIN OF ITAB_DEL OCCURS 1,
TABIX TYPE I,
CODE(80) TYPE C,
END OF ITAB_DEL.
DATA: BEGIN OF ITAB_INDEX OCCURS 1,
TAB(10) TYPE C,
INDEX LIKE DD12L-DBINDEX,
INDEX_TEXT LIKE DD12T-DDTEXT,
INDEX_FIELD LIKE DD17S-FIELDNAME,
FIELD_TEXT LIKE DD04T-DDTEXT,
PLUS TYPE C,
END OF ITAB_INDEX.
DATA: BEGIN OF ITAB_LEN OCCURS 1,
LEN TYPE I,
END OF ITAB_LEN.
DATA: BEGIN OF ITAB_FIELD OCCURS 1,
FIELD LIKE DD03L-FIELDNAME,
TEXT(40) TYPE C,
END OF ITAB_FIELD.
DATA: BEGIN OF ITAB_DIST OCCURS 1,
CODE(80) TYPE C,
END OF ITAB_DIST.
DATA: BEGIN OF FCODE_TAB OCCURS 10,
FCODE(4),
END OF FCODE_TAB.
DATA: SQL_TABIX LIKE SY-TABIX,
SELECT_KEY(10) TYPE C,
ETC(80) TYPE C.
DATA: TEMP_COL(30) TYPE C,
TEMP_CHAR TYPE C,
COUNT1(2) TYPE N,
COUNT2(2) TYPE N,
LIKE_COL(30) TYPE C,
COL_LIN TYPE I,
ENDLEN(3) TYPE N VALUE 1.
DATA: FROM_FLAG TYPE C,
ALIAS_FLAG TYPE C,
END_FLAG TYPE C,
UPDATE_FLAG TYPE C,
CONFIRM_FLAG TYPE C.
DATA: COL_LENGTH LIKE DD03L-LENG.
DATA: PROG(8) TYPE C,
MSG(120) TYPE C,
MSG_TEXT(80) TYPE C,
SUBRC LIKE SY-SUBRC,
MARK TYPE C VALUE 'X',
LINE_CNT TYPE I,
FILESIZE TYPE I.
SET TITLEBAR '000'.
SET PF-STATUS 'PFSTA00'.
WRITE: /1 'Edit Your SQL ...............' COLOR 2.
INITIALIZATION.
AT USER-COMMAND.
IF SY-UCOMM = 'EDIT'.
PERFORM EDIT_SQL.
PERFORM WRITE_SQL_REPORT.
ELSEIF SY-UCOMM = 'EXEC'.
IF UPDATE_FLAG = SPACE.
PERFORM SQL_GENERATE USING 'Y' ITAB_COL-COL 'A'. "INIT FLAG = 'Y'
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
PERFORM CHECK_SQL_CODE.
IF SY-SUBRC <> 0.
MESSAGE I315 WITH 'Check your SQL statement!!!'.
EXIT.
ENDIF.
READ TABLE ITAB_COL INDEX 1.
IF SY-SUBRC = 0.
PERFORM EXEC_SQL.
ENDIF.
ELSE.
IF SY-UNAME = '31034951' OR SY-UNAME = 'GOLDENMP'
OR SY-UNAME = 'MMI01' OR SY-UNAME = 'BBLEE' OR SY-UNAME = 'HYHAN'
OR SY-UNAME = '11101080'
OR SY-UNAME = 'QMP09' OR SY-UNAME = '31871741'.
*****> PERFORM CONFIRM_UPDATE.
PERFORM EXEC_SQL_UPDATE.
* CASE CONFIRM_FLAG.
* WHEN 'N'. EXIT.
* WHEN 'A'. EXIT.
* WHEN 'J'. PERFORM EXEC_SQL_UPDATE.
* ENDCASE.
ELSE.
MESSAGE I315 WITH '寸脚俊霸绰 弊繁 SQL阑 镜 鼻茄捞 绝嚼聪促.'.
EXIT.
ENDIF.
ENDIF.
ELSEIF SY-UCOMM = 'BBCK'.
SY-LSIND = 0.
ELSEIF SY-UCOMM = 'BCCK'.
REFRESH ITAB_INDEX.
SY-LSIND = SY-LSIND - 3.
ELSEIF SY-UCOMM = 'PLAN'.
PERFORM EXPLAIN_SQLTAB(RSXPLAIN) TABLES ITAB_SQL
USING SUBRC.
ELSEIF SY-UCOMM = 'INDX'.
PERFORM VIEW_INDX_TAB.
ELSEIF SY-UCOMM = 'TABL' OR SY-UCOMM = 'DIST'.
IF SY-UCOMM = 'TABL'.
SET TITLEBAR 'W03'.
ELSE.
SET TITLEBAR 'W05'.
ENDIF.
PERFORM VIEW_FIELD_TAB.
ELSEIF SY-UCOMM = 'CHOS'.
PERFORM CHOS_INDX_TAB.
ELSEIF SY-UCOMM = 'CHSE'.
IF ITAB_TAB-TAB = SPACE.
EXIT.
ENDIF.
IF SY-TITLE = 'Choose Table for field search'.
PERFORM CHSE_VIEW_FIELD.
ELSEIF SY-TITLE = 'Choose Table for field distribution'.
PERFORM CHSE_FIELD_DIST.
ELSEIF SY-TITLE = 'Choose Field for distribution'.
PERFORM SEL_FIELD_DIST.
ENDIF.
ELSEIF SY-UCOMM = 'SASC'.
PERFORM EXEC_SASC.
ELSEIF SY-UCOMM = 'SDES'.
PERFORM EXEC_SDES.
ELSEIF SY-UCOMM = 'GRAF'.
PERFORM CREATE_GRAF.
ELSEIF SY-UCOMM = 'UPLD'.
PERFORM SQL_UPLOAD.
IF SY-SUBRC <> 0.
MESSAGE I315 WITH 'Upload Error'.
EXIT.
ENDIF.
IF FILESIZE <> 0.
PERFORM EDIT_SQL.
PERFORM WRITE_SQL_REPORT.
ENDIF.
ELSEIF SY-UCOMM = 'DOWN'.
PERFORM SQL_DOWNLOAD.
IF SY-SUBRC <> 0.
MESSAGE I315 WITH 'Download Error'.
ENDIF.
ELSEIF SY-UCOMM = 'HELP'.
SUBMIT ZCSQL1 AND RETURN.
ENDIF.
AT LINE-SELECTION.
IF SY-LSIND >= 3 AND ITAB_INDEX-INDEX <> SPACE.
PERFORM WRITE_INDEX_HIER.
ELSEIF SY-PFKEY = 'PFSTA04' AND ITAB_TAB-TAB <> SPACE.
IF SY-TITLE = 'Choose Table for field search'.
PERFORM CHSE_VIEW_FIELD.
ELSEIF SY-TITLE = 'Choose Table for field distribution'.
PERFORM CHSE_FIELD_DIST.
ELSEIF SY-TITLE = 'Choose Field for distribution'
AND ITAB_FIELD-FIELD <> SPACE.
PERFORM SEL_FIELD_DIST.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form SQL_PARSING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SQL_PARSING.
DATA: AGGR_FLAG TYPE C,
AGGR_CNT TYPE I.
LOOP AT ITAB_SQL.
IF SY-TABIX = 1.
SHIFT ITAB_SQL-CODE LEFT DELETING LEADING SPACE.
ENDIF.
SQL_TABIX = SY-TABIX + 1.
SPLIT ITAB_SQL-CODE AT SPACE INTO SELECT_KEY ETC.
IF SELECT_KEY = 'SELECT'.
CLEAR: TEMP_COL, TEMP_CHAR, COUNT1, COUNT2, FROM_FLAG, ALIAS_FLAG,
UPDATE_FLAG, END_FLAG.
DO.
TEMP_CHAR = ETC+COUNT2(1).
IF TEMP_CHAR = '('.
IF AGGR_CNT = 0.
AGGR_FLAG = 'Y'.
ENDIF.
AGGR_CNT = AGGR_CNT + 1.
ELSEIF TEMP_CHAR = ')'.
AGGR_CNT = AGGR_CNT - 1.
IF AGGR_CNT = 0.
AGGR_FLAG = ' '.
ENDIF.
ENDIF.
IF TEMP_CHAR = SPACE OR TEMP_CHAR = ','.
IF FROM_FLAG = 'Y'.
IF TEMP_COL <> SPACE AND TEMP_COL <> 'WHERE'.
IF TEMP_CHAR = SPACE.
IF ITAB_TAB-TAB = SPACE.
ITAB_TAB-TAB = TEMP_COL.
ALIAS_FLAG = 'Y'.
ELSE.
ITAB_TAB-ALIAS = TEMP_COL.
ENDIF.
ELSEIF ALIAS_FLAG <> 'Y'.
ITAB_TAB-TAB = TEMP_COL.
APPEND ITAB_TAB.
CLEAR ITAB_TAB.
ELSEIF ALIAS_FLAG = 'Y'.
ITAB_TAB-ALIAS = TEMP_COL.
APPEND ITAB_TAB.
CLEAR ITAB_TAB.
CLEAR ALIAS_FLAG.
ENDIF.
ELSEIF TEMP_COL = 'WHERE'.
IF ITAB_TAB-TAB <> SPACE.
COLLECT ITAB_TAB.
ENDIF.
EXIT.
ENDIF.
CLEAR: TEMP_COL, COUNT1.
COUNT2 = COUNT2 + 1.
IF COUNT2 >= 80.
PERFORM READ_NEXT_SQL.
IF END_FLAG = 'Y'.
EXIT.
ENDIF.
ENDIF.
CONTINUE.
ELSE.
IF TEMP_COL <> SPACE AND TEMP_COL <> 'FROM'
AND TEMP_COL <> 'DISTINCT'
AND ( TEMP_CHAR = ',' OR TEMP_CHAR = ' ' )
AND AGGR_FLAG = ' ' .
SEARCH TEMP_COL FOR '('.
IF SY-FDPOS = 0.
SPLIT TEMP_COL AT '.' INTO ITAB_COL-ALIAS ITAB_COL-COL.
IF ITAB_COL-COL = SPACE.
ITAB_COL-COL = ITAB_COL-ALIAS.
CLEAR ITAB_COL-ALIAS.
ENDIF.
ELSE.
ITAB_COL-COL = TEMP_COL.
ENDIF.
APPEND ITAB_COL.
ELSEIF TEMP_COL = 'FROM'.
FROM_FLAG = 'Y'.
ENDIF.
IF AGGR_FLAG <> 'Y'.
CLEAR: TEMP_COL, COUNT1.
ELSE.
IF TEMP_CHAR <> '''' AND TEMP_CHAR <> ','
AND COUNT1 < 28.
TEMP_COL+COUNT1(1) = ETC+COUNT2(1).
COUNT1 = COUNT1 + 1.
ENDIF.
ENDIF.
COUNT2 = COUNT2 + 1.
IF COUNT2 >= 80.
PERFORM READ_NEXT_SQL.
IF END_FLAG = 'Y'.
EXIT.
ENDIF.
ENDIF.
CONTINUE.
ENDIF.
ELSE.
IF TEMP_CHAR <> '''' AND TEMP_CHAR <> ',' AND COUNT1 < 28.
TEMP_COL+COUNT1(1) = ETC+COUNT2(1).
ENDIF.
ENDIF.
COUNT1 = COUNT1 + 1.
COUNT2 = COUNT2 + 1.
ENDDO.
IF ITAB_TAB-TAB <> SPACE.
COLLECT ITAB_TAB.
ENDIF.
ELSEIF SELECT_KEY = 'DELETE' OR SELECT_KEY = 'UPDATE'
OR SELECT_KEY = 'INSERT'.
UPDATE_FLAG = 'Y'.
ENDIF.
ENDLOOP.
ENDFORM. " SQL_PARSING
*&---------------------------------------------------------------------*
*& Form READ_NEXT_SQL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM READ_NEXT_SQL.
READ TABLE ITAB_SQL INDEX SQL_TABIX.
IF SY-SUBRC <> 0.
END_FLAG = 'Y'.
EXIT.
ENDIF.
ETC = ITAB_SQL-CODE.
SQL_TABIX = SQL_TABIX + 1.
CLEAR: TEMP_COL, COUNT1, COUNT2.
ENDFORM. " READ_NEXT_SQL
*&---------------------------------------------------------------------*
*& Form DECLARE_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DECLARE_HEADER.
ITAB_PROG-CODE = 'PROGRAM SUBPOOL.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'DATA REC_COUNT(7) TYPE N.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'DATA: BEGIN OF ITAB_DATA OCCURS 1,'.
APPEND ITAB_PROG.
ITAB_WRITE-DATA = 'WRITE: /1 '.
APPEND ITAB_WRITE.
DESCRIBE TABLE ITAB_COL LINES COL_LIN.
LOOP AT ITAB_COL.
COUNT1 = SY-TABIX.
READ TABLE ITAB_TAB WITH KEY ALIAS = ITAB_COL-ALIAS.
CONCATENATE 'COL' COUNT1 INTO TEMP_COL.
SEARCH ITAB_COL-COL FOR '('.
IF SY-FDPOS <> 0.
CONCATENATE 'COL' COUNT1 '(15)' INTO ITAB_PROG-CODE.
CONCATENATE ITAB_PROG-CODE 'TYPE C,'
INTO ITAB_PROG-CODE SEPARATED BY SPACE.
ELSE.
CONCATENATE ITAB_TAB-TAB '-' ITAB_COL-COL INTO LIKE_COL.
CONCATENATE TEMP_COL 'LIKE' LIKE_COL ','
INTO ITAB_PROG-CODE SEPARATED BY SPACE.
ENDIF.
APPEND ITAB_PROG.
IF COUNT1 = 1 AND COUNT1 <> COL_LIN.
CONCATENATE 'INTO :ITAB_DATA-' TEMP_COL ',' INTO ITAB_INTO-CODE.
APPEND ITAB_INTO.
CONCATENATE 'SY-VLINE, ITAB_DATA-' TEMP_COL ','
INTO ITAB_WRITE-DATA.
APPEND ITAB_WRITE.
ELSEIF COUNT1 < COL_LIN.
CONCATENATE ':ITAB_DATA-' TEMP_COL ',' INTO ITAB_INTO-CODE.
APPEND ITAB_INTO.
CONCATENATE 'SY-VLINE, ITAB_DATA-' TEMP_COL ','
INTO ITAB_WRITE-DATA.
APPEND ITAB_WRITE.
ELSE.
IF COUNT1 = 1.
CONCATENATE 'INTO :ITAB_DATA-' TEMP_COL INTO ITAB_INTO-CODE.
APPEND ITAB_INTO.
ELSE.
CONCATENATE ':ITAB_DATA-' TEMP_COL INTO ITAB_INTO-CODE.
APPEND ITAB_INTO.
ENDIF.
CONCATENATE ' SY-VLINE,ITAB_DATA-' TEMP_COL ', SY-VLINE.'
INTO ITAB_WRITE-DATA.
APPEND ITAB_WRITE.
ENDIF.
ENDLOOP.
ITAB_PROG-CODE = ' END OF ITAB_DATA.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'FORM DYN1.'.
APPEND ITAB_PROG.
ENDFORM. " DECLARE_HEADER
*&---------------------------------------------------------------------*
*& Form WRITE_EXEC_SQL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_EXEC_SQL.
DATA: RES_SQL(80) TYPE C,
RES_LEN TYPE I,
INTO_TABIX LIKE SY-TABIX,
ORDER_FLAG TYPE C.
ITAB_PROG-CODE = 'EXEC SQL PERFORMING WRITE_DATA.'.
APPEND ITAB_PROG.
SEARCH ITAB_SQL FOR 'FROM'.
READ TABLE ITAB_SQL INDEX SY-TABIX.
IF SY-FDPOS <> 0 AND SY-FDPOS <> 1.
RES_SQL = ITAB_SQL-CODE+0(SY-FDPOS).
RES_LEN = 80 - SY-FDPOS.
ITAB_SQL-CODE = ITAB_SQL-CODE+SY-FDPOS(RES_LEN).
MODIFY ITAB_SQL INDEX SY-TABIX.
ITAB_SQL-CODE = RES_SQL.
INSERT ITAB_SQL INDEX SY-TABIX.
SY-TABIX = SY-TABIX + 1.
ENDIF.
INTO_TABIX = SY-TABIX.
LOOP AT ITAB_INTO.
ITAB_SQL-CODE = ITAB_INTO-CODE.
INSERT ITAB_SQL INDEX INTO_TABIX.
INTO_TABIX = INTO_TABIX + 1.
ENDLOOP.
SEARCH ITAB_SQL FOR 'ORDER BY'.
IF SY-SUBRC = 0.
ORDER_FLAG = 'Y'.
READ TABLE ITAB_SQL INDEX SY-TABIX.
IF SY-FDPOS <> 0 AND SY-FDPOS <> 1.
RES_SQL = ITAB_SQL-CODE+0(SY-FDPOS).
RES_LEN = 80 - SY-FDPOS.
ITAB_SQL-CODE = ITAB_SQL-CODE+SY-FDPOS(RES_LEN).
MODIFY ITAB_SQL INDEX SY-TABIX.
ITAB_SQL-CODE = RES_SQL.
INSERT ITAB_SQL INDEX SY-TABIX.
SY-TABIX = SY-TABIX + 1.
ENDIF.
ELSE.
ORDER_FLAG = 'N'.
ENDIF.
LOOP AT ITAB_SQL.
IF SY-TABIX > 1 AND ITAB_SQL-CODE+0(1) <> SPACE.
ITAB_SQL-CODE+1(79) = ITAB_SQL-CODE+(79).
ITAB_SQL-CODE+0(1) = ' '.
MODIFY ITAB_SQL INDEX SY-TABIX.
ENDIF.
ITAB_PROG-CODE = ITAB_SQL-CODE.
APPEND ITAB_PROG.
ENDLOOP.
IF ORDER_FLAG = 'N'.
READ TABLE ITAB_COL INDEX 1.
SEARCH ITAB_SQL FOR '('.
IF SY-SUBRC <> 0.
CONCATENATE 'ORDER BY' ITAB_COL-COL
INTO ITAB_PROG-CODE SEPARATED BY SPACE.
APPEND ITAB_PROG.
ENDIF.
ENDIF.
ITAB_PROG-CODE = 'ENDEXEC.'.
APPEND ITAB_PROG.
CONCATENATE 'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_PROG-CODE.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'SET TITLEBAR ''001'' WITH REC_COUNT ''Record''.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'ENDFORM.'.
APPEND ITAB_PROG.
ENDFORM. " WRITE_EXEC_SQL
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_DATA.
ITAB_PROG-CODE = 'FORM WRITE_DATA.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'FORMAT INTENSIFIED OFF.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'FORMAT COLOR 2.'.
APPEND ITAB_PROG.
LOOP AT ITAB_WRITE.
ITAB_PROG-CODE = ITAB_WRITE-DATA.
APPEND ITAB_PROG.
ENDLOOP.
ITAB_PROG-CODE = 'REC_COUNT = REC_COUNT + 1.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'ENDFORM.'.
APPEND ITAB_PROG.
ENDFORM. " WRITE_DATA
*&---------------------------------------------------------------------*
*& Form WRITE_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_HEADER.
DATA: DOMNAME LIKE DD03L-DOMNAME,
ULINE_TABIX LIKE SY-TABIX.
ITAB_PROG-CODE = 'FORMAT INTENSIFIED ON.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'FORMAT COLOR 1.'.
APPEND ITAB_PROG.
ULINE_TABIX = SY-TABIX + 1.
ITAB_PROG = 'WRITE: /1 '.
APPEND ITAB_PROG.
LOOP AT ITAB_COL.
READ TABLE ITAB_TAB WITH KEY ALIAS = ITAB_COL-ALIAS.
SELECT SINGLE DOMNAME INTO DOMNAME
FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
AND FIELDNAME = ITAB_COL-COL.
IF SY-SUBRC = 0.
SELECT SINGLE OUTPUTLEN INTO COL_LENGTH
FROM DD01L
WHERE DOMNAME = DOMNAME
AND AS4LOCAL = 'A'.
CONCATENATE '(' COL_LENGTH ')' INTO TEMP_COL.
ENDLEN = COL_LENGTH + 3 + ENDLEN.
ELSE.
CONCATENATE '(' '15' ')' INTO TEMP_COL.
ENDLEN = 18 + ENDLEN.
ENDIF.
ITAB_LEN-LEN = ENDLEN.
APPEND ITAB_LEN.
CONCATENATE '''' ITAB_COL-COL '''' INTO ITAB_COL-COL.
CONCATENATE 'SY-VLINE,' TEMP_COL ITAB_COL-COL
'CENTERED,' INTO ITAB_PROG SEPARATED BY SPACE.
APPEND ITAB_PROG.
ENDLOOP.
ITAB_PROG = 'SY-VLINE.'.
APPEND ITAB_PROG.
CONCATENATE 'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_PROG-CODE.
APPEND ITAB_PROG.
CONCATENATE 'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_PROG-CODE.
INSERT ITAB_PROG INDEX ULINE_TABIX.
CONCATENATE 'NEW-PAGE LINE-SIZE' ENDLEN '.' INTO ITAB_PROG-CODE
SEPARATED BY SPACE.
INSERT ITAB_PROG INDEX ULINE_TABIX.
ENDFORM. " WRITE_HEADER
*&---------------------------------------------------------------------*
*& Form TRANS_UPPER_ITAB_SQL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM TRANS_UPPER_ITAB_SQL.
DATA: SAVE_TABIX LIKE SY-TABIX,
TABIX_COUNT TYPE I.
REFRESH ITAB_DEL.
LOOP AT ITAB_SQL.
SAVE_TABIX = SY-TABIX.
TABIX_COUNT = TABIX_COUNT + 1.
IF ITAB_SQL-CODE = SPACE OR ITAB_SQL-CODE+(1) = '*'.
IF ITAB_SQL-CODE+(1) = '*'.
CLEAR ITAB_DEL.
ITAB_DEL-TABIX = TABIX_COUNT.
ITAB_DEL-CODE = ITAB_SQL-CODE.
APPEND ITAB_DEL.
ENDIF.
DELETE ITAB_SQL INDEX SAVE_TABIX.
CONTINUE.
ENDIF.
TRANSLATE ITAB_SQL-CODE TO UPPER CASE.
MODIFY ITAB_SQL INDEX SAVE_TABIX.
ENDLOOP.
ENDFORM. " TRANS_UPPER_ITAB_SQL
*&---------------------------------------------------------------------*
*& Form CLEAR_VAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CLEAR_VAR.
REFRESH: ITAB_PROG, ITAB_COL, ITAB_WRITE, ITAB_INTO, ITAB_TAB.
CLEAR: ITAB_PROG, ITAB_COL, ITAB_WRITE, ITAB_INTO, ITAB_TAB.
ENDLEN = 1.
ENDFORM. " CLEAR_VAR
*&---------------------------------------------------------------------*
*& Form EDIT_SQL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EDIT_SQL.
DATA: CHANGED LIKE S38E-BUF_VARIED,
FCODE LIKE SY-UCOMM,
SUBRC LIKE SY-SUBRC.
LOOP AT ITAB_DEL.
ITAB_SQL-CODE = ITAB_DEL-CODE.
INSERT ITAB_SQL INDEX ITAB_DEL-TABIX.
ENDLOOP.
CALL FUNCTION 'EDITOR_APPLICATION'
EXPORTING
APPLICATION = 'BF'
DISPLAY = ' '
NAME = 'Input Your SQL......'
IMPORTING
FCODE = FCODE
CHANGED = CHANGED
TABLES
CONTENT = ITAB_SQL.
CASE FCODE.
WHEN 'BACK'. SUBRC = 4.
WHEN 'UPD'. SUBRC = 0.
WHEN OTHERS. SUBRC = 8.
ENDCASE.
IF SUBRC <> 0.
PERFORM CLEAR_VAR.
REFRESH ITAB_SQL.
EXIT.
ENDIF.
PERFORM CLEAR_VAR.
PERFORM TRANS_UPPER_ITAB_SQL.
PERFORM SQL_PARSING.
IF UPDATE_FLAG = 'Y'.
REFRESH FCODE_TAB.
FCODE_TAB = 'PLAN'.
APPEND FCODE_TAB.
FCODE_TAB = 'INDX'.
APPEND FCODE_TAB.
FCODE_TAB = 'TABL'.
APPEND FCODE_TAB.
FCODE_TAB = 'DIST'.
APPEND FCODE_TAB.
SET PF-STATUS 'PFSTA00' EXCLUDING FCODE_TAB.
EXIT.
ENDIF.
SET PF-STATUS 'PFSTA00'.
READ TABLE ITAB_COL INDEX 1.
IF ITAB_COL-COL = '*'.
PERFORM GET_ITAB_COL_ALL.
ENDIF.
PERFORM DECLARE_HEADER.
PERFORM WRITE_HEADER.
PERFORM WRITE_EXEC_SQL.
PERFORM WRITE_DATA.
SEARCH ITAB_SQL FOR 'INTO'.
IF SY-SUBRC = 0.
LOOP AT ITAB_SQL FROM SY-TABIX.
IF ITAB_SQL-CODE+1(4) <> 'FROM'.
DELETE ITAB_SQL INDEX SY-TABIX.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " EDIT_SQL
*&---------------------------------------------------------------------*
*& Form GET_LINE_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_LINE_CHECK.
DATA: CUR_LINE TYPE I.
CUR_LINE = 1.
DO.
CLEAR MARK.
READ LINE CUR_LINE FIELD VALUE MARK.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
IF MARK = 'X'.
PERFORM GET_PRIMARY_INDEX.
CLEAR ITAB_INDEX.
ITAB_INDEX-PLUS = '4'.
ITAB_INDEX-TAB = ITAB_TAB-TAB.
SELECT * FROM DD17S
WHERE SQLTAB = ITAB_TAB-TAB
ORDER BY POSITION.
ITAB_INDEX-INDEX = ITAB_TAB-TAB.
ITAB_INDEX-INDEX+10(3) = DD17S-INDEXNAME.
SELECT SINGLE * FROM DD12T
WHERE DDLANGUAGE = 'E'
AND SQLTAB = ITAB_TAB-TAB
AND INDEXNAME = DD17S-INDEXNAME.
ITAB_INDEX-INDEX_TEXT = DD12T-DDTEXT.
SELECT SINGLE * FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
AND FIELDNAME = DD17S-FIELDNAME.
IF SY-SUBRC = 0.
SELECT SINGLE DDTEXT FROM DD04T
INTO ITAB_INDEX-FIELD_TEXT
WHERE ROLLNAME = DD03L-ROLLNAME
AND DDLANGUAGE = 'E'.
ENDIF.
ITAB_INDEX-INDEX_FIELD = DD17S-FIELDNAME.
COLLECT ITAB_INDEX.
ENDSELECT.
ENDIF.
CUR_LINE = CUR_LINE + 1.
ENDDO.
ENDFORM. " GET_LINE_CHECK
*&---------------------------------------------------------------------*
*& Form WRITE_INDEX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_INDEX.
DATA: TEMP_INDEX LIKE ITAB_INDEX.
SET PF-STATUS 'PFSTA03'.
SET TITLEBAR 'W02'.
NEW-PAGE LINE-SIZE 100.
LOOP AT ITAB_INDEX.
MOVE-CORRESPONDING ITAB_INDEX TO TEMP_INDEX.
AT NEW TAB.
SKIP 2.
WRITE: /1 'List Index for Table.' COLOR 1,
' - ', ITAB_INDEX-TAB COLOR 4.
ULINE: /1(83).
ENDAT.
AT NEW INDEX.
IF TEMP_INDEX-PLUS = '4'.
WRITE: /3 SY-VLINE, /3(2) SY-ULINE,
SYM_PLUS_FOLDER AS SYMBOL HOTSPOT ON COLOR 7,
ITAB_INDEX-INDEX COLOR 3,
TEMP_INDEX-INDEX_TEXT COLOR 2.
HIDE: ITAB_INDEX-INDEX.
ELSE.
WRITE: /3 SY-VLINE, /3(2) SY-ULINE,
SYM_MINUS_FOLDER AS SYMBOL HOTSPOT ON COLOR 7,
ITAB_INDEX-INDEX COLOR 3,
TEMP_INDEX-INDEX_TEXT COLOR 2.
HIDE: ITAB_INDEX-INDEX.
LOOP AT ITAB_INDEX WHERE INDEX = TEMP_INDEX-INDEX.
IF SY-TABIX = 1.
WRITE: /9 SY-VLINE, /9 LINE_BOTTOM_LEFT_CORNER AS LINE,
ITAB_INDEX-INDEX_FIELD COLOR 2.
ELSE.
WRITE: /9 LINE_BOTTOM_LEFT_CORNER AS LINE,
ITAB_INDEX-INDEX_FIELD COLOR 2.
ENDIF.
WRITE: ITAB_INDEX-FIELD_TEXT
UNDER TEMP_INDEX-INDEX_TEXT COLOR 2.
ENDLOOP.
ENDIF.
ENDAT.
ENDLOOP.
CLEAR ITAB_INDEX-INDEX.
ENDFORM. " WRITE_INDEX
*&---------------------------------------------------------------------*
*& Form GET_PRIMARY_INDEX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_PRIMARY_INDEX.
CLEAR ITAB_INDEX.
ITAB_INDEX-PLUS = '4'.
ITAB_INDEX-TAB = ITAB_TAB-TAB.
ITAB_INDEX-INDEX = ITAB_TAB-TAB.
ITAB_INDEX-INDEX+10(1) = '0'.
ITAB_INDEX-INDEX_TEXT = 'Primary Key'.
SELECT * FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
ORDER BY POSITION.
SELECT SINGLE DDTEXT FROM DD04T
INTO ITAB_INDEX-FIELD_TEXT
WHERE ROLLNAME = DD03L-ROLLNAME
AND DDLANGUAGE = 'E'.
ITAB_INDEX-INDEX_FIELD = DD03L-FIELDNAME.
APPEND ITAB_INDEX.
ENDSELECT.
ENDFORM. " GET_PRIMARY_INDEX
*&---------------------------------------------------------------------*
*& Form EXEC-SQL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXEC_SQL.
SET TITLEBAR '001'.
SET PF-STATUS 'PFSTA01'.
PERFORM DYN1 IN PROGRAM (PROG).
ENDFORM. " EXEC_SQL
*&---------------------------------------------------------------------*
*& Form WRITE_SQL_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_SQL_REPORT.
SY-LSIND = 0.
DESCRIBE TABLE ITAB_SQL LINES LINE_CNT.
IF LINE_CNT = 0 OR ( LINE_CNT = 1 AND ITAB_SQL-CODE = SPACE ).
WRITE: /1 'Edit Your SQL ................' COLOR 2.
ELSE.
LOOP AT ITAB_SQL.
WRITE: /1 ITAB_SQL-CODE.
ENDLOOP.
ENDIF.
ENDFORM. " WRITE_SQL_REPORT
*&---------------------------------------------------------------------*
*& Form VIEW_INDX_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM VIEW_INDX_TAB.
SET TITLEBAR 'W01'.
SET PF-STATUS 'PFSTA02'.
WINDOW STARTING AT 15 5 ENDING AT 75 15.
LOOP AT ITAB_TAB.
SELECT SINGLE * FROM DD02T
WHERE TABNAME = ITAB_TAB-TAB
AND DDLANGUAGE = 'E'.
WRITE: /3 MARK AS CHECKBOX, 7 ITAB_TAB-TAB, DD02T-DDTEXT.
HIDE: ITAB_TAB-TAB.
ENDLOOP.
CLEAR ITAB_TAB-TAB.
ENDFORM. " VIEW_INDX_TAB
*&---------------------------------------------------------------------*
*& Form VIEW_FIELD_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM VIEW_FIELD_TAB.
SET PF-STATUS 'PFSTA04' EXCLUDING 'GRAF'.
WINDOW STARTING AT 15 5 ENDING AT 90 15.
LOOP AT ITAB_TAB.
SELECT SINGLE * FROM DD02T
WHERE TABNAME = ITAB_TAB-TAB
AND DDLANGUAGE = 'E'.
WRITE: /3 ITAB_TAB-TAB, DD02T-DDTEXT.
HIDE: ITAB_TAB-TAB.
ENDLOOP.
CLEAR ITAB_TAB-TAB.
ENDFORM. " VIEW_FIELD_TAB
*&---------------------------------------------------------------------*
*& Form CHOS_INDX_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHOS_INDX_TAB.
PERFORM GET_LINE_CHECK.
DESCRIBE TABLE ITAB_INDEX LINES LINE_CNT.
IF LINE_CNT > 0.
PERFORM WRITE_INDEX.
ELSE.
MESSAGE S315 WITH 'Not Choose any table'.
ENDIF.
ENDFORM. " CHOS_INDX_TAB
*&---------------------------------------------------------------------*
*& Form CHSE_VIEW_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHSE_VIEW_FIELD.
REFRESH FCODE_TAB.
FCODE_TAB = 'CHSE'.
APPEND FCODE_TAB.
FCODE_TAB = 'GRAF'.
APPEND FCODE_TAB.
SY-LSIND = SY-LSIND - 1.
SET TITLEBAR 'W04' WITH ITAB_TAB-TAB.
SET PF-STATUS 'PFSTA04' EXCLUDING FCODE_TAB.
REFRESH ITAB_FIELD.
SELECT * FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
ORDER BY POSITION.
ITAB_FIELD-FIELD = DD03L-FIELDNAME.
SELECT SINGLE DDTEXT FROM DD04T
INTO ITAB_FIELD-TEXT
WHERE ROLLNAME = DD03L-ROLLNAME
AND DDLANGUAGE = '3'.
APPEND ITAB_FIELD.
ENDSELECT.
LOOP AT ITAB_FIELD.
WRITE: /3 ITAB_FIELD-FIELD COLOR 4, ITAB_FIELD-TEXT COLOR 2.
ENDLOOP.
CLEAR ITAB_TAB-TAB.
ENDFORM. " CHSE_VIEW_FIELD
*&---------------------------------------------------------------------*
*& Form CHSE_FIELD_DIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHSE_FIELD_DIST.
SY-LSIND = SY-LSIND - 1.
SET TITLEBAR 'W06'.
SET PF-STATUS 'PFSTA04' EXCLUDING 'GRAF'.
REFRESH ITAB_FIELD.
SELECT * FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
ORDER BY POSITION.
ITAB_FIELD-FIELD = DD03L-FIELDNAME.
SELECT SINGLE DDTEXT FROM DD04T
INTO ITAB_FIELD-TEXT
WHERE ROLLNAME = DD03L-ROLLNAME
AND DDLANGUAGE = '3'.
APPEND ITAB_FIELD.
ENDSELECT.
LOOP AT ITAB_FIELD.
WRITE: /3 ITAB_FIELD-FIELD COLOR 4, ITAB_FIELD-TEXT COLOR 2.
HIDE ITAB_FIELD-FIELD.
ENDLOOP.
CLEAR ITAB_FIELD-FIELD.
ENDFORM. " CHSE_FIELD_DIST
*&---------------------------------------------------------------------*
*& Form EXEC_SASC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXEC_SASC.
DATA: POSITION TYPE I.
POSITION = SY-STACO + SY-CUCOL.
LOOP AT ITAB_LEN.
IF ITAB_LEN-LEN > POSITION.
READ TABLE ITAB_COL INDEX SY-TABIX.
PERFORM SQL_GENERATE USING 'N' ITAB_COL-COL 'A'. "INIT FLAG = 'N'
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
PERFORM EXEC_SQL.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " EXEC_SASC
*&---------------------------------------------------------------------*
*& Form EXEC_SDES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXEC_SDES.
DATA: POSITION TYPE I.
POSITION = SY-STACO + SY-CUCOL.
LOOP AT ITAB_LEN.
IF ITAB_LEN-LEN > POSITION.
READ TABLE ITAB_COL INDEX SY-TABIX.
PERFORM SQL_GENERATE USING 'N' ITAB_COL-COL 'D'. "INIT FLAG = 'N'
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
PERFORM EXEC_SQL.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " EXEC_SDES
*&---------------------------------------------------------------------*
*& Form WRITE_INDEX_HIER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_INDEX_HIER.
SY-LSIND = 3.
READ CURRENT LINE.
READ TABLE ITAB_INDEX WITH KEY INDEX = ITAB_INDEX-INDEX.
IF ITAB_INDEX-PLUS = '3'.
ITAB_INDEX-PLUS = '4'.
ELSE.
ITAB_INDEX-PLUS = '3'.
ENDIF.
MODIFY ITAB_INDEX INDEX SY-TABIX.
PERFORM WRITE_INDEX.
CLEAR ITAB_INDEX-INDEX.
ENDFORM. " WRITE_INDEX_HIER
*&---------------------------------------------------------------------*
*& Form SEL_FIELD_DIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SEL_FIELD_DIST.
REFRESH ITAB_DIST.
SY-LSIND = SY-LSIND - 1.
SET TITLEBAR 'W07' WITH ITAB_FIELD-FIELD ITAB_TAB-TAB.
SET PF-STATUS 'PFSTA04' EXCLUDING 'CHSE'.
PERFORM GET_ITAB_DIST.
GENERATE SUBROUTINE POOL ITAB_DIST NAME PROG
MESSAGE MSG.
IF SY-SUBRC <> 0.
MSG_TEXT = MSG+(80).
WRITE: /1 MSG_TEXT.
MSG_TEXT = MSG+80(40).
WRITE: /1 MSG_TEXT.
ELSE.
PERFORM DYN2 IN PROGRAM (PROG).
ENDIF.
CLEAR ITAB_FIELD-FIELD.
ENDFORM. " SEL_FIELD_DIST
*&---------------------------------------------------------------------*
*& Form GET_ITAB_DIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_ITAB_DIST.
DATA: DOMNAME LIKE DD03L-DOMNAME.
SELECT SINGLE * FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
AND POSITION = '0001'.
ITAB_DIST-CODE = 'PROGRAM SUBPOOL.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'DATA: BEGIN OF ITAB_DATA OCCURS 1,'.
APPEND ITAB_DIST.
CONCATENATE ITAB_TAB-TAB '-' ITAB_FIELD-FIELD INTO ITAB_DIST-CODE.
CONCATENATE 'COL1 LIKE' ITAB_DIST-CODE ','
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'COL2(15) TYPE C,'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = ' END OF ITAB_DATA.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'DATA: LIN_CNT TYPE I,'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = ' D_RATE(5) TYPE P DECIMALS 2.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'FORM DYN2.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'EXEC SQL PERFORMING WRITE_DATA.'.
APPEND ITAB_DIST.
CONCATENATE 'SELECT DISTINCT' ITAB_FIELD-FIELD ','
'COUNT(' ITAB_FIELD-FIELD ')'
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'INTO :ITAB_DATA-COL1, :ITAB_DATA-COL2'.
APPEND ITAB_DIST.
CONCATENATE 'FROM' ITAB_TAB-TAB
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
IF DD03L-FIELDNAME CP '*MANDT'.
CONCATENATE 'WHERE' DD03L-FIELDNAME '= :SY-MANDT'
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
ENDIF.
CONCATENATE 'GROUP BY' ITAB_FIELD-FIELD
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'ENDEXEC.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'DESCRIBE TABLE ITAB_DATA LINES LIN_CNT.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'WRITE: /1 ''Data Kinds : '', LIN_CNT COLOR 3,'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = '''Kinds''.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'D_RATE = 1 / LIN_CNT * 100.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'WRITE: /1 ''Distribute Rate : '', D_RATE COLOR 3,'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = '''%''.'.
APPEND ITAB_DIST.
SELECT SINGLE DOMNAME INTO DOMNAME
FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
AND FIELDNAME = ITAB_FIELD-FIELD.
IF SY-SUBRC = 0.
SELECT SINGLE OUTPUTLEN INTO COL_LENGTH
FROM DD01L
WHERE DOMNAME = DOMNAME
AND AS4LOCAL = 'A'.
ENDLEN = COL_LENGTH + 3 + 18 + 1.
ENDIF.
CONCATENATE 'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_DIST-CODE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'FORMAT COLOR 4.'.
APPEND ITAB_DIST.
CONCATENATE 'WRITE: /1 SY-VLINE, (' COL_LENGTH ')'
INTO ITAB_DIST-CODE.
CONCATENATE ITAB_DIST-CODE '''' ITAB_FIELD-FIELD '''' ','
'SY-VLINE, (15) ''Records'', SY-VLINE.'
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
CONCATENATE 'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_DIST-CODE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'FORMAT COLOR 2.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'LOOP AT ITAB_DATA.'.
APPEND ITAB_DIST.
CONCATENATE 'WRITE: /1 SY-VLINE,' 'ITAB_DATA-COL1,'
INTO ITAB_DIST-CODE SEPARATED BY SPACE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'SY-VLINE, ITAB_DATA-COL2, SY-VLINE.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'ENDLOOP.'.
APPEND ITAB_DIST.
CONCATENATE 'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_DIST-CODE.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'ENDFORM.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'FORM WRITE_DATA.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'APPEND ITAB_DATA.'.
APPEND ITAB_DIST.
ITAB_DIST-CODE = 'ENDFORM.'.
APPEND ITAB_DIST.
ENDFORM. " GET_ITAB_DIST
*&---------------------------------------------------------------------*
*& Form CREATE_GRAF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_GRAF.
DATA: BEGIN OF ITAB_GRAF OCCURS 1,
DATA1(50) TYPE C,
DATA2 TYPE I,
END OF ITAB_GRAF.
DATA: CUR_LINE TYPE I VALUE 6,
INTO1(50) TYPE C,
INTO2(17) TYPE C,
DEL_CHAR TYPE C.
DO.
READ LINE CUR_LINE.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
SPLIT SY-LISEL AT '|' INTO DEL_CHAR INTO1 INTO2 DEL_CHAR.
ITAB_GRAF-DATA1 = INTO1.
ITAB_GRAF-DATA2 = INTO2.
APPEND ITAB_GRAF.
CUR_LINE = CUR_LINE + 1.
ENDDO.
CALL FUNCTION 'GRAPH_2D'
EXPORTING
TITL = SY-TITLE
TABLES
DATA = ITAB_GRAF.
ENDFORM. " CREATE_GRAF
*&---------------------------------------------------------------------*
*& Form CONFIRM_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CONFIRM_UPDATE.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = 'Do you want to really UPDATE?'
TITEL = 'Exit'
IMPORTING
ANSWER = CONFIRM_FLAG.
CASE CONFIRM_FLAG.
WHEN 'N'. EXIT.
WHEN 'A'. EXIT.
WHEN 'J'.
ENDCASE.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = '措翠阑 肋 秦具 邓聪促. 舅疽嚼聪鳖?'
TITEL = 'Exit'
IMPORTING
ANSWER = CONFIRM_FLAG.
CASE CONFIRM_FLAG.
WHEN 'N'. EXIT.
WHEN 'A'.
WHEN 'J'. EXIT.
ENDCASE.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = '构窍矾 秒家甫 窍瘤夸? 馆亲钦聪鳖?'
TITEL = 'Exit'
IMPORTING
ANSWER = CONFIRM_FLAG.
CASE CONFIRM_FLAG.
WHEN 'N'. EXIT.
WHEN 'A'. EXIT.
WHEN 'J'.
ENDCASE.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = '捞 扁瓷篮 穿备档 镜荐绝栏聪瘪 荤侩摹付技夸.'
TITEL = 'Exit'
IMPORTING
ANSWER = CONFIRM_FLAG.
CASE CONFIRM_FLAG.
WHEN 'N'. EXIT.
WHEN 'A'.
WHEN 'J'. EXIT.
ENDCASE.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = '龙扁矫焙夸...荤侩窍矫登 酒林炼缴窍技夸.'
TITEL = 'Exit'
IMPORTING
ANSWER = CONFIRM_FLAG.
CASE CONFIRM_FLAG.
WHEN 'N'. EXIT.
WHEN 'A'. EXIT.
WHEN 'J'. PERFORM EXEC_SQL_UPDATE.
ENDCASE.
ENDFORM. " CONFIRM_UPDATE
*&---------------------------------------------------------------------*
*& Form EXEC_SQL_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXEC_SQL_UPDATE.
ITAB_PROG-CODE = 'PROGRAM SUBPOOL MESSAGE-ID AT.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'DATA: COUNT TYPE I.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'FORM DYN3.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'EXEC SQL.'.
APPEND ITAB_PROG.
LOOP AT ITAB_SQL.
ITAB_PROG-CODE = ITAB_SQL-CODE.
APPEND ITAB_PROG.
ENDLOOP.
ITAB_PROG-CODE = 'ENDEXEC.'.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'MESSAGE I315 WITH ''performed'' SY-DBCNT'.
CONCATENATE ITAB_PROG-CODE '''' 'Records' '''' '.'
INTO ITAB_PROG-CODE SEPARATED BY SPACE.
APPEND ITAB_PROG.
ITAB_PROG-CODE = 'ENDFORM.'.
APPEND ITAB_PROG.
GENERATE SUBROUTINE POOL ITAB_PROG NAME PROG
MESSAGE MSG.
IF SY-SUBRC <> 0.
MSG_TEXT = MSG+(80).
WRITE: /1 MSG_TEXT.
MSG_TEXT = MSG+80(40).
WRITE: /1 MSG_TEXT.
ELSE.
PERFORM DYN3 IN PROGRAM (PROG).
ENDIF.
ENDFORM. " EXEC_SQL_UPDATE
*&---------------------------------------------------------------------*
*& Form CHECK_SQL_CODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_SQL_CODE.
DATA: BEGIN OF VALUE_TAB OCCURS 20.
INCLUDE STRUCTURE EXPL_VALUE.
DATA: END OF VALUE_TAB.
DATA: STATEMENT(32000).
DATA: LENGTH TYPE I.
LOOP AT ITAB_SQL.
CONCATENATE STATEMENT ITAB_SQL-CODE INTO STATEMENT
SEPARATED BY SPACE.
ENDLOOP.
LENGTH = STRLEN( STATEMENT ).
CALL 'DB_EXPLAIN_PLAN'
ID 'STATEMENT' FIELD STATEMENT
ID 'LENGTH' FIELD LENGTH
ID 'VALUES' FIELD VALUE_TAB.
ENDFORM. " CHECK_SQL_CODE
*&---------------------------------------------------------------------*
*& Form SQL_GENERATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SQL_GENERATE USING INIT_FLAG ORDER_COL SORT_FLAG.
DATA: ORDER_TABIX LIKE SY-TABIX.
IF INIT_FLAG = 'N'.
SEARCH ITAB_PROG FOR 'ORDER BY'.
IF SY-SUBRC = 0.
READ TABLE ITAB_PROG INDEX SY-TABIX.
IF SORT_FLAG = 'A'.
CONCATENATE 'ORDER BY' ORDER_COL
INTO ITAB_PROG-CODE SEPARATED BY SPACE.
ELSE.
CONCATENATE 'ORDER BY' ORDER_COL 'DESC'
INTO ITAB_PROG-CODE SEPARATED BY SPACE.
ENDIF.
MODIFY ITAB_PROG INDEX SY-TABIX.
ORDER_TABIX = SY-TABIX + 1.
LOOP AT ITAB_PROG FROM ORDER_TABIX.
IF ITAB_PROG-CODE+(7) = 'ENDEXEC'.
EXIT.
ENDIF.
DELETE ITAB_PROG INDEX SY-TABIX.
ENDLOOP.
ENDIF.
ENDIF.
GENERATE SUBROUTINE POOL ITAB_PROG NAME PROG
MESSAGE MSG.
IF SY-SUBRC <> 0.
MSG_TEXT = MSG+(80).
WRITE: /1 MSG_TEXT.
MSG_TEXT = MSG+80(40).
WRITE: /1 MSG_TEXT.
ENDIF.
ENDFORM. " SQL_GENERATE
*&---------------------------------------------------------------------*
*& Form SQL_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SQL_UPLOAD.
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = 'C:\TEMP\SQL.TXT'
FILETYPE = 'asc'
IMPORTING
FILESIZE = FILESIZE
TABLES
DATA_TAB = ITAB_SQL
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5.
ENDFORM. " SQL_UPLOAD
*&---------------------------------------------------------------------*
*& Form SQL_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SQL_DOWNLOAD.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
FILENAME = 'C:\TEMP\SQL.TXT'
FILETYPE = 'asc'
TABLES
DATA_TAB = ITAB_SQL.
ENDFORM. " SQL_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form GET_ITAB_COL_ALL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_ITAB_COL_ALL.
REFRESH ITAB_COL.
READ TABLE ITAB_TAB INDEX 1.
SELECT * FROM DD03L
WHERE TABNAME = ITAB_TAB-TAB
ORDER BY POSITION.
ITAB_COL-COL = DD03L-FIELDNAME.
APPEND ITAB_COL.
ENDSELECT.
ENDFORM. " GET_ITAB_COL_ALL |
|