How to use table type in bulk collect
Hi experts,
How to use table type in bulk collect see the procedure used( oracle 10g)
and error is
PLS-00597: expression 'REQ_REC' in the INTO list is of wrong type
CREATE OR REPLACE PROCEDURE SAMPLE_SP IS
TYPE TYP_A AS OBJECT
( COLMN1 TABLE1.COLM1%TYPE,
COLMN2 TABLE1.COLM2%TYPE,
COLMN3 TABLE1.COLM3%TYPE
TYPE REC_A IS TABLE OF TYP_A;
REQ_REC A_REC;
CURSOR REQ_CUR IS SELECT COLM1,COLM2,COLM3 FROM TABLE1 WHERE <CONDITION>;
BEGIN
OPEN REQ_REC;
LOOP
EXIT WHEN REQ_REC%NOTFOUND;
FETCH REQ_REC BULK COLLECT INTO REQ_REC LIMIT 1000;
FOR I IN 1..REQ_REC.COUNT
LOOP
<insert statement>
END LOOP;
COMMIT;
END LOOP;
END SAMPLE_SP;
Many thanks,
Kalinga
ok but that is not an issue..
Hi experts,
How to use table type in bulk collect see the procedure used( oracle 10g)
and error is
PLS-00597: expression 'REQ_REC' in the INTO list is of wrong type
CREATE OR REPLACE PROCEDURE SAMPLE_SP IS
TYPE TYP_A AS OBJECT
( COLMN1 TABLE1.COLM1%TYPE,
COLMN2 TABLE1.COLM2%TYPE,
COLMN3 TABLE1.COLM3%TYPE
TYPE REC_A IS TABLE OF TYP_A;
REQ_REC A_REC;
CURSOR REQ_CUR IS SELECT COLM1,COLM2,COLM3 FROM TABLE1 WHERE <CONDITION>;
BEGIN
OPEN REQ_CUR;
LOOP
EXIT WHEN REQ_REC%NOTFOUND;
FETCH REQ_REC BULK COLLECT INTO REQ_REC LIMIT 1000;
FOR I IN 1..REQ_REC.COUNT
LOOP
<insert statement>
END LOOP;
COMMIT;
END LOOP;
END SAMPLE_SP;
Many thanks,
Kalinga
Message was edited by:
Kalinga
Similar Messages
-
How to use table control in bdc, plz somebody tell me.
Hi Gurus,
Ples tell me
how to use table control in bdc, plz somebody tell me.
And send Sample CODE also. Thnaks in advance.hi,
Table control / step loop in BDC
Steploop and table contol is inevitable in certain transactions. When we run BDC for such transactions, we will face the situation: how many visible lines of steploop/tablecontrol are on the screen?
Although we can always find certain method to deal with it, such as function code 'NP', 'POPO', considering some extreme situation: there is only one line visible one the screen, our BDC program should display an error message. (See transaction 'ME21', we you resize your screen to let only one row visible, you can not enter mutiple lines on this screen even you use 'NP')
we can determine the number of visible lines on Transaction Screen from our Calling BDC program.
Demo ABAP code has two purposes:
1. how to determine number of visible lines and how to calculte page number;
(the 'calpage' routine has been modify to meet general purpose usage)
2. using field symbol in BDC program, please pay special attention to the difference
in Static ASSIGN and Dynamic ASSIGN.
Step1: go to screen painter to display the screen 121, then we can count the fixed line on this screen, there is 7 lines above the steploop and 2 lines below the steploop, so there are total 9 fixed lines on this screen. This means except these 9 lines, all the other line is for step loop.
Then have a look at steploop itselp, one entry of it will occupy two lines.
(Be careful, for table control, the head and the bottom scroll bar will possess another two fixed lines, and there is a maximum number for table line)
Now we have : FixedLine = 9
LoopLine = 2(for table control, LoopLine is always equal to 1)
Step2: go to transaction itself(ME21) to see how it roll page, in ME21, the first line of new page is always occupied by the last line of last page, so it begin with index '02', but in some other case, fisrt line is empty and ready for input.
Now we have: FirstLine = 0
or FirstLine = 1 ( in our case, FirstLine is 1 because the first line of new page is fulfilled)
Step3: write a subroutine calcalculating number of pages
(here, the name of actual parameter is the same as formal parameter)
global data: FixedLine type i, " number of fixed line on a certain screen
LoopLine type i, " the number of lines occupied by one steploop item
FirstLine type i, " possbile value 0 or 1, 0 stand for the first line of new " scrolling screen is empty, otherwise is 1
Dataline type i, " number of items you will use in BDC, using DESCRIBE to get
pageno type i, " you need to scroll screen how many times.
line type i, " number of lines appears on the screen.
index(2) type N, " the screen index for certain item
begin type i, " from parameter of loop
end type i. " to parameter of loop
*in code sample, the DataTable-linindex stands for the table index number of this line
form calpage using FixedLine type i (see step 1)
LoopLine type i (see step 1)
FirstLine type i (see step 2)
DataLine type i ( this is the item number you will enter in transaction)
changing pageno type i (return the number of page, depends on run-time visible line in table control/ Step Loop)
changing line type i.(visible lines one the screen)
data: midd type i,
vline type i, "visible lines
if DataLine eq 0.
Message eXXX.
endif.
vline = ( sy-srows - FixedLine ) div LoopLine.
*for table control, you should compare vline with maximum line of
*table control, then take the small one that is min(vline, maximum)
*here only illustrate step loop
if FirstLine eq 0.
pageno = DataLine div vline.
if pageno eq 0.
pageno = pageno + 1.
endif.
elseif FirstLine eq 1.
pageno = ( DataLine - 1 ) div ( vline - 1 ) + 1.
midd = ( DataLine - 1 ) mod ( vline - 1).
if midd = 0 and DataLine gt 1.
pageno = pageno - 1.
endif.
endif.
line = vline.
endform.
Step4 write a subroutine to calculate the line index for each item.
form calindex using Line type i (visible lines on the screen)
FirstLine type i(see step 2)
LineIndex type i(item index)
changing Index type n. (index on the screen)
if FirstLine = 0.
index = LineIndex mod Line.
if index = '00'.
index = Line.
endif.
elseif FirstLine = 1.
index = LineIndex mod ( Line - 1 ).
if ( index between 1 and 0 ) and LineIndex gt 1.
index = index + Line - 1.
endif.
if Line = 2.
index = index + Line - 1.
endif.
endif.
endform.
Step5 write a subroutine to calculate the loop range.
form calrange using Line type i ( visible lines on the screen)
DataLine type i
FirstLine type i
loopindex like sy-index
changing begin type i
end type i.
If FirstLine = 0.
if loopindex = 1.
begin = 1.
if DataLine <= Line.
end = DataLine.
else.
end = Line.
endif.
elseif loopindex gt 1.
begin = Line * ( loopindex - 1 ) + 1.
end = Line * loopindex.
if end gt DataLine.
end = DataLine.
endif.
endif.
elseif FirstLine = 1.
if loopindex = 1.
begin = 1.
if DataLine <= Line.
end = DataLine.
else.
end = Line.
endif.
elseif loop index gt 1.
begin = ( Line - 1 ) * ( loopindex - 1 ) + 2.
end = ( Line - 1 ) * ( loopindex - 1 ) + Line.
if end gt DataLine.
end = DataLine.
endif.
endif.
endif.
endform.
Step6
using field sysbol in your BDC, for example: in ME21, but you should calculate each item will correponding to which index in steploop/Table Control
form creat_bdc.
field-symbols: , , .
data: name1(14) value 'EKPO-EMATN(XX)',
name2(14) value 'EKPO-MENGE(XX)',
name3(15) value 'RM06E-SELKZ(XX)'.
assign: name1 to ,
name2 to ,
name3 to .
do pageno times.
if sy-index gt 1
*insert scroll page ok_code"
endif.
perform calrange using Line DataLine FirstLine sy-index
changing begin end.
loop at DataTable from begin to end.
perform calindex using Line FirstLine DataTable-LineIndex changing Index.
name1+11(2) = Index.
name2+11(2) = Index.
name3+12(2) = Index.
perform bdcfield using DataTable-matnr.
perform bdcfield using DataTable-menge.
perform bdcfield using DataTable-indicator.
endloop.
enddo.
example 1
BDC table control is an area on the screen in which you can display data in tabular form. You process it using a loop. Table controls are comparable to step loop tables. While a table control consists of a single definition row, step loop blocks may extend over more than one row. Table controls are more flexible than step loops, and are intended to replace them
When you need to handle a scenario like in sales order,it may contain more than one material,if you have more than one material We have to use table control,it will have number of columns and number of rows.
Table controls allow you to enter, display, and modify tabular data easily on the screen
Check this code,
PARAMETERS: file1 LIKE rlgrap-filename.
*Internal Table Declarations
DATA: BEGIN OF itab OCCURS 0,
matnr(18) TYPE c, "MaterialNumber
werks(4) TYPE c, "Plant
vdatu(10) TYPE c, "Valid From Date
bdatu(10) TYPE c, "Valid To Date
lifnr(10) TYPE c, "Vendor Number
ekorg(4) TYPE c, "Purchasing Organization
feskz TYPE c, "Fixed
autet TYPE c, "MRP Indicator
END OF itab.
DATA: bdcdata LIKE TABLE OF bdcdata WITH HEADER LINE.
*VARIABLES Declarations
DATA: wa1 LIKE LINE OF itab. "Workarea for ITAB
DATA: n TYPE i, "Check
count TYPE i.
DATA: cnt(2), "Counter
wa(15). "Workarea to hold concatenatedvalue
DATA v_msg(100).
DATA: flag.
DATA: file TYPE string.
*Initialization event
INITIALIZATION.
*At-selection-screen event
*To provide Input help for file name
AT SELECTION-SCREEN ON VALUE-REQUEST FOR file1.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name = file1.
*START-OF-SELECTION EVENT
START-OF-SELECTION.
MOVE file1 TO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = itab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*To populate BDCDATA and start data transfer
LOOP AT itab .
To validate Plant range
IF itab-werks = '1000' OR itab-werks = '2000'
OR itab-werks = '1008'.
AT NEW werks.
CLEAR: n.
cnt = 1.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0200'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EORD-MATNR'
itab-matnr.
PERFORM bdc_field USING 'EORD-WERKS'
itab-werks.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
CONCATENATE 'EORD-EKORG(' cnt ')' INTO wa.
PERFORM bdc_field USING 'BDC_CURSOR'
wa.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
ENDAT.
IF n = 12.
READ TABLE bdcdata WITH KEY fval = '=BU'.
bdcdata-fval = '=NS'.
MODIFY bdcdata INDEX sy-tabix TRANSPORTING fval.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EORD-VDATU(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
cnt = 2.
n = 2.
ENDIF.
CONCATENATE 'EORD-VDATU(' cnt ')' INTO wa.
PERFORM bdc_field USING wa
itab-vdatu.
CONCATENATE 'EORD-BDATU(' cnt ')' INTO wa.
PERFORM bdc_field USING wa
itab-bdatu.
CONCATENATE 'EORD-LIFNR(' cnt ')' INTO wa.
PERFORM bdc_field USING wa
itab-lifnr.
CONCATENATE 'EORD-EKORG(' cnt ')' INTO wa.
PERFORM bdc_field USING wa
itab-ekorg.
CONCATENATE 'RM06W-FESKZ(' cnt ')' INTO wa.
PERFORM bdc_field USING wa
itab-feskz.
CONCATENATE 'EORD-AUTET(' cnt ')' INTO wa.
PERFORM bdc_field USING wa
itab-autet.
IF n <> 12.
n = cnt.
ENDIF.
cnt = cnt + 1.
AT END OF werks.
CALL TRANSACTION 'ME01' USING bdcdata
UPDATE 'S'
MODE 'A'.
CLEAR:bdcdata,bdcdata[].
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = sy-msgid
lang = 'EN'
no = sy-msgno
v1 = sy-msgv1
v2 = sy-msgv2
v3 = sy-msgv3
v4 = sy-msgv4
IMPORTING
msg = v_msg.
WRITE:/ v_msg.
CLEAR: bdcdata,bdcdata[],flag.
ENDAT.
ENDIF.
ENDLOOP.
Start new screen *
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
Insert field values
FORM bdc_field USING fnam fval.
IF NOT fval IS INITIAL.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
CLEAR wa.
ENDFORM.
Sample code 2
THis is example to upload the Bank details of the Vendor which has the TC.
REPORT zprataptable2
NO STANDARD PAGE HEADING LINE-SIZE 255.
DATA : BEGIN OF itab OCCURS 0,
i1 TYPE i,
lifnr LIKE rf02k-lifnr,
bukrs LIKE rf02k-bukrs,
ekorg LIKE rf02k-ekorg,
ktokk LIKE rf02k-ktokk,
anred LIKE lfa1-anred,
name1 LIKE lfa1-name1,
sortl LIKE lfa1-sortl,
land1 LIKE lfa1-land1,
akont LIKE lfb1-akont,
fdgrv LIKE lfb1-fdgrv,
waers LIKE lfm1-waers,
END OF itab.
DATA : BEGIN OF jtab OCCURS 0,
j1 TYPE i,
banks LIKE lfbk-banks,
bankl LIKE lfbk-bankl,
bankn LIKE lfbk-bankn,
END OF jtab.
DATA : cnt(4) TYPE n.
DATA : fdt(20) TYPE c.
DATA : c TYPE i.
INCLUDE bdcrecx1.
START-OF-SELECTION.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = 'C:\first1.txt'
filetype = 'DAT'
TABLES
data_tab = itab.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = 'C:\second.txt'
filetype = 'DAT'
TABLES
data_tab = jtab.
LOOP AT itab.
PERFORM bdc_dynpro USING 'SAPMF02K' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02K-LIFNR'
itab-lifnr.
PERFORM bdc_field USING 'RF02K-BUKRS'
itab-bukrs.
PERFORM bdc_field USING 'RF02K-EKORG'
itab-ekorg.
PERFORM bdc_field USING 'RF02K-KTOKK'
itab-ktokk.
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-LAND1'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFA1-ANRED'
itab-anred.
PERFORM bdc_field USING 'LFA1-NAME1'
itab-name1.
PERFORM bdc_field USING 'LFA1-SORTL'
itab-sortl.
PERFORM bdc_field USING 'LFA1-LAND1'
itab-land1.
PERFORM bdc_dynpro USING 'SAPMF02K' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-KUNNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BANKN(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
cnt = 0.
LOOP AT jtab WHERE j1 = itab-i1.
cnt = cnt + 1.
CONCATENATE 'LFBK-BANKS(' cnt ')' INTO fdt.
PERFORM bdc_field USING fdt jtab-banks.
CONCATENATE 'LFBK-BANKL(' cnt ')' INTO fdt.
PERFORM bdc_field USING fdt jtab-bankl.
CONCATENATE 'LFBK-BANKN(' cnt ')' INTO fdt.
PERFORM bdc_field USING fdt jtab-bankn.
IF cnt = 5.
cnt = 0.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BANKS(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=P+'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BANKN(02)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
ENDIF.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BANKS(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0210'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB1-FDGRV'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFB1-AKONT'
itab-akont.
PERFORM bdc_field USING 'LFB1-FDGRV'
itab-fdgrv.
PERFORM bdc_dynpro USING 'SAPMF02K' '0215'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB1-ZTERM'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0220'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB5-MAHNA'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0310'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFM1-WAERS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFM1-WAERS'
itab-waers.
PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02K-LIFNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
PERFORM bdc_transaction USING 'XK01'.
ENDLOOP.
PERFORM close_group.
Header file:
1 63190 0001 0001 0001 mr bal188 b in 31000 a1 inr
2 63191 0001 0001 0001 mr bal189 b in 31000 a1 inr
TC file:
1 in sb 11000
1 in sb 12000
1 in sb 13000
1 in sb 14000
1 in sb 15000
1 in sb 16000
1 in sb 17000
1 in sb 18000
1 in sb 19000
1 in sb 20000
1 in sb 21000
1 in sb 22000
2 in sb 21000
2 in sb 22000
Regards -
How to use table control in bdc briefly?
how to use table control in bdc briefly in description manner ?
Hi friend,
here i am giving exm. code of table control.see if help full to u.
REPORT zxk_01
NO STANDARD PAGE HEADING LINE-SIZE 255.
include bdcrecx1.
TYPES : BEGIN OF ty_data,
line(100) TYPE c,
END OF ty_data.
PARAMETERS: p_pcfile LIKE ibipparms-path DEFAULT 'D:\NKS.TXT'.
DATA : g_filename TYPE string.
TYPES : BEGIN OF ty_file,
lifnr(16) TYPE c, " vendor
bukrs(4) TYPE c, "company code
ktokk(4) TYPE c, " Acc grp
anred(15) TYPE c, " Title
name1(35) TYPE c, " name
sortl(10) TYPE c, " search term
stras(35) TYPE c, " street
ort01(35) TYPE c, " city
ort02(35) TYPE c, " district
land1(3) TYPE c, " country
pfach(10) TYPE c, " PO BOx
spras(2) TYPE c, " language
kunnr(10) TYPE c, " Customer
vbund(6) TYPE c, " trading partner
banks(3) TYPE c, " BANK COUNTRY
bankl(15) TYPE c, " BANK KEY
bankn(18) TYPE c, " BANK ACC
koinh(60) TYPE c, " ACC HOLDER
bkont(2) TYPE c, " CK
bvtyp(4) TYPE c, " BNKT
bkref(20) TYPE c, " REFERENCE DETAILS
namev(35) TYPE c, " first NAME
name2(35) TYPE c, " NAME
telf1(16) TYPE c, " TELEPHONE
abtnr(4) TYPE c, " DEPTT
pafkt(2) TYPE c, " FUNCTION
akont(10) TYPE c, " REC ACCOUNT
zuawa(3) TYPE c, " SORT KEY
lnrze(10) TYPE c, "HEAD OFFICE
fdgrv(10) TYPE c, " CASH MGMT GRP,
frgrp(4) TYPE c, " RELEASE GRP
zterm(4) TYPE c, " PAY TERMS
togru(4) TYPE c, " TOLERENCE GRP,
reprf, "CHECK DOUBLE INV
zwels(10) TYPE c, " PAYMENTS METHODS
zahls, " PAYMENTS BLOCK
hbkid(5) TYPE c, " house bank
zgrup(2) TYPE c, " grouping key
mahna(4) TYPE c, " dunn procedure
mansp, " DUNNING BLOCK'
gmvdt(10) TYPE c, " LEGAL DONE PROCEDURE
lfrma(10) TYPE c, " DUNN RECEPIENT
madat(10) TYPE c, " LAST DUNNED
mahns(1) TYPE c, " dunning level
mgrup(2) TYPE c, " grouping key
busab(2) TYPE c, "dunning clerk
END OF ty_file.
DATA : BEGIN OF it_xk01 OCCURS 0,
lifnr(16) TYPE c, " vendor
bukrs(4) TYPE c, "company code
ktokk(4) TYPE c, " Acc grp
anred(15) TYPE c, " Title
name1(35) TYPE c, " name
sortl(10) TYPE c, " search term
stras(35) TYPE c, " street
ort01(35) TYPE c, " city
ort02(35) TYPE c, " district
land1(3) TYPE c, " country
pfach(10) TYPE c, " PO BOx
spras(2) TYPE c, " language
kunnr(10) TYPE c, " Customer
vbund(6) TYPE c, " trading partner
akont(10) TYPE c, " REC ACCOUNT
zuawa(3) TYPE c, " SORT KEY
lnrze(10) TYPE c, "HEAD OFFICE
fdgrv(10) TYPE c, " CASH MGMT GRP,
frgrp(4) TYPE c, " RELEASE GRP
zterm(4) TYPE c, " PAY TERMS
togru(4) TYPE c, " TOLERENCE GRP,
reprf, "CHECK DOUBLE INV
zwels(10) TYPE c, " PAYMENTS METHODS
zahls, " PAYMENTS BLOCK
hbkid(5) TYPE c, " house bank
zgrup(2) TYPE c, " grouping key
mahna(4) TYPE c, " dunn procedure
mansp, " DUNNING BLOCK'
gmvdt(10) TYPE c, " LEGAL DONE PROCEDURE
lfrma(10) TYPE c, " DUNN RECEPIENT
madat(10) TYPE c, " LAST DUNNED
mahns(1) TYPE c, " dunning level
mgrup(2) TYPE c, " grouping key
busab(2) TYPE c, "dunning clerk
END OF it_xk01.
internal table for bank detaiils
DATA : BEGIN OF it_bank OCCURS 0,
banks(3) TYPE c, " BANK COUNTRY
bankl(15) TYPE c, " BANK KEY
bankn(18) TYPE c, " BANK ACC
koinh(60) TYPE c, " ACC HOLDER
bkont(2) TYPE c, " CK
bvtyp(4) TYPE c, " BNKT
bkref(20) TYPE c, " REFERENCE DETAILS
lifnr(16) TYPE c, " vendor
xezer, " CHECK
END OF it_bank.
INTERNAL TABLE FOR CONTACT PERSON
TYPES : BEGIN OF ty_cust,
lifnr(16) TYPE c,
namev(35) TYPE c, " first NAME
name1(35) TYPE c, " NAME
telf1(16) TYPE c, " TELEPHONE
abtnr(4) TYPE c, " DEPTT
pafkt(2) TYPE c, " FUNCTION
END OF ty_cust.
INTERNAL TABLES DECLARATION
DATA : it_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,
it_bdcmsgcoll LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
it_file TYPE TABLE OF ty_file,
it_data TYPE TABLE OF ty_data,
it_cust TYPE TABLE OF ty_cust.
WORK AREAS FOR TYPES
DATA : wa_xk01 LIKE it_xk01,
wa_data TYPE ty_data,
wa_file TYPE ty_file,
wa_bank LIKE it_bank,
wa_cust TYPE ty_cust.
*CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = lt_file
filetype = 'ASC'
CHANGING
data_tab = iT_DATA.
IF sy-subrc <> 0.
ENDIF.
g_filename = p_pcfile.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = g_filename "'D:\TESTDATA1_XK01.txt'
filetype = 'TXT'
has_field_separator = 'X'
HEADER_LENGTH = 0
read_by_line = 'X'
DAT_MODE = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
replacement = ' '
CHECK_BOM = ' '
VIRUS_SCAN_PROFILE =
NO_AUTH_CHECK = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
data_tab = it_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT it_file INTO wa_file .
ON CHANGE OF WA_FILE-LIFNR.
wa_xk01-lifnr = wa_file-lifnr.
wa_xk01-bukrs = wa_file-bukrs.
wa_xk01-ktokk = wa_file-ktokk.
wa_xk01-anred = wa_file-anred.
wa_xk01-name1 = wa_file-name1.
wa_xk01-sortl = wa_file-sortl.
wa_xk01-stras = wa_file-stras.
wa_xk01-ort01 = wa_file-ort01.
wa_xk01-ort02 = wa_file-ort02.
wa_xk01-land1 = wa_file-land1.
wa_xk01-pfach = wa_file-pfach.
wa_xk01-spras = wa_file-spras.
wa_xk01-kunnr = wa_file-kunnr.
wa_xk01-vbund = wa_file-vbund.
wa_xk01-akont = wa_file-akont.
wa_xk01-zuawa = wa_file-zuawa.
wa_xk01-lnrze = wa_file-lnrze.
wa_xk01-fdgrv = wa_file-fdgrv.
wa_xk01-frgrp = wa_file-frgrp.
wa_xk01-zterm = wa_file-zterm.
wa_xk01-togru = wa_file-togru.
wa_xk01-reprf = wa_file-reprf.
wa_xk01-zwels = wa_file-zwels.
wa_xk01-zahls = wa_file-zahls.
wa_xk01-hbkid = wa_file-hbkid.
wa_xk01-zgrup = wa_file-zgrup.
wa_xk01-mahna = wa_file-mahna.
wa_xk01-mansp = wa_file-mansp.
wa_xk01-gmvdt = wa_file-gmvdt.
wa_xk01-lfrma = wa_file-lfrma.
wa_xk01-madat = wa_file-madat.
wa_xk01-mahns = wa_file-mahns.
wa_xk01-mgrup = wa_file-mgrup.
wa_xk01-busab = wa_file-busab.
APPEND wa_xk01 TO it_xk01.
CLEAR : WA_XK01.
CONTINUE.
ENDON.
IF WA_FILE-BANKS NE ''.
wa_bank-lifnr = wa_file-lifnr.
wa_bank-banks = wa_file-banks.
wa_bank-bankl = wa_file-bankl.
wa_bank-bankn = wa_file-bankn.
wa_bank-koinh = wa_file-koinh.
wa_bank-bkont = wa_file-bkont.
wa_bank-bvtyp = wa_file-bvtyp.
wa_bank-bkref = wa_file-bkref.
wa_cust-lifnr = wa_file-lifnr.
wa_cust-namev = wa_file-namev.
wa_cust-name1 = wa_file-name2.
wa_cust-telf1 = wa_file-telf1.
wa_cust-abtnr = wa_file-abtnr.
wa_cust-pafkt = wa_file-pafkt.
APPEND wa_bank TO it_bank.
APPEND wa_cust TO it_cust.
APPEND wa_xk01 TO it_xk01.
CLEAR : wa_bank , wa_cust.
ENDIF.
ENDLOOP.
START-OF-SELECTION.
LOOP AT it_xk01 INTO wa_xk01.
REFRESH it_bdcdata.
PERFORM bdc_dynpro USING 'SAPMF02K' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02K-LIFNR'
wa_xk01-lifnr. " vendor
PERFORM bdc_field USING 'RF02K-BUKRS'
wa_xk01-bukrs. " company cpode
PERFORM bdc_field USING 'RF02K-KTOKK'
wa_xk01-ktokk. " Acc group
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-SPRAS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFA1-ANRED'
wa_xk01-anred. " title
PERFORM bdc_field USING 'LFA1-NAME1'
wa_xk01-name1. " name
PERFORM bdc_field USING 'LFA1-SORTL'
wa_xk01-sortl. " ' search term'
PERFORM bdc_field USING 'LFA1-STRAS'
wa_xk01-stras. "street'
PERFORM bdc_field USING 'LFA1-PFACH'
wa_xk01-pfach. " po box
PERFORM bdc_field USING 'LFA1-ORT01'
wa_xk01-ort01. " city
PERFORM bdc_field USING 'LFA1-ORT02'
wa_xk01-ort02. " district
PERFORM bdc_field USING 'LFA1-LAND1'
wa_xk01-land1. " country
PERFORM bdc_field USING 'LFA1-SPRAS'
wa_xk01-spras. " language
PERFORM bdc_dynpro USING 'SAPMF02K' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-VBUND'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFA1-KUNNR' " customer
wa_xk01-kunnr.
PERFORM bdc_field USING 'LFA1-VBUND'
wa_xk01-vbund. " trading partner
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BKREF(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
DATA : fnam(20) TYPE c,
int TYPE c.
MOVE 1 TO int.
CLEAR wa_bank.
LOOP AT it_bank INTO wa_bank WHERE lifnr = wa_xk01-lifnr.
CONCATENATE 'LFBK-BANKS(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-banks. " city
CONCATENATE 'LFBK-BANKL(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-bankl.
CONCATENATE 'LFBK-BANKN(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-bankn.
CONCATENATE 'LFBK-KOINH(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-koinh.
CONCATENATE 'LFBK-BKONT(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-bkont.
CONCATENATE 'LFBK-BVTYP(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-bvtyp.
CONCATENATE 'LFBK-BKREF(' int ')' INTO fnam.
PERFORM bdc_field USING fnam
wa_bank-bkref.
int = int + 1.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BANKS(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0380'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVK-PAFKT(05)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
DATA : fnam1(20) TYPE c,
cnt.
cnt = 1.
CLEAR : wa_cust.
LOOP AT it_cust INTO wa_cust WHERE lifnr = wa_xk01-lifnr.
CONCATENATE 'KNVK-NAMEV(' cnt ')' INTO fnam1.
PERFORM bdc_field USING fnam1
wa_cust-namev.
CONCATENATE 'KNVK-NAME1(' cnt ')' INTO fnam1.
PERFORM bdc_field USING fnam1
wa_cust-name1.
CONCATENATE 'KNVK-TELF1(' cnt ')' INTO fnam1.
PERFORM bdc_field USING fnam1
wa_cust-telf1.
CONCATENATE 'KNVK-ABTNR(' cnt ')' INTO fnam1.
PERFORM bdc_field USING fnam1
wa_cust-abtnr.
CONCATENATE 'KNVK-PAFKT(' cnt ')' INTO fnam1.
PERFORM bdc_field USING fnam1
wa_cust-pafkt.
cnt = cnt + 1.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPMF02K' '0380'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVK-NAMEV(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0210'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB1-FRGRP'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFB1-AKONT'
wa_xk01-akont. " REC aCC
PERFORM bdc_field USING 'LFB1-ZUAWA'
wa_xk01-zuawa. " SORT KEY
PERFORM bdc_field USING 'LFB1-LNRZE'
wa_xk01-lnrze. " HEAD OFFICE
PERFORM bdc_field USING 'LFB1-FDGRV'
wa_xk01-fdgrv. " CASH MGMT GRP
PERFORM bdc_field USING 'LFB1-FRGRP'
wa_xk01-frgrp. " RELEASE GRP
PERFORM bdc_field USING 'LFB1-CERDT'
PERFORM bdc_dynpro USING 'SAPMF02K' '0215'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB1-ZGRUP'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFB1-ZTERM'
wa_xk01-zterm. " PAYMENT TERMS'
PERFORM bdc_field USING 'LFB1-TOGRU'
wa_xk01-togru. " TOLERENCE GRP
PERFORM bdc_field USING 'LFB1-REPRF'
wa_xk01-reprf. " CHECK DOUBLE INV
PERFORM bdc_field USING 'LFB1-ZWELS'
wa_xk01-zwels. " PAYMENT METHOD
PERFORM bdc_field USING 'LFB1-ZAHLS'
wa_xk01-zahls. " PAYMENT BLOCK
PERFORM bdc_field USING 'LFB1-HBKID'
wa_xk01-hbkid. " HOUSE BANK
PERFORM bdc_field USING 'LFB1-ZGRUP'
wa_xk01-zgrup. " GROUPING KEY
PERFORM bdc_dynpro USING 'SAPMF02K' '0220'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB5-BUSAB'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'LFB5-MAHNA'
wa_xk01-mahna. " DUNN PROCEDURE
PERFORM bdc_field USING 'LFB5-MANSP'
wa_xk01-mansp. " DUNNING BLOCK
PERFORM bdc_field USING 'LFB5-LFRMA'
wa_xk01-lfrma. " Dunn representative
PERFORM bdc_field USING 'LFB5-GMVDT'
wa_xk01-gmvdt. " legal dunn proc
PERFORM bdc_field USING 'LFB5-MADAT'
wa_xk01-madat. " last dunned
PERFORM bdc_field USING 'LFB5-MAHNS'
wa_xk01-mahns. " dunn level
PERFORM bdc_field USING 'LFB5-BUSAB'
wa_xk01-busab. " dunning clerk
PERFORM bdc_field USING 'LFB1-MGRUP'
wa_xk01-mgrup. " grouping key
CALL TRANSACTION 'XK01' USING it_bdcdata
MODE 'A'.
ENDLOOP.
Start new screen *
FORM bdc_dynpro USING program dynpro.
CLEAR it_bdcdata.
it_bdcdata-program = program.
it_bdcdata-dynpro = dynpro.
it_bdcdata-dynbegin = 'X'.
APPEND it_bdcdata.
ENDFORM. "BDC_DYNPRO
Insert field
FORM bdc_field USING fnam fval TYPE any.
CLEAR it_bdcdata.
it_bdcdata-fnam = fnam.
it_bdcdata-fval = fval.
APPEND it_bdcdata.
ENDFORM. "bdc_field
*perform close_group. -
Hi All,
I am trying to create one RFC. But in that RFC, I wish to use Table types as import and export parameters completly avoiding Tables tab. Will that effect the performance of RFC if I use Table types. If Yes, Please give clear clarification where it effects the performance.
Also please let me know how the performance of the RFC is effected if we use Tables tab.
Thanks,
Ravee.."I wish to use Table types as import and export parameters completly avoiding Tables tab."
I'm not sure if Tables can be avoided, if just using regular ABAP. I know that the Importing tab would not work when I tried it (under vrs 4.6b).
Because you are launching separate processes, in separate memory areas: any parameter you use in RFC has to be known by the calling and the callee functions/programs. This means that you need a common reference. If you have more than one function module in a function group, you can use the TOP file and a 'Z' data dictionary structure.
I hope that this helps,
Dan Perecky -
How to use Reference type of Data Element
Hi guys, is there anyone could give me a trace how to use reference type of data element.
More details i'm going to reach is:
I create 2 tables:
eq.
1. table ZFIRST has field X with data element ZFX (Data element i declared).
2. table ZSECOND has field Y.
Here at field Y (second table) I'm going to declare a new data element say it ZFY, but in ZFY I'm going to use the data element as i declared before (ZFX). Is it possible if I do it using reference type data element (SE11)?
I already did this way, but I got error :
Field Y: Reference ZFX to class w/o interface cannot be used in DB table ZSECOND
What does it mean?. Did I miss something about using reference data element type?.
This error occurs when I activate ZSECOND table. However in creating ZFY (reference) to data element ZFX, there is no error occur.
The point is I need to RE-declared existing data element and ot put existing data element(ZFX) to my current table (ZSECOND).
Any helpful will be highly appreciated.
Thanks.
Edited by: dinivian dondi on Nov 4, 2010 8:30 AMField Y: Reference ZFX to class w/o interface cannot be used in DB table ZSECOND
What does it mean?. Did I miss something about using reference data element type?.
Apparently system doesn't allow you to type a transparent table field with deep type. This refers to references and tables types as components. The RDBMS (Relational DB Management System) cannot interpret this componenets correclty and mapp them to TABLEs in DB.
So I am affraid you won't be able to type table component with reference to other data element.
The point is I need to RE-declared existing data element and ot put existing data element(ZFX) to my current table (ZSECOND).
Sorry but I don't get it, could you please explain this more clearly. Maybe then we can think of some workaround for you.
Regards
Marcin -
Datasources with function module which uses table type
hi..
I am creating a datasource which extracts data using a function module from xRPM to BW. When creating the function module it gives an error " TABLES parameters are obsolete!" while trying to specify the extract structure. I searched in SDN and learnt that we need to use table types and use that in the changing tab.Not sure how that works and where we need to use the extract structure for this.
Could someone please explain this to me and let me know how i can create my datasource using this type of function module.Hi,
in your case you need the tables parameter, as the service api expects the result of the fm in a table called e_t_data. Of course table parameters are obsolet but you can just ignore the warning and it will work.
regards
Siggi
PS: Extraction fm must follow a strict interface definition.
Message was edited by:
Siegfried Szameitat -
How to use Table valued MSSQL function in OBIEE
Hi all,
Can some one help me to understand how to use table valued function in OBIEE? I want to use a table valued function (MSSQL function, with some input parameter), in the physical layer to pull the data?
I know for MSSQL Stored Procedure we can write as
EXEC SP_NAME @Parameter = 'VLUEOF(NQ_SESSION.Variablename)'
but now I have a table valued function in the query window I can get the data as
select * from myfunction(parametervalue)
In physical layer of OBIEE I have tried as
select * from myfunction('VLUEOF(NQ_SESSION.Variablename)'), but I'm getting error as the NQ_SESSION variable doesn't have a value , but actually I have initialized the variable but still Im getting error.
Can some one help me to solve this.
Thanks,
MithunFollow this link and try yourself. let me know for issues
Substring instr issue in obiee
Appreciate if you mark
Edited by: Srini VEERAVALLI on Feb 20, 2013 8:13 AM -
How to use live type in motion 4
how to use live type in motion 4
There is a LiveType (or LiveFonts) content section in the Library in Motion 4 (but NOT Motion 5 - LiveType is obsolete, much to my chagrin...) - but you can still import LiveType projects into Motion 4 just as you could in Motion 3 - a simple drag'n'drop from the finder will do; or use Import from the file menu.
-
How to use table control in LSMW
Hello All,
I have requirement to use LSMW , in my using transaction have table control ,I need to pass values in table control . how to use table control in LSMW .Can any one give me the solution for this.
Best regards,
Satya.Note: The recording function records a fixed screen sequence. It cannot be used for migrating data containing a variable number of items or for transactions with dynamic screen sequences!
Tip: It is possible to create a recording via SHDB, generate a program out of this recording, and adopt the program to your needs and registrate the program to be able to use it in LSMW.
Thats means, for creation of project and WBS Elements is not possible through
1. LSMW-BDC (For both CJ01 and CJ20n)
2. LSMW-BAPI (Method: Maintain is not listed )
3. LSME-Standard Batch Direct Input.
Its possible through programmatically(SE38.) either using BAPI Or BDC.
Thanks, -
How to use simple types for table column names ?
Hi,
can any one tell how to to use simple types for table column names?
It is required in internationalizing of webdynpro applications.
Regards,
RajeshHi,
1: define required column names in <SimpleType>
2:use the following code to get those values
3:bind 'text' property of Column headers to context attributes
4:take a context attribute 'Value' as type of <SimpleType>
5:set these values to context attributes
IWDAttributeInfo objAttrInfo=wdContext.getNodeInfo().getAttribute(IPrivate<ViewName>View.IContextElement.VALUE);
ISimpleTypeModifiable simple=objAttrInfo.getModifiableSimpleType();
Map m=simple.getEnumerationTexts();
Collection c=m.values();
Iterator it=c.iterator();
if(it.hasNext())
wdContext.currentContextElement.set<att1>(it.next().toString);
if(it.hasNext())
wdContext.currentContextElement.set<att2>(it.next().toString);
if(it.hasNext())
wdContext.currentContextElement.set<att3>(it.next().toString);
Regards
LakshmiNarayana -
How to use record type for inserting data into a table
I've read through the web the following tip:
"When working with a large number of columns, using variables of type RECORD is a better approach. With this approach, you do not have to list anything in the INSERT statement, because you are inserting a variable into the table that is defined as a row from the same table."
I usually define a variable as
r_mytable mytable%ROWTYPE;
and inside my procedure I'll set the fields I need as
r_mytable.field1 := 1;
r_mytable.field3 := 7;
and then I perform the insert as
insert into mytable
(field1,
field3)
values
(r_mytable.field1,
r_mytable.field3);
According to the tip I've copied above, how can I use the TYPE RECORD of pl/sql for achieving the same result but perhaps in a smarter way?
Thanks in advance!Hi,
Are you looking for this?
SQL> create table table1 (id number, descr varchar2(30));
Table created
SQL>
SQL> DECLARE
2 my_rec table1%rowtype;
3 BEGIN
4 my_rec.id := 1;
5 my_rec.descr := 'TEST';
6 insert into table1 values my_rec;
7 END;
8 /
PL/SQL procedure successfully completed
SQL> select * from table1;
ID DESCR
1 TESTWorks with UPDATE too :
SQL> DECLARE
2 my_rec table1%rowtype;
3 BEGIN
4 my_rec.id := 2;
5 my_rec.descr := 'TEST2';
6 update table1 set row = my_rec where id = 1;
7 END;
8 /
PL/SQL procedure successfully completed
SQL> select * from table1;
ID DESCR
2 TEST2 -
How to install sccm client on bulk collections using push installation
Unfortunately I did something and received the following description:-
How to know/reproduce the following scenario by installing sccm client on bulk collections in SCCM 2012R2?
"User ***** requested that the CCRs will be generated for collection “All Windows Client Systems (P0100015), The SMS Provider did not generate CCRs for all the system resources in this collection.
Possible cause: some system resources are not assigned to the current site, and you chose to insta
Il clients only on system resources that are
assigned to current site.
Another possible cause: Some system resources do not have Microsoft Windows NT operating system
or above installed.
Message ID: 30110"Ok. Some of your clients are not covered under any site assignment boundary, hence you are getting that error. Would recommend you to select "Install the client from a specified site" and select the Primary site. If your boundary groups for content
are configured fine then the client will be installed from the appropriate site for each machine you are pushing the client to.
-RG -
Opening two cursors using open cursor with bulk collect on colections ..
Is it possible to have the implementatiion of using bulk collect with collections using two open cursors ..
first c1
second c2
open c1
loop
open c2
loop
end loop
close c2
end loop;
close c1
what i found is for every outer loop of cursor c1 , cursor c2 is open and closed for every record.
is this willl imporove the performace .?
EXAMPLE:-
NOTE: The relatoin between finc and minc is one to many ..finc is parent and minc is child
function chk_notnull_blank ( colname IN number ) return number is
BEGIN
if ( colname is NOT NULL and colname not in ( -8E14, -7E14, -6E14, -5E14, -4E14, -3E14, -2E14, -1E14, -1E9 )) then
RETURN colname ;
else
RETURN 0;
end if;
END chk_notnull_blank;
procedure Proc_AnnualFmlyTotIncSummary is
CURSOR c_cur_finc IS SELECT FAMID FROM FINC ;
CURSOR c_cur_minc IS SELECT FAMID, MEMBNO , ANFEDTX, ANGOVRTX, ANPRVPNX, ANRRDEDX, ANSLTX, SALARYX, SALARYBX, NONFARMX, NONFRMBX , FARMINCX, FRMINCBX, RRRETIRX, RRRETRBX, SOCRRX, INDRETX, JSSDEDX, SSIX, SSIBX from MINC minc WHERE FAMID IN ( SELECT FAMID FROM FINC finc WHERE minc.FAMID = finc.FAMID );
v_tot_fsalaryx number := 0;
v_tot_fnonfrmx number := 0;
v_tot_ffrmincx number := 0;
v_tot_frretirx number := 0;
v_tot_findretx number := 0;
v_tot_fjssdedx number := 0;
v_tot_fssix number := 0;
v_temp_sum_fsalaryx number := 0;
v_temp_sum_fnonfrmx number := 0;
v_temp_sum_ffrmincx number := 0;
v_temp_sum_frretirx number := 0;
v_temp_sum_findretx number := 0;
v_temp_sum_fjssdedx number := 0;
v_temp_sum_fssix number := 0;
TYPE minc_rec IS RECORD (FAMID MINC.FAMID%TYPE, MEMBNO MINC.MEMBNO%TYPE , ANFEDTX MINC.ANFEDTX%TYPE, ANGOVRTX MINC.ANGOVRTX%TYPE , ANPRVPNX MINC.ANPRVPNX%TYPE , ANRRDEDX MINC.ANRRDEDX%TYPE , ANSLTX MINC.ANSLTX%TYPE, SALARYX MINC.SALARYX%TYPE , SALARYBX MINC.SALARYBX%TYPE , NONFARMX MINC.NONFARMX%TYPE , NONFRMBX MINC.NONFRMBX%TYPE, FARMINCX MINC.FARMINCX%TYPE , FRMINCBX MINC.FRMINCBX%TYPE , RRRETIRX MINC.RRRETIRX%TYPE , RRRETRBX MINC.RRRETRBX%TYPE, SOCRRX MINC.SOCRRX%TYPE , INDRETX MINC.INDRETX%TYPE , JSSDEDX MINC.JSSDEDX%TYPE , SSIX MINC.SSIX%TYPE , SSIBX MINC.SSIBX%TYPE );
v_flag_boolean boolean := false;
v_famid number ;
v_stmt varchar2(3200) ;
v_limit number := 50;
v_temp_FAMTFEDX number := 0 ;
v_temp_FGOVRETX number := 0 ;
v_temp_FPRIVPENX number := 0 ;
v_temp_FRRDEDX number := 0 ;
v_temp_FSLTAXX number := 0 ;
v_temp_FSALARYX number := 0 ;
v_temp_FNONFRMX number := 0 ;
v_temp_FFRMINCX number := 0 ;
v_temp_FRRETIRX number := 0 ;
v_temp_FINDRETX number := 0 ;
v_temp_FJSSDEDX number := 0 ;
v_temp_FSSIX number := 0 ;
BEGIN
OPEN c_cur_finc ;
LOOP
FETCH c_cur_finc BULK COLLECT INTO famid_type_tbl LIMIT v_limit;
EXIT WHEN famid_type_tbl.COUNT = 0;
FOR i in famid_type_tbl.FIRST..famid_type_tbl.LAST
LOOP
OPEN c_cur_minc ;
LOOP
FETCH c_cur_minc BULK COLLECT INTO minc_rec_type_tbl LIMIT v_limit;
EXIT WHEN minc_rec_type_tbl.COUNT = 0;
FOR j IN minc_rec_type_tbl.FIRST..minc_rec_type_tbl.LAST
LOOP
if ( famid_type_tbl(i) = minc_rec_type_tbl(j).FAMID ) THEN
v_temp_FAMTFEDX := v_temp_FAMTFEDX + chk_notnull_blank(minc_rec_type_tbl(j).ANFEDTX );
v_temp_FGOVRETX := v_temp_FGOVRETX + chk_notnull_blank(minc_rec_type_tbl(j).ANGOVRTX);
v_temp_FPRIPENX := v_temp_FPRIPENX + chk_notnull_blank(minc_rec_type_tbl(j).ANPRVPNX);
v_temp_FRRDEDX := v_temp_FRRDEDX + chk_notnull_blank(minc_rec_type_tbl(j).ANRRDEDX);
v_temp_FSLTAXX := v_temp_FSLTAXX + chk_notnull_blank(minc_rec_type_tbl(j).ANSLTX );
v_temp_FSALARYX := v_temp_FSALARYX + chk_notnull_blank(minc_rec_type_tbl(j).SALARYX ) + chk_notnull_blank(minc_rec_type_tbl(j).SALARYBX);
v_temp_FNONFRMX := v_temp_FNONFRMX + chk_notnull_blank(minc_rec_type_tbl(j).NONFARMX) + chk_notnull_blank(minc_rec_type_tbl(j).NONFRMBX);
v_temp_FFRMINCX := v_temp_FFRMINCX + chk_notnull_blank(minc_rec_type_tbl(j).FARMINCX) + chk_notnull_blank(minc_rec_type_tbl(j).FRMINCBX );
v_temp_FRRETIRX := v_temp_FRRETIRX + chk_notnull_blank(minc_rec_type_tbl(j).RRRETIRX) + chk_notnull_blank(minc_rec_type_tbl(j).RRRETRBX ) + chk_notnull_blank(minc_rec_type_tbl(j).SOCRRX);
v_temp_FINDREXT := v_temp_FINDRETX + chk_notnull_blank(minc_rec_type_tbl(j).INDRETX);
v_temp_FJSSDEDX := v_temp_FJSSDEDX + chk_notnull_blank(minc_rec_type_tbl(j).JSSDEDX);
v_temp_FSSIX := v_temp_FSSIX + chk_notnull_blank(minc_rec_type_tbl(j).SSIX ) + chk_notnull_blank(minc_rec_type_tbl(j).SSIBX);
END IF;
END LOOP;
END LOOP ;
CLOSE c_cur_minc;
UPDATE FINC SET FAMTFEDX = v_temp_FAMTFEDX WHERE FAMID = famid_type_tbl(i);
END LOOP;
END LOOP;
CLOSE c_cur_finc;
END;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
v_err_code := SQLCODE;
v_err_msg := substr(SQLERRM, 1, 200);
INSERT INTO audit_table (error_number, error_message) VALUES (v_err_code, v_err_msg);
error_logging(p_error_code => substr(sqlerrm,1,9), p_error_message => substr(sqlerrm,12), p_package =>'PKG_FCI_APP',p_procedure => 'Proc_Annual_Deductions_FromPay ' , p_location => v_location);
end Proc_AnnualFmlyTotIncSummary ;
Is the proga efficient and free from compilation errors ..?
thanks/kumar
Edited by: kumar73 on Sep 22, 2010 12:48 PMfunction chk_notnull_blank ( colname IN number ) return number is Maybe this function should have its own forum:
how to use case in this program
Re: how to declare a formal parameter in a function of type record and access ?
Re: how to define a function with table type parameter
Re: creation of db trigger with error ..
Re: How to write a trigger for the below scenario
how to improve the code using advanced methods
yours advice in improving the coding ..
How to use bulk in multiple cursors !!
;-) -
Issue in using Cursor+Dynamic SQL+ Bulk collect +FORALL
Hi,
I have a dynamic query which I need to use as a cursor to fetch records that inturn need to be inserted into a staging table.
The issue I am facing is I am not sure how to declare the variable to fetch the records into. Since I am using a dynamic cursor how do I declare it?
My code looks something like this -
TYPE c_details_tbl_type IS REF CURSOR;
c_details c_details_tbl_type;
TYPE c_det_tbl_type IS TABLE OF c_details%ROWTYPE INDEX BY PLS_INTEGER;
c_det_tbl c_det_tbl_type; -- ???
BEGIN
v_string1 := 'SELECT....'
v_string2 := ' UNION ALL SELECT....'
v_string3 := 'AND ....'
v_string := v_string1||v_string2||v_string3;
OPEN c_details FOR v_string;
LOOP
FETCH c_details BULK COLLECT
INTO c_det_tbl LIMIT 1000;
IF (c_det_tbl.COUNT > 0) THEN
DELETE FROM STG;
FORALL i IN 1..c_det_tbl.COUNT
INSERT INTO STG
VALUES (c_det_tbl(i));
END IF;
EXIT WHEN c_details%NOTFOUND;
END LOOP;
CLOSE c_details;
END
ThanksWhy the bulk collect? All that this does is slow down the read process (SELECT) and write process (INSERT).
Data selected needs (as a collection) to be pushed into the PGA memory of the PL/SQL engine. And then that very same data needs to be pushed again by the PL/SQL engine back to the database to be inserted. Why?
It is a lot faster, needs a lot less resources, with fewer moving parts, to simply instruct the SQL engine to do both these steps using a single INSERT..SELECT statement. And this can support parallel DML too for scalability when data volumes get large.
It is also pretty easy to make a single SQL statement like this dynamic and even support bind variables.
Simplicity is the ultimate form of elegance. Pushing data needlessly around is not simple and thus not a very elegant way to address the problem. -
How to handle multiple save exceptions (Bulk Collect)
Hi
How to handle Multiple Save exceptions? Is it possible to rollback to first deletion(of child table) took place in the procedure.
There are 3 tables
txn_header_interface(Grand Parent)
orders(parent)
order_items (Child)
One transaction can have one or multiple orders in it.
and one orders can have one or multiple order_items in it.
We need to delete the data from child table first then its parent and then from the grand parent table.if some error occurs anywhere I need to rollback to child record deletion. Since there is flag in child table which tells us when to delete data from database.
Is it possible to give name to Save exceptions?
e.g.
FORALL i IN ABC.FIRST..ABC.LAST SAVE EXCEPTIONS A
FORALL i IN abc.FIRST..ABC.LAST SAVE EXCEPTIONS B
if some error occurs then
ROLLBACK A; OR ROLLBACK B;
Please find the procedure attached
How to handle the errors with Save exception and rollback upto child table deletion.
CREATE OR REPLACE
PROCEDURE DELETE_CONFIRMED_DATA IS
TYPE TXN_HDR_INFC_ID IS TABLE OF TXN_HEADER_INTERFACE.ID%TYPE;
TXN_HDR_INFC_ID_ARRAY TXN_HDR_INFC_ID;
ERROR_COUNT NUMBER;
BULK_ERRORS EXCEPTION;
PRAGMA exception_init(bulk_errors, -24381);
BEGIN
SELECT THI.ID BULK COLLECT
INTO TXN_HDR_INFC_ID_ARRAY
FROM TXN_HEADER_INTERFACE THI,ORDERS OS,ORDER_ITEMS OI
WHERE THI.ID = OS.TXN_HDR_INFC_ID
AND OS.ID = OI.ORDERS_ID
AND OI.POSTING_ITEM_ID = VPI.ID
OI.DW_STATUS_FLAG =4 --data is moved to Datawarehouse
MINUS
(SELECT THI.ID FROM TXN_HEADER_INTERFACE THI,ORDERS OS,ORDER_ITEMS OI
WHERE THI.ID = OS.TXN_HDR_INFC_ID
AND OS.ID = OI.ORDERS_ID
OI.DW_STATUS_FLAG !=4);
IF SQL%NOTFOUND
THEN
EXIT;
END IF;
FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
EXCEPTIONS
DELETE FROM ORDER_ITEMS OI
WHERE OI.ID IN (SELECT OI.ID FROM ORDER_ITEMS OI,ORDERS
OS,TXN_HEADER_INTERFACE THI
WHERE OS.ID = OI.ORDERS_ID
AND OS.TXN_HDR_INFC_ID = THI.ID
AND THI.ID = TXN_HDR_INFC_ID_ARRAY(i));
FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
EXCEPTIONS
DELETE FROM ORDERS OS
WHERE OS.ID IN (SELECT OS.ID FROM ORDERS OS,TXN_HEADER_INTERFACE THI
WHERE OS.TXN_HDR_INFC_ID = THI.ID
AND THI.ID = TXN_HDR_INFC_ID_ARRAY(i));
FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
EXCEPTIONS
DELETE FROM TXN_HEADER_INTERFACE THI
WHERE THI.ID = TXN_HDR_INFC_ID_ARRAY(i);
COMMIT;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD-MON-YY HH:MIPM')||':
DELETE_CONFIRMED_DATA: INFO:DELETION SUCCESSFUL');
EXCEPTION
WHEN OTHERS THEN
ERROR_COUNT := SQL%BULK_EXCEPTIONS.COUNT;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD-MON-YY HH:MIPM')||':
DELETE_CONFIRMED_DATA: ERROR:Number of errors is ' ||ERROR_COUNT);
FOR indx IN 1..ERROR_COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Error ' || indx || 'occurred during
'||'iteration'||SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX);
DBMS_OUTPUT.PUT_LINE('Error is '
||SQLERRM(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE));
END LOOP;
END DELETE_CONFIRMED_DATA;
Any suggestion would be of great help.
Thanks in advance
AnuIf you have one or two places in your code that need multiple exceptions, just do it with multiple catch statements. Unless you are trying to write the most compact Programming 101 homework program, inventing tricks to remove two lines of code is not good use of your time.
If you have multiple catches all over your code it could be a code smell. You may have too much stuff happening inside one try statement. It becomes hard to know what method call throws one of those exceptions, and you end up handling an exception from some else piece of code than what you intended. E.g. you mention NumberFormatException -- only process one user input inside that try/catch so it is easy to see what error message is given if that particular input is gunk. The next step of processing goes inside its own try/catch.
In my case, the ArrayIndexOutOfBoundsException and
NumberFormatException should be handled by the same way.Why?
I don't think I have ever seen an ArrayIndexOutOfBoundsException that didn't indicate a bug in the code. Instead of an AIOOBE perhaps there should be an if statement somewhere that prevents it, or the algorithm logic should prevent it automatically.
Maybe you are looking for
-
I have an ipod mini and now a ipod video, how do I get my itunes to work wi
I just got my ipod video, and i have already a ipod mini and i want to keep it. How do I use the same itunes for both? Do i have to register both and how?
-
What happened to the nifty "sync" button in iTunes? It syncs as soon as I plug it in, and that's great! BUT! When I go to the iTunes Store and buy new stuff, I can't just 'sync' the device again so my new stuff gets added. Why?
-
How to supress tab for Sales Order item (VA01)
Hi, Please suggest the ways to suppress tab (example "Country") which appears at Sales Order item for some countries. Thanks, Edited by: Dipesh Kothari on Oct 6, 2009 8:34 PM
-
I am trying to download apps on my iPad
The apple ID box that asks for my password lists an I'd name for which I don't have the password. When I answer the secret question answer(my birthday) I'm told it's a wrong answer. They e-mail me a new password but it doesn't work. How do I set my
-
When was RTU licenses removed on 2801 routers
Hi, Can any body help me find this. Which version of IOS did Cisco removed the RTU licenses on 2800 series routers or is it we can still use all the licenses i.e UC, SEC and DATA or do we have to buy it and will it be available as 2800 series is end