SQL processing in ABAP

I'm learning ABAP from the book
Introduction to ABAP/4 Programming for SAP
by Gareth M. de Bruyn and Robert W. Lyfareff
and read now that SQL SELECTs run like loops. I worked with SQL before and didn't have that idea in mind, I wonder if this is something peculiar to ABAP or indeed, in common RDBMS, such as Oracle, it always works like that.
The book says that the
     SELECT * FROM tab [WHERE condition].     
     ENDSELECT.
functions like a loop - I always thought that the whole result was buffered at once (or at least the first ***** rows for immediate use). Looping for me is a functionality related to Cursors.
Excerpt from the book:
SELECT is a looping command, as you can see by the presence of the ENDSELECT command. When a SELECT is issued against a table, it returns all rows of data contained in that table, one at a time. So the first row returned is available for processing during the first pass of the loop. The second row is available during the second pass of the loop, and so on, until all rows have been read from the table.
Please leave your comments.
Thanks
Edited by: Avraham Kahana on Jun 29, 2008 10:14 AM

Hi Avraham,
    Select-Endselect just behaves like a looping statement, which fetches the data from database table record by record.
But, from the point of performance, this is not a good way to select data from the database table using Select-Endselect.
Instead of going for Select-Endselect  and writing the data within the loop, we select data from database into an internal table and then write the data.
The code snippet goes as follows and  it is better in performance also:
Select *
  from <dbtab>
  into table itab
where <condition>
Then we go for the display of  the records.
Hope this helps you.
Any queries, get back to me.
Regards,
Chandra Sekhar

