Restricting SELECT to return 'n' hits only

Hi everybody!
I have a problem that I hope you can help me solve, and it is regarding the SELECT statement.
I am using SELECT to check user input and make sure there is data to be output on the screen..The problem is that I do not need to query the entire table (BSEG in my case) but only to make sure there is at least one result of the query.
So my question is: How do you tell a SELECT query to restrict the number of returned hits to 1 or 2 or n hits? Or is there a way to leave the SELECT loop once a hit is found? Is there a way to do this without using SELECT SINGLE?  (I tried SELECT SINGLE, but honestly, it makes things complicated for me - it means i have to introduce some new structure, and I'd like to avoid this, if possibile)
Please help if you are able to, points will be awarded.
Thanks!
S.

Hi,
you can use select up to 1 rows..
Check this example..
SELECT * UP TO 1 ROWS FROM BSEG
             WHERE BUKRS = '0001'     " Company code
             AND       BELNR  = 'xxxxxx'  " Accounting document
             AND       GJAHR  = '2006'.
ENDSELECT.
OR
*It can be a variable also..
DATA: V_INT TYPE I.
V_INT = 2.
SELECT * UP TO V_INT ROWS FROM BSEG
             WHERE BUKRS = '0001'     " Company code
             AND       BELNR  = 'xxxxxx'  " Accounting document
             AND       GJAHR  = '2006'.
ENDSELECT.
Thanks,
Naren

Similar Messages

  • Report execute time nd how many records will be returned before hitting the "run" option?

    Post Author: Prasad15
    CA Forum: WebIntelligence Reporting
    Is there any way to know how long the report executes and how many records will be returned before hitting the "run" option?
    Regards
    Prasad

    To know if the report is going to return more than 10,000 records, you first have to run the query with a 'select count(1) from ... where ...' (with the same from and where clauses as you normal query). Since this takes about the same time as runnng your report, I wonder if you really gain anything (although formatting may take some time too).
    You may simplify the select count(1) query by omitting all the lookup tables that are only needed for formatting. That way your query may run a lot faster. You can put this in your after parameter form trigger.

  • "select count(*)" and "select single *" returns different result

    Good day!
    product version SAP ECC 6.0
    oracle10
    data transfers from external oracle db into customer tables using direct oracle db link
    sometimes I get case with different results from 2 statements
    *mytable has 10 rows
    *1st statement
    data: cnt type I value 0.
    select count( * ) into cnt from mytable WHERE myfield_0 = 123 and myfield_1 = '123'.
    *cnt returns 10 - correct
    *2nd statement
    select single * from  mytable WHERE myfield_0 = 123 and myfield_1 = '123'.
    *sy-dbcnt returns 0
    *sy-subrc returns 4 - incorrect, 10 rows are "invisible"
    but
    1. se16 shows correct row number
    2. I update just one row from "invisible" rows using se16 and 2nd statement returns correct result after that
    can not understand why
    thank you in advance.

    Thank you, Vishal
    but,
    general problem is that
    1. both statements have the same WHERE conditions
    2. 1st return resultset with data (sy-dbcnt=10), 2nd return empty dataset, but must return 1 in sy-dbcnt
    Yes, different meaning, you are right, but must 2nd must return 1, because of "select single *" construction, not 0.
    Dataset to process is the same, WHERE conditions are equal...
    I think the problem is that how ABAP interperets select count(*) and "select single *".
    Maybe "select count (*)" scans only PK from index page(s)? and "select single *" scans data pages? and something is wrong with that?
    I'm new in SAP and didn't find any SAP tool to trace dump of data and indexes pages with Native SQL.
    se16 shows all records.
    And why after simple manual update of just one record using se16 "select single *" returns 1?
    I've just marked one row to update, didn't change any data, then pressed "save".

  • Restrict select options

    I am using a logical database in HR.I use the selection screen of the logical database but i want to restrict a select options for only permit introduce one value.
    I restrict in abap to only use values ,nor intervals by example and other conditions.Now i have to restrict to only one value.
    it must be work like a parameter

    Hi,
    U can use No-extension to restrict multiple selcet option button.
    See this link
    http://www.sapdevelopment.co.uk/reporting/selscr/selscr_restrictso.htm
    *: Report:  ZRESTRICT_SELOPT                                           :
    *: Author:  www.SAPdev.co.uk                                           :
    *: Date  :  2004                                                       :
    *: Description: Demonstrates how to restrict select options to only    :
    *:              allow specific restriction options:                    :
    *:                                     i.e.. EQ, NE, BT etc..          :
    REPORT ZRESTRICT_SELOPT.
    * Include type pool SSCR
    TYPE-POOLS sscr.
    TABLES: EKPO.
    * Selection-screen
    select-options : so_ebeln for ekpo-ebeln,
                     so_ebelp for ekpo-ebelp.
    * Variables for populating restriction data
    DATA: gd_restrict TYPE sscr_restrict.   "structure containing 2 tables
    DATA: gd_optlist  TYPE sscr_opt_list,   "header line for table 1
          gd_***      TYPE sscr_***.        "header line for table 2
    *INITIALIZATION.
    INITIALIZATION.
    * Restrict SO_EBELN to only except EQ, BT and NE.
      gd_optlist-name = 'KEY1'.      "Can be anything
      gd_optlist-options-eq = 'X'.
      gd_optlist-options-bt = 'X'.
      gd_optlist-options-ne = 'X'.
      APPEND gd_optlist TO gd_restrict-opt_list_tab.
      clear: gd_optlist.
      gd_***-kind = 'S'.
      gd_***-name = 'SO_EBELN'.
      gd_***-sg_main = 'I'.
      gd_***-sg_addy = SPACE.
      gd_***-op_main = 'KEY1'.       "Must be same as above
      APPEND gd_*** TO gd_restrict-***_tab.
      clear: gd_***.
    * Restrict SO_EBELP to only except CP, GE, LT.
      gd_optlist-name = 'KEY2'.      "Can be anything
      gd_optlist-options-cp = 'X'.
      gd_optlist-options-ge = 'X'.
      gd_optlist-options-lt = 'X'.
      APPEND gd_optlist TO gd_restrict-opt_list_tab.
      clear: gd_optlist.
      gd_***-kind = 'S'.
      gd_***-name = 'SO_EBELP'.
      gd_***-sg_main = 'I'.
      gd_***-sg_addy = SPACE.
      gd_***-op_main = 'KEY2'.       "Must be same as above
      APPEND gd_*** TO gd_restrict-***_tab.
      clear: gd_***.
      CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
       EXPORTING
    *    PROGRAM                      =
        restriction                  = gd_restrict
    *    DB                           = ' '
       EXCEPTIONS
         TOO_LATE                     = 1
         REPEATED                     = 2
         SELOPT_WITHOUT_OPTIONS       = 3
         SELOPT_WITHOUT_SIGNS         = 4
         INVALID_SIGN                 = 5
         EMPTY_OPTION_LIST            = 6
         INVALID_KIND                 = 7
         REPEATED_KIND_A              = 8
         OTHERS                       = 9.
      IF sy-subrc <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    Kindly reward points for the answer which helped u and close the thread if ur problem got solved.
    Message was edited by: Judith Jessie Selvi

  • Restrict Select-Options for Logical Database field

    The way we restrict select options for custom defined select option fields on selection screen.. can we restrict select options for standard Logical Database fields?
    i.e. report uses PNPCE logical database and has field called PERNR. I want to restrict select options for this PERNR field so that it has options for 'Select single values' only.
    Thanks,
    Falguni
    Edited by: Falguni V on Nov 13, 2010 6:42 AM

    You can user AT SELECTION-SCREEN event, and check whether any record is having high value for PNPPERNR.

  • Restrict selection from LDB 'DDF' based on FI Doc number(BELNR)?

    Hi all,
    I am trying to restrict selection from LDB 'DDF' based on FI Doc number(BELNR).
    Even if i pass only one document number in selection-screen, the program is still printing lot of documents?
    Where I am going wrong?
    *& Report  ZSUB_READ_LDB
    REPORT  ZSUB_READ_LDB.
    DATA wa_BSEG TYPE BSEG.
    SELECT-OPTIONS s_BELNR FOR wa_BSEG-BELNR.
    DATA: callback TYPE TABLE OF ldbcb,
    callback_wa LIKE LINE OF callback.
    DATA: seltab TYPE TABLE OF rsparams,
    seltab_wa LIKE LINE OF seltab.
    callback_wa-ldbnode = 'BSEG'.
    callback_wa-get = 'X'.
    callback_wa-get_late = 'X'.
    callback_wa-cb_prog = sy-repid.
    callback_wa-cb_form = 'CALLBACK_BSEG'.
    APPEND callback_wa TO callback.
    CLEAR callback_wa.
    seltab_wa-kind = 'S'.
    seltab_wa-selname = 'BELNR'.
    LOOP AT s_BELNR.
      MOVE-CORRESPONDING s_BELNR TO seltab_wa.
      APPEND seltab_wa TO seltab.
    ENDLOOP.
    CALL FUNCTION 'LDB_PROCESS'
      EXPORTING
        ldbname                     = 'DDF'
        variant                     = ' '
      TABLES
        callback                    = callback
        selections                  = seltab
      EXCEPTIONS
        ldb_not_reentrant           = 1
        ldb_incorrect               = 2
        ldb_already_running         = 3
        ldb_error                   = 4
        ldb_selections_error        = 5
        ldb_selections_not_accepted = 6
        variant_not_existent        = 7
        variant_obsolete            = 8
        variant_error               = 9
        free_selections_error       = 10
        callback_no_event           = 11
        callback_node_duplicate     = 12
        OTHERS                      = 13.
    IF sy-subrc ne 0.
      WRITE: 'Exception with SY-SUBRC', sy-subrc.
    ENDIF.
    *&      Form  CALLBACK_BSEG
          text
         -->NAME       text
         -->WA         text
         -->EVT        text
         -->CHECK      text
    FORM CALLBACK_BSEG USING name TYPE ldbn-ldbnode
    wa TYPE BSEG
    evt TYPE c
    check TYPE c.
      CASE evt.
        WHEN 'G'.
          WRITE: / wa-BELNR.
          ULINE.
        WHEN 'L'.
          ULINE.
      ENDCASE.
    ENDFORM.                    "CALLBACK_BSEG

    Hi Andreas,
    I have included bukrs and gjahr too...but if I input only one invoice number the report is printing a lot of invoices.
    Not sure from where the data is being picked up?
    Sorry of poor formatting of code.
    Thanks ,
    Subba
    *& Report  ZSUB_READ_LDB
    REPORT  ZSUB_READ_LDB.
    TYPE-POOLS: RSDS, RSFS.
    DATA wa_BSEG TYPE BSEG.
    SELECT-OPTIONS s_BELNR FOR wa_BSEG-BELNR.
    SELECT-OPTIONS s_BUKRS FOR wa_BSEG-BELNR.
    SELECT-OPTIONS s_GJAHR FOR wa_BSEG-BELNR.
    DATA: callback TYPE TABLE OF ldbcb,
    callback_wa LIKE LINE OF callback.
    DATA: seltab TYPE TABLE OF rsparams,
    seltab_wa LIKE LINE OF seltab.
    DATA: TEXPR TYPE RSDS_TEXPR,
    FSEL TYPE RSFS_FIELDS.
    start-of-selection.
      callback_wa-ldbnode = 'BSEG'.
      callback_wa-get = 'X'.
    callback_wa-get_late = 'X'.
      callback_wa-cb_prog = sy-repid.
      callback_wa-cb_form = 'CALLBACK_BSEG'.
      APPEND callback_wa TO callback.
      CLEAR callback_wa.
      seltab_wa-kind = 'S'.
      seltab_wa-selname = 'BELNR'.
    *seltab_wa-LOW =
      LOOP AT s_BELNR.
        MOVE-CORRESPONDING s_BELNR TO seltab_wa.
        APPEND seltab_wa TO seltab.
      ENDLOOP.
      seltab_wa-kind = 'S'.
      seltab_wa-selname = 'BUKRS'.
    *seltab_wa-LOW =
      LOOP AT s_BELNR.
        MOVE-CORRESPONDING s_BUKRS TO seltab_wa.
        APPEND seltab_wa TO seltab.
      ENDLOOP.
      seltab_wa-kind = 'S'.
      seltab_wa-selname = 'GJAHR'.
    *seltab_wa-LOW =
      LOOP AT s_BELNR.
        MOVE-CORRESPONDING s_GJAHR TO seltab_wa.
        APPEND seltab_wa TO seltab.
      ENDLOOP.
      CALL FUNCTION 'LDB_PROCESS'
        EXPORTING
          ldbname                     = 'DDF'
          variant                     = ' '
          EXPRESSIONS                 = TEXPR
          FIELD_SELECTION             = FSEL
        TABLES
          callback                    = callback
          selections                  = seltab
        EXCEPTIONS
          ldb_not_reentrant           = 1
          ldb_incorrect               = 2
          ldb_already_running         = 3
          ldb_error                   = 4
          ldb_selections_error        = 5
          ldb_selections_not_accepted = 6
          variant_not_existent        = 7
          variant_obsolete            = 8
          variant_error               = 9
          free_selections_error       = 10
          callback_no_event           = 11
          callback_node_duplicate     = 12
          OTHERS                      = 13.
      IF sy-subrc ne 0.
        WRITE: 'Exception with SY-SUBRC', sy-subrc.
      ENDIF.
    *&      Form  CALLBACK_BSEG
          text
         -->NAME       text
         -->WA         text
         -->EVT        text
         -->CHECK      text
    FORM CALLBACK_BSEG USING name TYPE ldbn-ldbnode
    wa TYPE BSEG
    evt TYPE c
    check TYPE c.
      CASE evt.
        WHEN 'G'.
          WRITE: / wa-BELNR.
          ULINE.
        WHEN 'L'.
          ULINE.
      ENDCASE.
    ENDFORM.                    "CALLBACK_BSEG

  • SAP APO SNP - Restricting Selections

    Hello All,
    Is there any way by which I can restrict the users to access shuffler (create & save selection) for one planning book and allow access of shuffler in other planning book, although both the planning books belong to same planning area.
    When I try to restrict planner to access shuffler I only find function C_SELCTION, but using this the user is restricted on Planning Area level. So the planner is restricted for both planning books of the planning area.
    Please let me know if the above case is possible to implement.
    Regards,
    Piyush Nandan.

    Hello,
    Thanks for the reply.
    I checked the auth obj C_APO_SEL, but it is not helpful. It doesn't resrtict the access to shuffler.
    I want to restrict shuffler access in one planning book and provide access in other planning book, both planning books are of same planning area.
    Is there any BADI by which we can remove the shuffler icon from the planning book.
    For example there are two planning books PB1 & PB2 belonging to same planning area PA1. Now can I remove shuffler Icon from PB1 and keep shuffler icon in PB2.
    Regards,
    Piyush Nandan.

  • XML - ORA-19025: EXTRACTVALUE returns value of only one node

    Hi,
    I am new to XML DB. Can somebody help me with the below XML
    I use the following XML ... (I have pasted only a part of it coz i require data only till this section )
    XML
    <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
    instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body>
    <ns:PicklistWS_GetPicklistValues_Output xmlns:ns="urn:crmondemand/ws/picklist/">
    <ListOfParentPicklistValue xmlns="urn:/crmondemand/xml/picklist">
    <ParentPicklistValue>
    <Language>ENU</Language>
    <ParentFieldName>plProduct_Team</ParentFieldName>
    <ParentDisplayValue>Marketing On Demand</ParentDisplayValue>
    <ParentCode>Marketing On Demand</ParentCode>
    <Disabled>N</Disabled>
    <ListOfPicklistValue>
    <PicklistValue>
    <Code>OCP/SME Escalation</Code>
    <DisplayValue>OCP/SME Escalation</DisplayValue>
    <Disabled>N</Disabled>
    </PicklistValue>
    <PicklistValue>
    <Code>Fusion Request</Code>
    <DisplayValue>Fusion Request</DisplayValue>
    <Disabled>N</Disabled>
    </PicklistValue>
    Code
    SELECT distinct
    EXTRACTVALUE(VALUE(SR), '/ParentPicklistValue/ListOfPicklistValue/PicklistValue/Code','xmlns="urn:/crmondemand/xml/picklist"') AS Display,
    EXTRACTVALUE(VALUE(SR),'/ParentPicklistValue/ListOfPicklistValue/PicklistValue/DisplayValue','xmlns="urn:/crmondemand/xml/picklist"') AS Return,
    EXTRACTVALUE(VALUE(SR),'/ParentPicklistValue/ParentDisplayValue','xmlns="urn:/crmondemand/xml/picklist"') AS parent_display,
    EXTRACTVALUE(VALUE(SR),'/ParentPicklistValue/ParentCode','xmlns="urn:/crmondemand/xml/picklist"') AS parent_return
    FROM TABLE(XMLSEQUENCE(EXTRACT(
    WEB_SERVICE('<?xml version="1.0" encoding="UTF-8" standalone="no"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
    <PicklistWS_GetPicklistValues_Input xmlns="urn:crmondemand/ws/picklist/">
    <FieldName>Type</FieldName>
    <RecordType>Service Request</RecordType>
    </PicklistWS_GetPicklistValues_Input>
    </soap:Body>
    </soap:Envelope>'
    ,'document/urn:crmondemand/ws/picklist/:GetPicklistValues', Sessionid),
    '/soap:Envelope/soap:Body/*/*/*','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/'))) SR
    ERROR
    ORA-19025: EXTRACTVALUE returns value of only one node
    UNDERSTANDING
    As my Xpath points only until the node - ParentPicklistValue and not the child nodes under it. Hence when i try to query the child nodes - /ParentPicklistValue/ListOfPicklistValue/PicklistValue/Code, I recieve the above mentioned error.
    REQUIREMENT
    Can somebody help me to recieve the Parent values and also its child values based on the above query and xml.

    Hi,
    That's a classic ;)
    You need a second XMLSequence that will shred the collection of PicklistValue into relational rows :
    select extractvalue(value(sr2), '/PicklistValue/Code', 'xmlns="urn:/crmondemand/xml/picklist"') AS Display
         , extractvalue(value(sr2), '/PicklistValue/DisplayValue', 'xmlns="urn:/crmondemand/xml/picklist"') AS Return
         , extractvalue(value(sr1), '/ParentPicklistValue/ParentDisplayValue', 'xmlns="urn:/crmondemand/xml/picklist"') AS parent_display
         , extractvalue(value(sr1), '/ParentPicklistValue/ParentCode', 'xmlns="urn:/crmondemand/xml/picklist"') AS parent_return
    from table(
           xmlsequence(
             extract( WEB_SERVICE( ... )
                    , '/soap:Envelope/soap:Body/ns:PicklistWS_GetPicklistValues_Output/ListOfParentPicklistValue/ParentPicklistValue'
                    , 'xmlns="urn:/crmondemand/xml/picklist"
                       xmlns:ns="urn:crmondemand/ws/picklist/"
                       xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' )
         ) sr1
       , table(
           xmlsequence(
             extract( value(sr1)
                    , '/ParentPicklistValue/ListOfPicklistValue/PicklistValue'
                    , 'xmlns="urn:/crmondemand/xml/picklist"' )
         ) sr2
    ;What's your database version BTW?
    On 10.2 and up, you may use XMLTable instead.

  • Select wich returns the shortest time

    Hi,
    I don't know how to do a select. I'm goig to explain what I want to get to see wheter somebody can help.
    I've a select that returns the following columns (table t):
    handle_id, logon_id, object_name
    I've another table with the following columns (table t0):
    time0, handle_id, logon_id, object_name, source, eventid
    If I do this select:
    select t0.time0, t0.source, t0.eventid
    from t, t0
    where t.handle_id = t0.handle_id and t.logon_id = t0.logon_id and t.object_name = t0.object_name
    It returns me several records with the same condition (handle_id, logon_id, object_name) because, obviously, I've repeated recors with the same conditions but with diferent time0.
    I would like to get only one record for each condtion with the shortest time0.
    How can I do it?
    I've tried with distinct but it isn't what I want.
    Thanks in advance.
    Regards.

    select  *
      from  (
             select  t0.time0, t0.source, t0.eventid........ , t0.accesses,
                     row_number() over(partition by t0.handle_id,t0.logon_id,t0.object_name order by t0.time0) rn
               from  t,
                     t0
               where t.handle_id = t0.handle_id
                 and t.logon_id = t0.logon_id
                 and t.object_name = t0.object_name
      where rn = 1
    /If there can be more than one row with "shortest time0" for same handle, logon_id, object_name the above query will return olny one of such rows. If you want to get all such rows use:
    select  *
      from  (
             select  t0.time0, t0.source, t0.eventid........ , t0.accesses,
                     dense_rank() over(partition by t0.handle_id,t0.logon_id,t0.object_name order by t0.time0) rn
               from  t,
                     t0
               where t.handle_id = t0.handle_id
                 and t.logon_id = t0.logon_id
                 and t.object_name = t0.object_name
      where rn = 1
    /SY.

  • BatchUpdateException :Results returned for UPDATE ONLY.

    I got an error message at the statement stmt.executeBatch();
    java.sql.BatchUpdateException: Results returned for UPDATE ONLY.
    There are 3 SQL commands in the batch and it throws the above exception while executing the first command.
    (The first command is a SELECT command with COUNT returned to a variable
    eg. SELECT @ABC := COUNT(*) ....
    The second and the third commands use the returned variable to make updates)
    I printed out the updated information using BatchUpdateException.getUpdateCounts and I got
    -3 1 1 (-3 means Statement.EXECUTE_FAILED)
    However, I checked the database (mysql) and I discovered those two update commands were executed correctly ???!!!
    An interesting thing is: if I use stmt.execute or stmt.executeQuery instead of executeBatch, it works fine and doesn't throw any exception.
    I wonder if anybody experience similar situation before or have idea on this problem. Thanx :)

    Can somebody help me, please?

  • The selected data source is read-only

    Anyone know how to fix this "issue"
    The selected data source is read-only. You cannot change the view configuration.
    Thanks in Advance.

    Assuming that it's not actually read-only (because you're trying to hit a follower node or a data source that is currently loading non transactionally, etc.), you should be able to just click the Data Source edit button and click Save to "wake it up".
    In previous versions of the product there was a "Refresh Data Sources" that would do the trick but I haven't seen it in the 3.0 version of Studio.
    If enough people need it, maybe we'll just write it or something. 
    Patrick Rafferty
    http://branchbird.com/

  • Java.nio select() method return 0 in my client application

    Hello,
    I'm developing a simple chat application who echo messages
    But my client application loop because the select() method return 0
    This is my code
    // SERVER
    package test;
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.nio.channels.SelectionKey;
    import java.nio.channels.Selector;
    import java.nio.channels.ServerSocketChannel;
    import java.nio.channels.SocketChannel;
    import java.util.Iterator;
    import java.util.Set;
    public class Server {
         private int port = 5001;
         public void work() {               
              try {
                   ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
                   serverSocketChannel.configureBlocking(false);
                   InetSocketAddress isa = new InetSocketAddress(port);               
                   serverSocketChannel.socket().bind(isa);
                   Selector selector = Selector.open();
                   serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
                   System.out.println("Listing on "+port);
                   while(selector.select()>0) {
                        Set keys = selector.selectedKeys();
                        for(Iterator i = keys.iterator(); i.hasNext();) {
                             SelectionKey key = (SelectionKey) i.next();
                             i.remove();
                             if (key.isAcceptable()) {
                                  ServerSocketChannel keyChannel = (ServerSocketChannel)key.channel();                              
                                  SocketChannel channel = keyChannel.accept();
                                  channel.configureBlocking(false);                              
                                  channel.register(selector, SelectionKey.OP_READ );
                             } else if (key.isReadable()) {
                                  SocketChannel keyChannel = (SocketChannel) key.channel();
                                  String m = Help.read(keyChannel );
                                  Help.write(m.toUpperCase(), keyChannel );
              } catch (IOException e) {                                             
                   e.printStackTrace();                         
         public static void main(String[] args) {
              Server s = new Server();
              s.work();
    // CLIENT
    package test;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.nio.channels.SelectionKey;
    import java.nio.channels.Selector;
    import java.nio.channels.SocketChannel;
    import java.util.Iterator;
    import java.util.Set;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    public class Client extends JFrame  {
         private String host = "localhost";
         private int port = 5001;
         private SocketChannel socketChannel;
         private Selector selector;
         public void work() {               
              try {
                   socketChannel = SocketChannel.open();
                   socketChannel.configureBlocking(false);
                   InetSocketAddress isa = new InetSocketAddress(host, port);               
                   socketChannel.connect(isa);
                   selector = Selector.open();
                   socketChannel.register(selector, SelectionKey.OP_CONNECT | SelectionKey.OP_READ );
                   while(true) {
                        selector.select();
                        Set keys = selector.selectedKeys();
                        for(Iterator i = keys.iterator(); i.hasNext();) {
                             SelectionKey key = (SelectionKey) i.next();
                             i.remove();
                             if (key.isConnectable()) {
                                  SocketChannel keyChannel = (SocketChannel) key.channel();
                                  if (keyChannel.isConnectionPending()) {
                                       System.out.println("Connected "+keyChannel.finishConnect());                                                                           
                             } else if (key.isReadable()) {                                                                                                                                                           
                                  SocketChannel keyChannel = (SocketChannel) key.channel();                                             
                                  String m = Help.read(keyChannel);
                                  display(m);                                                                                                                                                                                                                   
              } catch (IOException e) {                                             
                   e.printStackTrace();                         
         private void display(final String m) {
              SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                        area.append(m+"\n");
                        textFieed.setText("");
         private void sendMessage(final String m) {
              Thread t = new Thread(new Runnable() {               
                   public void run() {                                                                                
                        try {                         
                             Help.write(m, socketChannel);
                        } catch (IOException e) {               
                             e.printStackTrace();
              t.start();                    
         public Client() {
              addWindowListener(new WindowAdapter() {
                   public void windowClosing(WindowEvent e) {
                        System.exit(1);
              textFieed.addKeyListener(new KeyAdapter() {
                   public void keyPressed(KeyEvent e) {
                        if (e.getKeyCode()== KeyEvent.VK_ENTER) {
                             String m = textFieed.getText();
                             sendMessage(m);     
              area.setEditable(false);
              getContentPane().add(textFieed, "North");
              getContentPane().add(new JScrollPane(area));
              setBounds(200, 200, 400, 300);
              show();
         private String messageToSend;
         private JTextArea area = new JTextArea();
         JTextField textFieed = new JTextField();
         public static void main(String[] args) {
              Client s = new Client();
              s.work();
    // HELPER CLASS
    package test;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.SocketChannel;
    import java.nio.charset.Charset;
    import java.nio.charset.CharsetDecoder;
    import java.nio.charset.CharsetEncoder;
    public class Help {
         private static Charset charset = Charset.forName("us-ascii");
         private static CharsetEncoder enc = charset.newEncoder();
         private static CharsetDecoder dec = charset.newDecoder();
         private static void log(String m) {
              System.out.println(m);
         public static String read(SocketChannel channel) throws IOException {
              log("*** start READ");                              
              int n;
              ByteBuffer buffer = ByteBuffer.allocate(1024);
              while((n = channel.read(buffer)) > 0) {
                   System.out.println("     adding "+n+" bytes");
              log("  BUFFER REMPLI : "+buffer);
              buffer.flip();               
              CharBuffer cb = dec.decode(buffer);          
              log("  CHARBUFFER : "+cb);
              String m = cb.toString();
              log("  MESSAGE : "+m);          
              log("*** end READ");
              //buffer.clear();
              return m;                    
         public static void write(String m, SocketChannel channel) throws IOException {          
              log("xxx start WRITE");          
              CharBuffer cb = CharBuffer.wrap(m);
              log("  CHARBUFFER : "+cb);          
              ByteBuffer  buffer = enc.encode(cb);
              log("  BUFFER ALLOUE REMPLI : "+buffer);
              int n;
              while(buffer.hasRemaining()) {
                   n = channel.write(buffer);                         
              System.out.println("  REMAINING : "+buffer.hasRemaining());
              log("xxx end WRITE");

    Here's the fix for that old problem. Change the work method to do the following
    - don't register interest in things that can't happen
    - when you connect register based on whether the connection is complete or pending.
    - add the OP_READ interest once the connection is complete.
    This doesn't fix all the other problems this code will have,
    eg.
    - what happens if a write is incomplete?
    - why does my code loop if I add OP_WRITE interest?
    - why does my interestOps or register method block?
    For code that answers all those questions see my obese post Taming the NIO Circus
    Here's the fixed up Client code
    // CLIENT
    package test
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.nio.channels.SelectionKey;
    import java.nio.channels.Selector;
    import java.nio.channels.SocketChannel;
    import java.util.Iterator;
    import java.util.Set;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    public class Client extends JFrame  {
         private String host = "localhost";
         private int port = 5001;
         private SocketChannel socketChannel;
         private Selector selector;
         public void work() {
              try {
                   socketChannel = SocketChannel.open();
                   socketChannel.configureBlocking(false);
                   InetSocketAddress isa = new InetSocketAddress(host, port);
                   socketChannel.connect(isa);
                   selector = Selector.open();
                   int interest = 0;
                   if(socketChannel.isConnected())interest = SelectionKey.OP_READ;
                   else if(socketChannel.isConnectionPending())interest = SelectionKey.OP_CONNECT;
                   socketChannel.register(selector, interest);
                   while(true)
                        int nn = selector.select();
                        System.out.println("nn="+nn);
                        Set keys = selector.selectedKeys();
                        for(Iterator i = keys.iterator(); i.hasNext();)
                             SelectionKey key = (SelectionKey) i.next();
                             i.remove();
                             if (key.isConnectable())
                                  SocketChannel keyChannel = (SocketChannel) key.channel();
                                  System.out.println("Connected "+keyChannel.finishConnect());
                                  key.interestOps(SelectionKey.OP_READ);
                             if (key.isReadable())
                                  SocketChannel keyChannel = (SocketChannel) key.channel();
                                  String m = Help.read(keyChannel);
                                  display(m);
              } catch (IOException e) {
                   e.printStackTrace();
         private void display(final String m) {
              SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                        area.append(m+"\n");
                        textFieed.setText("");
         private void sendMessage(final String m) {
              Thread t = new Thread(new Runnable() {
                   public void run() {
                        try {
                             Help.write(m, socketChannel);
                        } catch (IOException e) {
                             e.printStackTrace();
              t.start();
         public Client() {
              addWindowListener(new WindowAdapter() {
                   public void windowClosing(WindowEvent e) {
                        System.exit(1);
              textFieed.addKeyListener(new KeyAdapter() {
                   public void keyPressed(KeyEvent e) {
                        if (e.getKeyCode()== KeyEvent.VK_ENTER) {
                             String m = textFieed.getText();
                             sendMessage(m);
              area.setEditable(false);
              getContentPane().add(textFieed, "North");
              getContentPane().add(new JScrollPane(area));
              setBounds(200, 200, 400, 300);
              show();
         private String messageToSend;
         private JTextArea area = new JTextArea();
         JTextField textFieed = new JTextField();
         public static void main(String[] args) {
              Client s = new Client();
              s.work();

  • In Contacts version 8, how can I print ALL information in each individual card? When I select the print command the only thing printed is the name and address. I need phone number(s) and all other information in the cards.

    In Contacts version 8, how can I print ALL information in each individual card? When I select the print command the only thing printed is the name and address. I need phone number(s) and all other information in the cards. We enter various pieces of data, other than the standard name address & phone numbers and we print all information on each card so it fits in a 5x7 inch loose binder. We have used InTouch software for many years and it has served us extremely welll, however, the publisher (The Prairie Group) has not, and apparently has no plans to update their software to be compatible with any Mac OSX OS beyond 10.6. Any help will be appreciated!

    You can select what you want included in a list format. In the Print command from Contacts, click the Show Details button. Then in the Style pulldown menu select "Lists" and there you'll be able to select what you want included. You can also select what you wish included if you select the Pocket Address Book style.
    If neither of those options will work for you, then you will need to look to third-party software. Here's one possibility that seems to get good reviews:
    https://www.macupdate.com/app/mac/15485/labels-&-addresses
    I haven't done more than try it to make sure that it works with OS X 10.9's Contacts, which it does, but you can download their demo and try it yourself.
    Regards.

  • Can we restrict a Procedure to be called only once in a session or package?

    Hi,
    I am having a procedure which is called for each insert statement.
    The code is non-Editable.
    So, I want to restrict the procedure to be called only once for the entire session or package.
    Could any one please suggest me, can we do this?
    Thak you,
    Regards,
    Gowtham Sen.

    Hi,
    Actually, I am using OWB tool. I used a procedure with output parameters, to map to the target table. So, OWB creates a package. In that package its calling the procedure for each record.
    So, in order to avoid that, can I do any thing else, which would restrict it to call for each record.
    Thank you,
    Regards,
    Gowtham Sen.

  • My new Photoshop Elements 12 has a RAW file plug-in, but when I try OPEN to select a photograph, there are only generic icons instead of pictures-- I can't tell one photograph from another! How can I fix this so I can tell which photograph I want to open?

    My new Photoshop Elements 12 has a RAW file plug-in, but when I try OPEN to select a photograph, there are only generic icons instead of pictures-- I can't tell one photograph from another! How can I fix this so I can tell which photograph I want to open? Thank you!

    Thanks R_Kelly:
    Adobe Photoshop Elements Version: 12.0 (12.1 (20140303.12.1.49334)) x32
    Operating System: Windows Vista 32-bit
    Version: 6.0 Service Pack 2
    System architecture: Intel CPU Family:6, Model:15, Stepping:11 with MMX, SSE Integer, SSE FP, SSE2, SSE3
    Physical processor count: 4
    Processor speed: 2400 MHz
    Built-in memory: 3069 MB
    Free memory: 1631 MB
    Memory available to Photoshop Elements: 1598 MB
    Memory used by Photoshop Elements: 69 %
    Image tile size: 128K
    Image cache levels: 8
    Video Card: ATI Radeon HD 4800 Series
    Video Mode: 1680 x 1050 x 4294967296 colors
    Video Card Caption: ATI Radeon HD 4800 Series
    Video Card Memory: 512 MB
    Application folder: C:\Program Files\Adobe\Photoshop Elements 12\
    Photoshop Elements scratch has async I/O enabled
    Required Plug-ins folder: C:\Program Files\Adobe\Photoshop Elements 12\Required\
    Primary Plug-ins folder: C:\Program Files\Adobe\Photoshop Elements 12\Plug-Ins\
    The first thing I did was UPDATE. I have all the latest updates available (according to the updater). The Camera Raw Plug-in says it is version 8.0.
    The RAW files are from a Canon T3i. It's a very common camera, I can't believe it wouldn't be supported.

Maybe you are looking for

  • Add marker to Google Map

    Hi there.  I am creating an iPad app with In Design CS5.5. I want to add a link from an image with a button to a Google map showing where the image was taken. I can successfully add the map and load it but I cannot find out how to add the marker show

  • Customer Balance

    Hi       I want report which should list customer balances pending like aging report . I was seeing Aging report in which it was showing some amount in ().  What does it mean . How we can get list of only those customers whose payments is due. Thanks

  • NEED TO DETERMINE USERS THAT HAVE LOGGED IN WITH A SPECIFIC ROLE

    I have a requirement to determine which users have logged in with a specific role or accessing a specific application. I know I can use the ORASSO.WWSSO_AUDIT_LOG_TABLE_T table to see the users that have logged in, but need to know which table to joi

  • My MacBook shuts down whenever I move the machine, and then refuses to turn back on. What is causing this?

    I've been in possession of a 2011 MacBook Pro with OS X Lion since October. Ever since the second or third month I received my MacBook, it has had this problem of shutting down whenever I even touch the monitor, and then occassionally refuses to turn

  • Multiple Session Workflow in DAC

    Hi Is it possible to run a workflow which has two sessions arranged parallely in DAC? I was told that DAC can run workflows with only one session.