XML,CLOB  AND MEMORY : CONSUMED BUT NOT RELEASED !!!

Hi,
I'm working with XMLGEN Package and XSLT Processor to produce XML Document on Oracle 8.1.7.3 server, I use 9i XML and Java packages.
I'm facing the following BIG MEMORY problem :
Environment : I must generate an XML parsed with an XSL document of 80Mo (nearly 22 000 rows),
as XMLGEN is on DOM parsing method, I extract my XML by 500 Rows and I loop until 22 000 rows. I use DBMS_JOB with jobs who read and execute export each minute.
The algorithme is :
keeprow=22000
while keeprow>0
Create 3 clob (DBMS_LOB Package) : one for XSL Sheet, one for XML and one for result
GetXML (XMLGEN Package)
Transform in XSL (XSL Processor)
Write to disk (UTL_FILE Package)
Free the 3 Clob ((DBMS_LOB Package))
keeprow =keeprow-500
loop
The problem : The process start at 250Mo ot total memory and END at 1000 Mo of used memory and NEVER RELEASE 1 ko of memory.
So often I get a JavaOutOfMemoryError (I've allocated 1Go Ram to my JAVA process).
Any help will be very very appreciated !
My derived problem is 22 000 rows is not enough I've some export of 200 000 rows to do (And I cannot allocate 10 Go of RAM !!!)
Following My PL/SQL Code.
Regards
Fred
     PROCEDURE DO_EXPORT_XML(
               P_JOB_ID JOB_PARAMETRE.JOB_ID%TYPE,
               P_JOB_ID_ORDRE JOB_PARAMETRE.JOB_ID_ORDRE%TYPE,
               P_CLE_UP UPLOADREQ_TEMP.ID%TYPE,
               P_LOAD_OR_DELOAD VARCHAR2)
          IS
          L_FILE_NAME JOB_PARAMETRE.JOB_FILE_NAME_DEST%TYPE;
          L_REP_NAME JOB_PARAMETRE.JOB_REP_NAME_DEST%TYPE;
          L_FILE_STYLESHEET JOB_PARAMETRE.JOB_STYLESHEET%TYPE;
          L_VERSION_PDM JOB_PARAMETRE.JOB_VPDM%TYPE;
          P_SELECT varchar2(4000):='';
          P_CURSOR varchar2(4000):='';
     l_filehandler_out UTL_FILE.FILE_TYPE;
          --Variable pour le traitement par lot de 500
          L_NBROW_TODO_ATONCE number := 500;
          L_NBROW_MIN number := 1;
          L_NBROW_MAX number := -1;
          L_NBROWKEEPTODO number := -1;
          xslString CLOB := null;
          res number default -1;
          xmlString CLOB := null;
          li_ret number := 0;
          li_faitle number := 0;
          amount integer:= 255;
          li_loop integer := 0;
          charString varchar2(255);
          ls_deload varchar2(255) default '';
          ls_SQL varchar2(4000) default '';
          ls_temp_file varchar2(255) default '';
          text_file_dir varchar2(32) := 'e:\temporarydir';
          l_par xmlparser.parser;
     l_xml xmldom.domdocument;
     l_pro xslprocessor.processor;
     l_xsl xslprocessor.stylesheet;
          docfragnode xmldom.DOMNode;
          docfrag xmldom.DOMDocumentFragment;
          l_parsedclob clob := null;
          l_amount binary_integer := 32767;
          l_ligne varchar2(32767);
          l_offset number default 1;
          l_pos number default null;
          l_pos2 number default null;
          l_lobsize number default null;
          l_memsize number default 1073741824; --1024 Mo
          l_mempipo number default 0;
          type rc is ref cursor;
          l_cursor rc;
          cursor TEMPLATE is select UNSPSC,1 as NB from UPLOADREQ_TEMP where 1=2;
          c1rec TEMPLATE%rowtype;          
          BEGIN
          l_mempipo:=setmaxmemorysize(l_memsize);
          dbms_lob.createtemporary(l_parsedclob, true, dbms_lob.session);
          dbms_lob.createtemporary(xmlstring, true, dbms_lob.session);
          --return the good select
          GET_SELECT_TO_EXPORT_XML(P_JOB_ID , P_JOB_ID_ORDRE , P_CLE_UP , P_SELECT,P_CURSOR, P_LOAD_OR_DELOAD);
                    SELECT JOB_FILE_NAME_DEST,JOB_REP_NAME_DEST,JOB_STYLESHEET
                    INTO L_FILE_NAME,L_REP_NAME,L_FILE_STYLESHEET
                    FROM JOB_PARAMETRE
                    WHERE JOB_ID =P_JOB_ID AND JOB_ID_ORDRE=P_JOB_ID_ORDRE;
                    l_filehandler_out := UTL_FILE.FOPEN(text_file_dir, L_FILE_NAME, 'w',l_amount);
                    --Return XSL Sheet in a clob : cause of memory consumed  but not released
               xslString := METACAT.load_a_file( 1,L_FILE_STYLESHEET);     
                    open l_cursor for P_CURSOR;
LOOP
               fetch l_cursor into c1rec;
               exit when l_cursor%notfound;
                         L_NBROW_MIN := 1;
                         L_NBROW_MAX := 0;
                         L_NBROWKEEPTODO:=c1rec.NB;
                         LOOP
                         begin
                              if(L_NBROWKEEPTODO > L_NBROW_TODO_ATONCE) THEN
                                   begin
                                   L_NBROW_MAX:= L_NBROW_TODO_ATONCE + L_NBROW_MAX;
                                   L_NBROWKEEPTODO:= L_NBROWKEEPTODO - L_NBROW_TODO_ATONCE;
                                   end;
                              else
                                   begin
                                   L_NBROW_MAX:= L_NBROW_MAX + L_NBROWKEEPTODO;
                                   L_NBROWKEEPTODO:=0;
                                   end;
                              end if;
                              --on ouvre le fichier de risultats
                              ls_SQL:= P_SELECT || ' AND ( ROWNUM BETWEEN ' || L_NBROW_MIN || ' AND ' || L_NBROW_MAX || ' ) and UNSPSC=''' || c1rec.UNSPSC || '''';
                              ls_temp_file := c1rec.UNSPSC || '_' || L_FILE_NAME;
                              L_NBROW_MIN:=L_NBROW_TODO_ATONCE + L_NBROW_MIN;
                              --CAT_AUTOLOAD.JOB_ADD_TRACE (P_JOB_ID,'UPLOAD REQUISITE : Export donnies REQUETE ' || to_char(li_loop), ls_SQL,'',0,0);
                              xmlgen.resetOptions;
                              xmlgen.setErrorTag('ERROR_RESULT');
                              xmlgen.setRowIdAttrName('NAH');
                              xmlgen.setRowIdColumn('NAH');
                              xmlgen.setEncodingTag('ISO-8859-1');
                              xmlgen.useNullAttributeIndicator(false);
                              if(xmlString is not null) then
                                   dbms_lob.open(xmlString,dbms_lob.lob_readwrite);
                                   l_lobsize:= dbms_lob.Getlength(xmlString);
                                   if(l_lobsize>0) then
                                   dbms_lob.erase(xmlString,l_lobsize,1);
                                   end if;
                                   dbms_lob.close(xmlString);
                              dbms_lob.freetemporary(xmlString);
                                   dbms_lob.createtemporary(xmlstring, true, dbms_lob.session);
                              end if;
--Return XML in a clob : cause of memory consumed  but not released
                              xmlString := xmlgen.getXML(ls_SQL,0);
                              l_par := xmlparser.newparser;
                              xmlparser.parseclob(l_par, xslString);
                              l_xsl := xslprocessor.newstylesheet(xmlparser.getdocument(l_par),null);
                              xmlparser.parseclob(l_par, xmlString);
                              l_xml := xmlparser.getdocument(l_par);
                              l_pro := xslprocessor.newprocessor;
                                   xslprocessor.showWarnings(l_pro, true);
                                   xslprocessor.setErrorLog(l_pro, text_file_dir || substr(ls_temp_file,0,length(ls_temp_file)-4) || '_logerreur.XML');
                                   if(l_parsedclob is not null) then
                                             dbms_lob.open(l_parsedclob,dbms_lob.lob_readwrite);
                                             l_lobsize:= dbms_lob.Getlength(l_parsedclob);
                                             if(l_lobsize>0) then
                                             dbms_lob.erase(l_parsedclob,l_lobsize,1);
                                             end if;
                                             dbms_lob.close(l_parsedclob);
                                        dbms_lob.freetemporary(l_parsedclob);
                                             dbms_lob.createtemporary(l_parsedclob, true, dbms_lob.session);
                                   end if;
                    --Return XML Processed with XSL in a clob : cause of memory consumed  but not released
                              xslprocessor.processxsl(l_pro,l_xsl,l_xml,l_parsedclob);
                                   --release NOTHING
                              xmlparser.freeparser(l_par);
                              xslprocessor.freeprocessor(l_pro);
                                                  l_ligne:='';
                                                  l_offset :=1;
                                                  l_pos := null;
                                                  l_pos2 := null;
                                                  if(li_loop=0) then
                                                       begin
                                                            --on ouvre le fichier et on sauve l'entete + les donnies dedans.
                                                                 l_pos:=dbms_lob.instr(l_parsedclob,'</DATA>');
                                                  if ( nvl(l_pos,0) > 0 ) then
                                                                      loop
                                                                      if(l_pos-1>l_amount + l_offset ) then
                                                                                l_ligne:=dbms_lob.SUBSTR(l_parsedclob,l_amount,l_offset);
                                                                                UTL_FILE.PUT(l_filehandler_out,l_ligne);
                                                                                UTL_FILE.fflush(l_filehandler_out);
                                                                                l_offset:=l_offset+l_amount;
                                                                           else
                                                                                l_ligne:=dbms_lob.SUBSTR(l_parsedclob,l_pos-1 -l_offset ,l_offset);
                                                                                UTL_FILE.PUT(l_filehandler_out,l_ligne);
                                                                                UTL_FILE.fflush(l_filehandler_out);
                                                                                exit;
                                                                           end if;
                                                                      end loop;
                                                                 else
                                                                      EXIT;
                                                                 end if;
                                                       end;
                                                  else
                                                       --on met les donnies donc on ne repete pas le debut
                                                       begin
                                                                 l_pos:=dbms_lob.instr(l_parsedclob,'<ITEM');
                                                  if ( nvl(l_pos,0) > 0 ) then
                                                                 l_pos2:=dbms_lob.instr(l_parsedclob,'</DATA>');
                                                  if ( nvl(l_pos2,0) > 0 ) then
                                                                      loop
                                                                      if(l_pos + l_amount <= l_pos2 -1 ) then
                                                                                l_ligne:=dbms_lob.SUBSTR(l_parsedclob,l_amount,l_pos);
                                                                                UTL_FILE.PUT(l_filehandler_out,l_ligne);
                                                                                UTL_FILE.fflush(l_filehandler_out);
                                                                                l_pos:=l_pos +l_amount;
                                                                           else
                                                                                l_ligne:=dbms_lob.SUBSTR(l_parsedclob,l_pos2 -1 -l_pos,l_pos);
                                                                                UTL_FILE.PUT(l_filehandler_out,l_ligne);
                                                                                UTL_FILE.fflush(l_filehandler_out);
                                                                                exit;
                                                                           end if;
                                                                      end loop;
                                                                      else
                                                                      exit;                                                                      
                                                                      end if;
                                                                 end if;
                                                       end;
                                                  end if;
                                             li_loop:=li_loop + 1 ;
                                             --UTL_FILE.FCLOSE(l_filehandler_in);
                                             JAVA_GC();
                                             EXIT WHEN L_NBROWKEEPTODO=0;
                                             Exception
                                             when others then
                                                  begin
                                                  -- IF(utl_file.is_open(l_filehandler_in)) THEN
                                                  --               utl_file.fclose( l_filehandler_in);
                                                  -- END IF;
                                                  IF(utl_file.is_open(l_filehandler_out)) THEN
                                                                 utl_file.fclose( l_filehandler_out);
                                                  END IF;
                                                  RAISE_APPLICATION_ERROR(-20001,'File with errors');
                                                  end;
                         END;
                         END LOOP;
END LOOP;
CLOSE l_cursor;
                    if ( xmlString is not null ) then
                              dbms_lob.open(xmlString,dbms_lob.lob_readwrite);
                              l_lobsize:= dbms_lob.Getlength(xmlString);
                              if(l_lobsize>0) then
                              dbms_lob.erase(xmlString,l_lobsize,1);
                              end if;
                              dbms_lob.close(xmlString);
                              dbms_lob.freeTemporary( xmlString);
                    end if;
                    if(l_parsedclob is not null) then
                              dbms_lob.open(l_parsedclob,dbms_lob.lob_readwrite);
                              l_lobsize:= dbms_lob.Getlength(l_parsedclob);
                              if(l_lobsize>0) then
                                   dbms_lob.erase(l_parsedclob,l_lobsize,1);
                              end if;
                              dbms_lob.close(l_parsedclob);
                              dbms_lob.freetemporary(l_parsedclob);
                    end if;
                    UTL_FILE.NEW_LINE(l_filehandler_out);
                    l_ligne:='</DATA></CATALOG>';
                    UTL_FILE.PUT(l_filehandler_out,l_ligne);
                    UTL_FILE.FCLOSE(l_filehandler_out);                    
               EXCEPTION
               when others then
                         begin
                         IF(utl_file.is_open(l_filehandler_out)) THEN
                                   utl_file.fclose( l_filehandler_out);
                              END IF;
                         end;     
          END;
******************************

Thank you for the info - I had no idea I was puing myself in danger by cutting it so close.  Since your post I have moved my iphoto library to an external drive and now have 165 GB of space on my HD.  Following this I have 2 questions.
1.  Since my available HD space was reduced by the size of the photo download it seems logical that the download is somewhere on my HD still.  Is there a place where these photos might be hiding on my HD even though they are not available on the iphoto library?
2.  I was able to recover the .jpg files which are fine.  I also recovered the .mov files but they have been compromised.  I am hoping I can find the originals still on the HD somewhere.  If not, do you have any suggestions for recovery methods or programs?  I have not used the SD card since the incident so I should be able to attempt another recovery to salvage the .mov files if there is an alternative method/program available.
Thanks again!

Similar Messages

  • HT204053 My kids now each have an itouch, should we all have different apple ids even if I am paying for all itunes and app store purchases? what about icloud? I would like to share itunes and app purchases, but not necessarily photos...help please!

    My kids now each have an itouch, should we all have different apple ids even if I am paying for all itunes and app store purchases? what about icloud? I would like to share itunes and app purchases, but not necessarily photos...help please!

    The recommended solution for most families is to share the same Apple ID for iTunes and App Store purchases, so you can share your purchases, but us different IDs for iMessage, FaceTime and iCloud.  With this arrangement, each person can automatically download purchases made on the shared ID (by turning this feature on in Settings>iTunes & App Stores), while keeping their FaceTime calls, text messages and iCloud data (including photo stream) separated.  There is no requirement that the ID you use for purchasing be the same as the ID you use for these other services.
    This article: http://www.macstories.net/stories/ios-5-icloud-tips-sharing-an-apple-id-with-you r-family/.

  • I have a new iPad with wifi. When I send messages I can see my sons and my husbands but not my phone number.  We all have an iPad and all use the same apple ID as iPad the bill.  How can I remove their numbers and add mine?

    I have a new iPad with wifi. When I send messages I can see my sons and my husbands but not my phone number.  We all have an iPad and all use the same apple ID as iPad the bill.  How can I remove their numbers and add mine?

    Add another e-mail account to your messages, so people could reach you on that e-mail from messages. As soon as you are online (if you have wifi only iPad) you are able to send and receive messages. i.e. your son can send you a messages from his iPhone addressing it to your (that additional) e-mail address.

  • I set up my iCloud account on iPad with an exchange account and aol account.  I can see exchange and aol emails but not those from .me account or apple email.  I got it to show all 3 accounts on my iPhone with no problem.  Hat am I missing?

    I set up my iCloud account on iPad with an exchange account and aol account.  I can see exchange and aol emails but not those from .me account or apple email.  I got it to show all 3 accounts on my iPhone with no problem.  Hat am I missing?

    I'm having a similar problem, but I do have the key and is not working anyway.
    My old pc was running on windows 7 and my new one is an apple running on Lion.
    My phone is an Iphone IV and I can see all the bookmarks there.
    In order to sync, what I did was click on the "I don't have the device with me", I entered the key that was provided and the process finish ok. It says congratulations, etc, etc.
    But the bookmarks are not there, I tried merging data and replacing data on this computer options but is the same.
    Any suggestions?

  • I was updating my software on my iphone 4 and it crashed so it recovered it and i restored it from its back up. However I have lost all my music and my apps but not my pictures. How can i get my music back and apps back?

    I was updating my software on my iphone 4 and it crashed so it recovered it and i restored it from its back up. However I have lost all my music and my apps but not my pictures. How can i get my music back. I did not remove my phone from the computer until it had said it had finsihed.

    Media and apps are not part of the backup. They need to be re-synced from your itunes library or re-downloaded from the store.

  • I can not get Firefox to play music backgrounds on pages in browsers it works in IE and other browsers but not firefox, what HTML or Jave script do I need too use to make them work?

    I'm having a problem with firefox playing background music on some sites, it works with IE and other browsers but not with fire fox, what html or java script do I need to add to the pages so that they play the music?
    I develop my pages in Front Page and I know that the music only works in IE, so if someone can tell me how to correct this problem as it is important as I use fire fox as my main browser.
    I thank you in advance

    If a website uses BGSOUND then it will only work in IE.
    BGSOUND is not compatible with other browsers like Firefox.
    * http://kb.mozillazine.org/Background_music_does_not_play

  • Oracle xml DB and text features are not installed

    HI,
    I installed Sql developer 3.0 ,oracle 11g and jdk 7 on centos 5.when iam running sql developer its showing error message oracle xml DB and text features are not installed.
    pls anyone help me out.
    thanks
    srinivas
    Edited by: srinivas on Oct 17, 2011 4:49 AM

    may be help you
    Re: Connection Error - Oracle XMLDB and Text Features are not installed.

  • How to remote desktop user can read, write ,modify and traverse folder but not execute?

    Now I ceate a user accout whis is user type and put him into remote desktop group.
    he can login this server by remote desktop.
    My server is windows 2003 but not in nt domain and  it is a workgroup computer.
    I want to limit him access right on one folder in which have many folders and .exe file.
    I only want he can read , write,modify file and traverse folder but not execute any .exe file.
    How can I implement this through NTFS.
    Please give me some advice.

    Hi,
    I think you could using advanced option to configure the file or folder permission:
    http://technet.microsoft.com/en-us/library/bb727008.aspx
    Regards.
    Vivian Wang

  • I can't enter gmail. The error 'The page isn't redirecting properly' shows up. I can access gmail on my phone and with IE, but not firefox.

    I've tried to clear the cache and delete the cookies from gmail, but neither has worked. I can access gmail from my phone and through IE but not firefox. I also use the gmail gadget on my igoogle page and it does not work either.

    Top of your browser click on Firefox, select Options
    Select "Use Custom Setting for History"
    Then click show cookies, then remove All Cookies
    Close browser and restart, should work nicely
    Simple fix (cause of the problem, since you select copy Cookies and History, Favs from Explorer they are clearly not compatible, so that is why you get the error)
    Firefox guys need to fix this is serious challenge for new users.

  • I have an older HP5550C flatbed scanner that works with 10.5 and 10.6 but not on my new iMac running 10.7

    I have an older HP5550C flatbed scanner that works with 10.5 and 10.6 but not on my new iMac running 10.7. Surely there is software that will allow older scanners to work on OS10.7. My MacBook Pro runs 10.6 and the

    Although the HP Scanjet shows up in the system profile for the computer it is generic and is not configured (as in screen shot).  It also does not show up in the ;ist of pritnters, scanner when I open Image Capture.  I can't load the software that came with the printer because it is out of date so that would make it impossible to configure the scanner on the new iMac. see below:  Too bad there isn't some generic profile I could load that would cover the 5550c. I have a new all in one printer-fax-scanner but the old one can scann in slides and negatives which I have.

  • I deleted photobooth by accident and i have tried to get it back with the setup disk, i got imovie and garageband back but not photobooth. Any ideas?

    i deleted photobooth by accident and i have tried to get it back with the setup disk, i got imovie and garageband back but not photobooth. Any ideas?

    PhotoBooth is not on the iLife disk which has iMovie and Garage Band.  PhotoBooth is integrated into OSX, so it's not going to be easy to get back.  You'll need to get it from the recovery disk or partition.  Which OSX are you using so we can point you in the right direction.  NEVER delete any of the OSX programs.

  • Anyone have problems with apple ID's? I have the correct ID in my settings but when I try to update my apps my ID shows my first name and last name but not my ID? I'm not sure what else to do because I've made sure I have the correct ID in my settings!

    Anyone have problems with apple ID's? I have the correct ID in my settings but when I try to update my apps my ID shows my first name and last name but not my ID? I'm not sure what else to do because I've made sure I have the correct ID in my settings! Anyone else have this issue?

    I think its meant to show your name, not your ID.

  • Bought Photoshop CC and Lightroom 5 but not able to download

    bought Photoshop CC and Lightroom 5 but not able to download. while the creative cloud kept update of Photoshop CC but I'm unable to open it.

    do you have a 64 bit os?
    if yes, use a different browser.
    if no, those apps are 64 bit only.

  • Why can a person buy and/or download Snow Leopard, Lion, and Mountain Lion but not Mavericks???

    I am running OS X Lion on a mid 2009 MacBook Pro with 4GB of ram and a 160GB HDD. I was going to download Mavericks from the app store but waited to long. Now that Yosemite is out Mavericks has disappeared from the app store. WHY? A person can buy and/or download Snow Leopard, Lion, and Mountain Lion but not Mavericks??? And the kicker is that it was FREE!!! I just wanted to load Mavericks on my MacBook Pro to see how it performs. If I could live with any slow downs or quirks, I'd leave it installed. If not, I'd roll my system back. Apple's policy of ramrodding unstable product down our throat is BS. I don't want to use Yosemite until it has become more stable!

    Upgrading to Snow Leopard
    You can purchase Snow Leopard through the Apple Store: Mac OS X 10.6 Snow Leopard - Apple Store (U.S.). The price is $19.99 plus tax. You will be sent physical media by mail after placing your order.
    After you install Snow Leopard you will have to download and install the Mac OS X 10.6.8 Update Combo v1.1 to update Snow Leopard to 10.6.8 and give you access to the App Store. Access to the App Store enables you to download Mavericks if your computer meets the requirements.
    Upgrading to Lion
    If your computer does not meet the requirements to install Mavericks, it may still meet the requirements to install Lion.
    You can purchase Lion at the Online Apple Store. The cost is $19.99 (as it was before) plus tax.  It's a download. You will get an email containing a redemption code that you then use at the Mac App Store to download Lion. Save a copy of that installer to your Downloads folder because the installer deletes itself at the end of the installation.
    Upgrading to Mountain Lion
    To upgrade to Mountain Lion you must have Snow Leopard 10.6.8 or Lion installed. Purchase a redemption code at the Online Apple Store: OS X Mountain Lion. Mountain Lion is $19.99 plus tax. Use the code to redeem a download of Mountain Lion from the App Store. The file is quite large, over 4 GBs, so allow some time to download. It would be preferable to use Ethernet because it is nearly four times faster than wireless.

  • Why can't I get the advanced selection available in EPUB export options in illustrator CC?  It's just not there.... Neither is the image selection available.  Only Epub reflowable and fixed layout, but not EPUB...

    Why can't I get the advanced selection available in epub export options in illustrator cc? It's not there and neither is image selection.  only epub reflowable and fixed layout but not just epub.. I don't know where it is to do some book exercises for my studies.  Very frustrating.

    This is the EPUB forum: InDesign EPUB

Maybe you are looking for

  • SQL only ViewObject with WhereClause

    I have a sql only viewobject. My query that makes this viewobject contains a where clause to indicate a join. The viewobject works fine but I cannot do the setWhereClause(string) to add on criteria if I want to search the view. It looks like bc4j doe

  • [Solved] ampache - missing mysql extensions and Iconv support

    I was about to install amache. I've installed it using yaourt -S ampache. Installation went fine. But when I go to IP/ampache I see 2 errors: Mysql for PHP [ ERROR ] This test checks to see if you have the mysql extensions loaded for PHP. These are r

  • ITunes opens by itself repeatedly

    iTunes has started opening up by itself. Sometimes it starts playing the first thing on the list. Most times it just opens up without playing, but the window doesn't come to the forefront, like when you intentionally open a program. Most of the time

  • Starting to get Kernel Panics

    Hi everyone, Last month, while working my Mac Pro it kind of “turn off” on me;you could still hear the drive and the fans on as well as the isight camera lighton but the music was cut off and it started to sound like a scratched cd, sothe only thing

  • ABAP Douments and Training material

    hi Floks , Can you Please help out in Abap programming and advanced topics total documents and related links  send me . it s will help to learn new topics ///////// thanks . Sunitha