Similar Messages

  • Who to use Native SQL statements in ABAP

    hi all,
    who to use native sql staements in abap bypassing Application server.
    with regards,
    suresh babu aluri.

    Hi
    Native SQL statements define an area in an ABAP program in which one or more Native SQL statements are to be carried out. The area between EXEC and ENDEXEC is not completely checked by the syntax check. The statements entered there are passed to the Native SQL interface and processed there as follows:
    Almost all SQL statements that are valid for the addressed database system can be included between EXEC and ENDEXEC, in particular the DDL statements. These SQL statements are passed from the Native SQL interface to the database system largely unchanged. The syntax rules are specified by the database system, in particular the case sensitivity rules for database objects. If the syntax allows a separator character between individual statements, you can include several Native SQL statements between EXEC and ENDEXEC. Generally, the semicolon ( is used as the separator character.
    You can also include SAP-specific Native SQL language elements between EXEC and ENDEXEC. These statements are not passed directly from the Native SQL interface to the database, but are converted appropriately.
    All Native SQL statements bypass SAP buffering.
    The ENDEXEC statement sets sy-dbcnt to the number of table rows processed in the last Native SQL statement. After implicit cursor processing with PERFORMING, sy-dbcnt contains the total number of lines read.
    Programs with Native SQL statements are generally dependent on the database system used, so that they cannot be executed in all ABAP systems. This is especially true for the examples in this section, which was written for Informix database systems.
    Example
    Inserting two rows in the database table SCARR. If neither of these rows exists, sy-subrc is set to 0 by ENDEXEC and sy-dbcnt to 1. Otherwise, an exception is raised and handled.
    DATA: exc_ref    TYPE REF TO cx_sy_native_sql_error,
          error_text TYPE string.
    TRY.
        EXEC SQL.
          INSERT INTO scarr
                      (MANDT, CARRID, CARRNAME, CURRCODE, URL)
            VALUES ('000', 'FF', 'Funny Flyers', 'EUR',
                    'http://www.ff.com');
          INSERT INTO scarr
                     (MANDT, CARRID, CARRNAME, CURRCODE, URL)
            VALUES ('000', 'EF', 'Easy Flyers', 'EUR',
                    'http://www.ef.com');
        ENDEXEC.
      CATCH cx_sy_native_sql_error INTO exc_ref.
        error_text = exc_ref->get_text( ).
        MESSAGE error_text TYPE 'I'.
    ENDTRY.
    Reward points if useful
    Regards
    Anji

  • Compilation process of ABAP code.?

    Hai every one.
    Can any one tell me how a ackground process of ABAP code..How it is executed and How it is stored in database ( In which form )..!

    This is probably the strangest thread I've seen for a while.  First of all, why do you care?   Just abstract knowledge?
    ABAP is not a compiled language.  Therefore there is no compilation process.  ABAP is interpreted.  If you want to know what that means, then go read a dictionary or wikipedia or something similar.
    When you save an ABAP program it is stored in the database.  You do not put it into the database or retrieve it from the database directly, using any form of SQL.  Indeed, from ABAP, you can't.  You use the editor and the save function.  Programs are only "stored" in memory when you RUN them.  You can have many versions of a program as well as the active/inactive versions.  For information about that, search the help on version management and change and transport system (CTS) 
    Different programs are differentiated in the database by the name of the program.  How else would it be done?

  • Problem setting a hidden item value when button clicked with dynamic action or pl/sql process

    Apex 4.1
    Oracle 11g
    I have a page that consists of a main region and several sub regions.  I have a pl/sql process in After Header SET_DISPLAY(:P400_DISPLAY :='MAIN';)
    Three subregions have a contional display where P400_DISPLAY = STORE.  This works in hiding the sub regions.
    Now I want to change the P400_DISPLAY value to STORE to show the subregions when I hit a button.
    I tried creating a dynamic action for on click of the add button but get the following error:
    The selected button uses a 'Button Template' that does not contain the #BUTTON_ID# substitution string
    I went to the templates and found:
    Substitution Strings
    Substitution strings are used within sub templates to reference component values. This report details substitution string usage for this template.
    Substitution String
    Referenced
    From
    Description
    #LINK#
    Yes
    Template
    To be used in an "href" attribute
    #JAVASCRIPT#
    No
    To be used in an "onclick" attribute
    #LABEL#
    Yes
    Template
    Button Label
    #BUTTON_ATTRIBUTES#
    No
    Button Attributes
    #BUTTON_ID#
    No
    Generated button ID will be either the button's Static ID if defined, or if not will be an internally generated ID in the format 'B' || [Internal Button ID]
    I then tried creating a page process, pl/sql, :P400_DISPLAY :='STORE'; when the appropriate button is pressed.  The button action is submit page. However, it does not change the P400_DISPLAY value and the subregions stay hidden.
    Suggestions please on how to fix the template or change the P400_DISPLAY value?

    The root issue is that, although you change the value of your page item, it isn't visible to other areas of the page until it is in the session. So, any other action based on the value of your page item; the visibility of a control, a report based on the item's value, etc. will all be unaffected by changing the value of the page item until it has been changed in the session. Even after this the items are stored in the session, you must thereafter do something to cause the value to be reevaluated. To see the effect of this, observe that your page loads and evaluates the value of your page item, it sees that is "MAIN" and hides the regions. However, it doesn't reevaluate them after this.
    So; your choices to get this value set in the session are to either Submit the page, or use JavaScript to set the value in the session. If you use the latter of these, you'll have to do some further work to cause the visibility tests to be re-run, So, let's stick with with the submit method.
    What you've done above sounds correct for this but, there are a lot of decisions you could have made that might have caused things not to happen in the correct sequence.
    Firstly, let's confirm that what I describe above is your problem. From the development environment, load the page, click the button to change the value and submit. Now, click the link labelled Session. Is it still set to MAIN? If so; this is your issue.
    Let's start with the your After Header computation. Did you set it to *only* run if the current value of your page item is NULL??? If not, that's your problem.
    Load Page -> Item set to 'Main' by Computation -> Click Button -> Item set to STORE -> Submit -> Load Page -> Item set to 'Main' by Computation
    See the problem?
    Assuming this isn't the issue, you created a Branch to the same page, right? What is your process point for the Branch? Is it *After* Validation, Computation etc? Because if not, you aren't changing the value before the submit happens.
    I bet it is the first issue but, take a look at these.
    Cheers,
    -Joe

  • Export to excel the output of a pl/sql process

    Hi,
    I have a pl/sql process on load of a page.
    The code uses html tags like HTP.P('<TABLE BORDER="0" CELLSPACING="0">');     
              HTP.P('<TR>');     HTP.P('<TD COLSPAN="6">');
         HTP.P('Title');     HTP.P('</TD>');
              HTP.P('</TR>'); HTP.P('</TABLE>');
    and several loops to display the names of employees in seven rows and three colums.Is it possible to export this data to excel/.csv format?
    Thanks in advance...
    Anu

    You could also take the example from my blob that Denes mentioned and instrument it to output in either CSV or HTML. This way, you could have a single procedure that worked for both formats.
    All you would need to do is handle each field differently - pad a TD and /TD (with proper brackets, of course) if its HTML or just append a comma if it's CSV.
    Thanks,
    &#150; Scott &#150;
    http://spendolini.blogspot.com/
    http://sumnertech.com/

  • Process Type ABAP does not work properly via process chain

    Dear SDNers
    I am running a process chain and it contains process type ABAP program. ABAP program was running correctly till now via this process chain. ABAP program process type generally takes approximately 2 hours to run. But now, this process type for ABAP program just run for less than 1 minute and finishes successfully. The issue is that ABAP program does not run at all.
    I ran the ABAP program in background and it took approximately 2 hours to run. ABAP Program is local means in our BW system and does not involve Remote Function call. We have BI7.0 system
    Has some one came across this type of issue?
    Best Regards
    Pradip

    Has the aleremote user or which ever user you have defined for background scheduling changed permissions recently?
    What happens if you create an adhoc chain and include this ABAP variant, does it run then?
    What does the log say in SM37 when run via process chain?
    Cheers
    Craig

  • Apex: output message from pl/sql process

    Apex 4.2
    THis is kind of an Apex and Pl/Sql question, but more so Apex because I'm using that environment. I have a pl/sql process with an IF - Else statement. It's a real simple process where you check:
    IF P101_Count > 1 Then
       Do stuff;
    Else
       Output an error message.
    The process runs when I click a button.
    I am just not sure how to get an error message to display to the screen. I am not sure of the syntax.
    Any help on this topic would be greatly appreciated. Thanks in advance.

    Well, there a lots of ways to do this but, if you just want to see it on the screen, the easiest way is to add a Page Item (a Text Field for example). Then, in the Else portion just set it equal to the message that you are trying to display.
    If ( :P101_Count > 1 ) Then
    -- Do Stuff
    Else
    :P1_MY_MESSAGE := 'Hello World!';
    End If;
    -Joe

  • Alert/Warning messages from PL/SQL process

    Hi all,
    I have a PL/SQL process that I execute from javascript : doSubmit(MY_PROCESS). I want to output an alert box if some errors occurs in the process, for instance : alert('message'). Does anyone know how to do that ?
    Best regards,
    Othman.

    Thanks Andy for the reply.
    My process executes "after submit", so I cannot call directly the javascript as one mentioned. The call to "html_Get" seems to be quite complicated for a simple alert message which is not really a Application process shared component.
    So I'll go for a solution where users won't see error messages ...
    Best regards,
    Othman.

  • Calling JS function in pl/sql process

    Hello!
    I have a js function defined in 'HTML Header' :
    <script language="JavaScript" type="text/javascript">
    function disp_alert()
    alert("Data is invalid! Correct the data and click CONFIRM again.")
    </script>
    I also have a pl/sql process on this page. I want to call disp_alert function in a following way:
    if ... then call function
    else dbms_output.put_line('...');
    end if;
    How can I call this js function in 'if'??
    Tom

    There ARE ways to accomplish something like this, but they're much more complex.
    You must create a JavaScript that uses APEX's built in AJAX components; a form button will call the JavaScript, which will in turn call a PL/SQL procedure saved as an "On Demance Shared Application Process." This procedure can run any checks you like against the DB, and return data to the Javascript to display in an alert.
    You can see an example of this in use at an APEX page I created: http://htmldb.oracle.com/pls/otn/f?p=19864:5
    This isn't the same thing, but is accomplishing what it does through an APEX form, a javascript call on the text field to a PL/SQL Process that returns rows from the database dynamically...thus allowing the client side JavaScript to call server side PL/SQL.

  • Start BPM process from ABAP report. Need some investigations.

    Hi there!
    I have to start a BPM process from ABAP report. I found an article http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/10d75b45-7fef-2b10-bc8e-c6012e0a9457?QuickLink=index&overridelayout=true and have done everything it describes but the process doesn't start.
    What I've done:
    1) Created a service proxy in SE80.
    2) Created a logical port in SOAMANAGER.
    3) Write a code to start a WebService in ABAP Report.
    But when I start a program nothing happens, no errors.
    What analysis I did:
    1) See logs and traces in SOAMANAGER - there is nothing appears after I start the report.
    2) Tried to test connection to my WebService in SM59 - the connection works, but it use a POST method instead of GET:
      Error: com.sap.engine.services.webservices.espbase.server.additions.wsa.WSAddressingException: com.sap.SOA.wsr.030104 - Expected request method POST. Found GET.
    But I think it is OK and from the report it use a right method.
    3) Tried to delete a logical port - the error of communication problem appears. So it means that all settings are right.
    4) No logs in NWA logs
    My thoughts - if there is not any errors and no result, it can be because the user authorization. E.g. it tried to start a process by a user who doesn't have SAP_BPM_SuperAdmin role. But I can't find a way how to check what really happens. So I want to ask for a help, colleagues:).

    Dear Kirill Zhuklinets,
    Can you share your solution as i am facing the same error while trying to consume BPM webservice from SRM ECC
    Error Message from SRM ECC :
    Exception occurred in communication framework:Error in HTTP Framework:405Method Not Allowed
    Log from BPM Web service
    Error: process()
    [EXCEPTION]
    com.sap.engine.interfaces.webservices.runtime.RuntimeProcessException: com.sap.engine.services.webservices.espbase.server.additions.wsa.WSAddressingException: com.sap.SOA.wsr.030104 - Expected request method POST. Found GET.
    Please share your solution..
    Regards,
    Yasin

  • PL/SQL process and popup URL

    Hi,
    I have a PL/SQL process which is called on submit but a button. This Pl/SQL creates a file on the web-server and I then want to open this file in a new browser window using the URL path to it. Can this be done from pl/sql or do I need to embed some javascript somewhere in the page. My eg block is :-
    begin
    pack.proc(15);
    owa_util.mime_header('application/vnd.ms-word');
    htp.init ;
    owa_util.redirect_url('http://server:port/my_dir/myfile.doc');
    end;
    The redirect doesnt do anything.
    Thanks for any assistance,
    Brandon

    Hi Teku,
    You just have a look at this thread, where u can find a solution for your problem.
    INSERTING Records into Second table based on First table Primary Key
    hope this helps.
    Bye,
    Srikavi

  • Parallel Processing through ABAP program

    Hi,
    We are trying to do the parallel processing through ABAP. As per SAP documentation we are using the CALL FUNCTION STARTING NEW TASK DESTINATION.
    We have one Z function Module and as per SAP we are making this Function module (FM)as Remote -enabled module.
    In this FM we would like to process data which we get it from internal table and would like to send back the processed data(through internal table) to the main program where we are using CALL FUNCTION STARTING NEW TASK DESTINATION.
    Please suggest how to achieve this.
    We tried out EXPORT -IMPORT option meaning we used EXPORT internal table in the FM with some memory ID and in the main program using IMPORT internal table with the same memory ID.  But this option is not working even though ID and name of the internal table is not working.
    Also, SAP documentation says that we can use RECEIVE RESULTS FROM FUNCTION 'RFC_SYSTEM_INFO'
    IMPORTING RFCSI_EXPORT = INFO in conjunction with CALL FUNCTION STARTING NEW TASK DESTINATION. Documentation also specifies that "RECEIVE is needed to gather IMPORTING and TABLE returns of an asynchronously executed RFC Function module". But while creating the FM remote-enabled we cant have EXPORT or IMPORT parameters.
    Please help !
    Thanks in advance
    Santosh

    <i>We tried out EXPORT -IMPORT option meaning we used EXPORT internal table in the FM with some memory ID and in the main program using IMPORT internal table with the same memory ID. But this option is not working even though ID and name of the internal table is not working</i>
    I think that this is not working because that memory does not work across sessions/tasks.  I think that the
    IMPORT FROM SHARED BUFFER and EXPORT TO SHARED BUFFER would work.  I have used these in the past and it works pretty good.
    Also,
    here is a quick sample of the "new task" and "recieve" functionality.   You can not specify the importing parameters when call the FM.  You specify them at the recieving end.
    report zrich_0001 .
    data: session(1) type c.
    data: ccdetail type bapi0002_2.
    start-of-selection.
    * Call the transaction in another session...control will be stop
    * in calling program and will wait for response from other session
      call function 'BAPI_COMPANYCODE_GETDETAIL'
               starting new task 'TEST' destination 'NONE'
                   performing set_session_done on end of task
        exporting
          companycodeid             = '0010'
    * IMPORTING
    *   COMPANYCODE_DETAIL        = ccdetails
    *   COMPANYCODE_ADDRESS       =
    *   RETURN                    =
    * wait here till the other session is done
      wait until session = 'X'.
      write:/ ccdetail.
    *       FORM SET_session_DONE
    form set_session_done using taskname.
    * Receive results into messtab from function.......
    * this will also close the session
      receive results from function 'BAPI_COMPANYCODE_GETDETAIL'
        importing
           companycode_detail        = ccdetail.
    * Set session as done.
      session = 'X'.
    endform.
    Hope this helps.
    Rich Heilman

  • Before header pl/sql process creates blank space at top of page

    Hi,
    I'm finding that w/v 1.6.1 I get a blank space at the top of my page that appears to be somewhat proportional to the amount of code and/or # processes on that page that are before header. moving to after header and before regions also shows this behavior.
    There are no blank line outputs happening in the pl/sql processes, so I've got no idea why htmldb is putting blank space there.
    Anyone seen anything like this? Oracle 9.2.0.7, winxp pro
    Thanks
    matt

    Hi,
    I've had the same problem. I'm assuming that you have a region in the "After Header" position?
    If so, you could add the following in the region's Region Header:
    &lt;div style="display:none"&gt;
    and put this in the Region Footer:
    &lt;/div&gt;
    The region is defined in a table, which by definition is a block object. Block objects always begin on a new line and end with a new line - the above will put the region into a div and then hide the div.
    Regards
    Andy

  • Parallel Processing in ABAP

    Hi,
    I have a internal table that has object references in it. Each item in the table are indepenent of the other. I want to extract info from each object and convert it into a internal table so that i can pass it to an RFC function.
    So how can i do this extraction of the info from the objects in internal table in parallel.
    To use the STARTING NEW TASK, i created a fn module that is RFC enabled.... then i can't pass the object reference to this module. So how can do this?
    Also i read that this function module call will create a main or external session which has a limit of 6 per user session.Is this correct?
    If above can be done, I also wanted to restrict the no of parallel processes being executed at any point of time to be 5 or so.
    thanks in advance
    Murugesh

    Hi Murugesh,
    Parallel processing can be implemented in the application reports that are to run in the background. You can implement parallel processing in your own background applications by using the function modules and ABAP keywords.
    Refer following docs.
    <b>Parallel Processing in ABAP</b>
    /people/naresh.pai/blog/2005/06/16/parallel-processing-in-abap
    <b>Parallel Processing with Asynchronous RFC</b>
    http://help.sap.com/saphelp_webas610/helpdata/en/22/0425c6488911d189490000e829fbbd/frameset.htm
    <b>Parallel-Processing Function Modules</b>
    http://help.sap.com/saphelp_nw04s/helpdata/en/fa/096ff6543b11d1898e0000e8322d00/frameset.htm
    Dont forget to reward pts, if it helps ;>)
    Regards,
    Rakesh.

  • Heavy SQL process

    Hello,
    We wanted to develop a parametrable SQL filter that can make comparison, sorting and updating operations with our RDBMS (Sybase SQL Server 11.9.2.3 connected to Websphere Application Server 3.5.4).
    Since a generic item (it's a product) of our RDMS contains 400 attributes and that we have approximatively 70000 items in our database, performance is quite important for us !
    A typical operation of our software is to compare one product (and his 400 attributes one by one in a discriminate order) for filtering purpose.
    So we got several architecture alternatives :
    - Stay in the Java world and load all needed objects in memory (using for exemple a relationnal/object mapping framework like Castor) and then compare them... but it's too bad in term of performance !
    - Delocalize compare methods in the SQL world by using JDBC Query or JDBC call to stored procedure...
    Does anybody known the best way to deal with this sort of heavy SQL process in the Java World ?
    All samples, documentations, filtering or compare algorithms are welcome !
    Thanks a lot
    Ghislain Sillaume

    If you mean that the Java/CASTOR option would be to pull in a large number of the products into memory, map them into object to do a comparison, then that would be unwise at best. If you only need to pull in a few of the products, that may be sufficiently fast (as fast or faster than doing it in the DB.
    It seems to me that a technique based on writing stored procedures to do your comparisons would be your best bet, assuming that a few sufficiently paramaterized stored procs would suffice. This, coupled with adequate indexes and well design queries should perform quite well. If you need to then pull the product definitions into a Java program, you can use an OR mapper or hand coding to do it quite easily once you figured out what the results should be...
    Chuck

Maybe you are looking for

  • CFDocument and pagesize

    Having issues since the install of Acrobat Reader 8 with pagesize. I have a document that needs to be rendered 14x8.5 (Legal Landscape). I have tried pagetype="legal" orientation="landscape", I have also tried pagetype="custom" pageheight="8.5" pagew

  • Stylesheet control from a loaded xml

    The xml ist ok and I have a control of a loaded css file here (title {color: #FF0000} function onTxtComplete(e:Event):void {     my_txt.styleSheet=my_css;     my_txt.text = myXML; The xml is ok and the title appears BUT I loose the css (the same) con

  • Time, airport, battery meter will not display.

    Hey I have an ibook g4 that does not want to display the battery meter, sound volume, time & day. for some reason. I have looked all over system prefs and got nowhere fast. If someone can let me know whats up...please do. I have tried to right click

  • Can apple mail be used from the command line?

    Can the Mac Mail application be used from the OSX command line?  Has anyone installed a command-line, Linux-like mail application to run on OSX?

  • Cant open RDF file

    I been working on developing a new report for the past 3 days. After I saved the RDF file, i closed it and reopened it again but it didnt let me open the file. Every time I pick the RDF file and click open, the open box stays there and doesnt open th