Dynamic ORDER BY clause - Possible different data types...

I have a lexical parameter in my ORDER BY clause:
ORDER BY &P_ORDER_BY
My problem is that I have to designate this parameter as either a date, character or number, but the user defined column being ordered by could be any one of these. When I designate the parameter as a character type, and a number data type column is chosen, it orders by that value, but it orders it as though it were a character field, referencing the initial digit and not the overall numeric value. If I choose a number parameter type, and a character value is chosen, I get an invalid number error, and so on.
Anyone have any ideas how I can do this?

Okay, now we're on the right track. The lexical parameter I'm using allows the user to choose from a list of the columns being retrieved in the SELECT statement, so it will always be one that's in there, as you said. Now, since I don't know which one it's going to be, I can't just make all but one of them 'None' for the break order, BUT, what I intended to do was to add a column to the SELECT statement that would always return the column they chose, and I could put the break order on that column, leaving all the rest 'None'. However, in the past, this has created 2 problems for me.
1.) As I mentioned in the first post, the column being returned could have a data type of character, number or date, but the parameter must be designated as only one of these. So, if the user chooses to order by a column having a value with a data type other than what the parameter is designated to be, then I get errors, it doesn't order correctly, etc...
2.) This is the strange, but anytime I've marked all but one column as 'None' for the Break Order, my child data doesn't always stay with the parent. For example, the report is on an IT request database. The 'group fields' consist of data elements that are demographic info.of a request (requester, date requested, description, etc...), and the details for each request list out the comments that have been made in the system for that request. The problem I'm seeing when I set the break orders this way is that each request displays not only its own comments, but it lists out comments for other requests as well, and there doesn't seem to be any logic to which request's comments it lists in addition to its own, it just lists as many as will fit on the page...I don't know if I explained that very well, but that's what's happening.
Does any of that make sense? Any ideas?

Similar Messages

  • Explain me briefly about evaluation order.As per my knowledge it show data type order.but I have different data type in same diemension ex:account- acc_001 is smart list data type.account-ac_002 is percentage.So fot this i will accont dim in evaluation or

    Explain me briefly about evaluation order.As per my knowledge it show data type order.but I have different data type in same dimension ex:account->acc_001 is smart list data type.account-ac_002 is percentage.So fot this i will accont dim in evaluation order.What going can any one explaining brifly ?

    2786712 wrote:
    thanks John for reply.If you dont mine can you explain clearly with example and screenshot.
    @John: You got a task
    Here you go: Hyperion Planning and More...

  • Dynamic Table UI Element with different data type for each cell

    Hi Experts,
    I have a problem with a dynamic Table UI Element in Web Dynpro ABAP. I have the following coding:
    METHOD set_col_row .
      TYPE-POOLS: icon.
      DATA:
        lv_node         TYPE REF TO if_wd_context_node,
        lv_node_info    TYPE REF TO if_wd_context_node_info,
        lv_element      TYPE REF TO if_wd_context_element,
        lt_attributes   TYPE wdr_context_attr_info_map,
        lv_table        TYPE REF TO cl_wd_table,
        lv_table_column TYPE REF TO cl_wd_table_column,
        lv_text_view    TYPE REF TO cl_wd_text_view,
        lv_image TYPE REF TO cl_wd_image,
        lv_text_edit TYPE REF TO cl_wd_text_edit,
        lv_header       TYPE REF TO cl_wd_caption,
        attribute       LIKE LINE OF lt_attributes,
        lv_index       TYPE string,
        lv_cur_row         TYPE i,
        path            TYPE string,
        lv_value           TYPE string,
        attr_name       TYPE string,
        l_trc_point_id  TYPE string,
        l_num_cols      TYPE string,
        l_num_rows      TYPE string,
        lv_text         TYPE string,
        lv_index2 TYPE i,
        lr_ress_selections TYPE REF TO /its/di_2_cpr_ress_selections,
        lt_comp_tab TYPE cl_abap_structdescr=>component_table,
        ls_comp_tab LIKE LINE OF lt_comp_tab,
        lv_count TYPE i,
        lv_col_count TYPE i,
        lv_col_count_read TYPE i,
        lv_index_read TYPE i,
        lv_num_cols_minus_1 TYPE i,
        lv_bind_lv_value TYPE string,
        wd_standard_cell TYPE REF TO cl_wd_table_standard_cell,
        lv_data_count TYPE i,
        lv_data_count_str TYPE string,
        wd_table_column TYPE REF TO cl_wd_table_column,
        lv_column_id TYPE string.
      FIELD-SYMBOLS:
         TYPE ANY.
    Instanz der Klasse /ITS/DI_2_CPR_RESS_SELECTIONS
      lr_ress_selections = /its/di_2_cpr_ress_selections=>factory( ).
      ASSIGN lr_ress_selections->gr_table->* TO gt_comp_tab.
      ls_comp_tab-name = 'SUMME'.
    APPEND ls_comp_tab TO lt_comp_tab.
    ls_comp_tab-name = 'CELL_VARIANT'.
      APPEND ls_comp_tab TO lt_comp_tab.
      CLEAR ls_comp_tab.
      l_num_rows = num_rows + 1.
      CONDENSE l_num_rows.
      l_num_cols = num_columns + 1.
      CONDENSE l_num_cols.
    UI-Element 'TABLE'
      lv_table ?= wd_this->m_view->get_element( 'TBL_TABLE' ).
      lv_table->remove_all_columns( ).
    Kontext-Knoten 'TABLE'
      lv_node = wd_context->get_child_node( 'TABLE' ).
      lv_node_info = lv_node->get_node_info( ).
      lv_node_info->remove_dynamic_attributes( ).
      attribute-type_name = 'STRING'.
      lv_num_cols_minus_1 = num_columns - 1.
    Für jede Spalte einmal tun
      DO lv_num_cols_minus_1 TIMES.
        lv_index = sy-index + 1.
        CONDENSE lv_index.
        lv_table_column = cl_wd_table_column=>new_table_column( ).
        lv_column_id = lv_table_column->id.
    Spaltenüberschriften setzen
        IF lv_index EQ 1. "Beim ersten Durchlauf --> erste Spalte = "Ressourcen"
          lv_text = text-010.
          sy-index = 0.
        ELSE. "Danach für jede weitere Spalte eine Zeile aus der gt_comp_tab nehmen
          lv_index_read = lv_index - 1.
          READ TABLE lt_comp_tab INDEX lv_index_read INTO ls_comp_tab.
          lv_text = ls_comp_tab-name.
          lv_header = cl_wd_caption=>new_caption( text = lv_text ).
          lv_table_column->set_header( lv_header ).
        ENDIF.
        CONCATENATE 'TABLE.A' lv_index INTO path.
        lv_text_view = cl_wd_text_view=>new_text_view( bind_text = path ).
        lv_table_column->set_table_cell_editor( lv_text_view ).
        lv_table_column->bind_selected_cell_variant( 'TABLE.CELL_VARIANT' ).
        lv_table->add_column( lv_table_column ).
        wd_table_column ?= wd_this->m_view->get_element( lv_column_id ).
    *****************Test Cell Variant*************************************************
        IF lv_index GT 1.
          LOOP AT .
              IF sy-tabix EQ lv_cur_row.
              Name zuweisen
                ASSIGN COMPONENT 'NAME' OF STRUCTURE .
              Zuweisen ob Blatt oder nicht
                lv_element->set_attribute( name = 'NAME' value = lv_value ).
                ASSIGN COMPONENT 'IS_LEAF' OF STRUCTURE set_attribute( name = attr_name value = lv_value ).
              ENDIF.
        ENDLOOP.
    Now my problem is, that I need for every ROW of my table UI Element a different cell editor. I know how to change it for the column. But is not my issue. I want to have images (traffic lights red and green) in some rows. The other rows should have numbers. The coding works, so that I have all the data at the right place in my table, only the images are shown as a string, because the cells of these rows have the cell editor Text_View. I tried something with cell variants (with cl_wd_table_standard_cell), but it was not possible for me to get a cell variant "image" in these cells/rows were I need it. 
    I hope you understand my problem and now what to do here.
    Thanks a lot in advance.
    Best Regards,
    Ingmar

    Hi Experts, I have a problem with a dynamic Table UI Element in Web Dynpro ABAP. I have the following coding: METHOD set_col_row . TYPE-POOLS: icon. DATA: lv_node TYPE REF TO if_wd_context_node, lv_node_info TYPE REF TO if_wd_context_node_info, lv_element TYPE REF TO if_wd_context_element, lt_attributes TYPE wdr_context_attr_info_map, lv_table TYPE REF TO cl_wd_table, lv_table_column TYPE REF TO cl_wd_table_column, lv_text_view TYPE REF TO cl_wd_text_view, lv_image TYPE REF TO cl_wd_image, lv_text_edit TYPE REF TO cl_wd_text_edit, lv_header TYPE REF TO cl_wd_caption, attribute LIKE LINE OF lt_attributes, lv_index TYPE string, lv_cur_row TYPE i, path TYPE string, lv_value TYPE string, attr_name TYPE string, l_trc_point_id TYPE string, l_num_cols TYPE string, l_num_rows TYPE string, lv_text TYPE string, lv_index2 TYPE i, lr_ress_selections TYPE REF TO /its/di_2_cpr_ress_selections, lt_comp_tab TYPE cl_abap_structdescr=>component_table, ls_comp_tab LIKE LINE OF lt_comp_tab, lv_count TYPE i, lv_col_count TYPE i, lv_col_count_read TYPE i, lv_index_read TYPE i, lv_num_cols_minus_1 TYPE i, lv_bind_lv_value TYPE string, wd_standard_cell TYPE REF TO cl_wd_table_standard_cell, lv_data_count TYPE i, lv_data_count_str TYPE string, wd_table_column TYPE REF TO cl_wd_table_column, lv_column_id TYPE string. FIELD-SYMBOLS:  LIKE LINE OF lt_attributes,  TYPE ANY TABLE,  TYPE ANY,  TYPE ANY,  TYPE ANY. * Instanz der Klasse /ITS/DI_2_CPR_RESS_SELECTIONS lr_ress_selections = /its/di_2_cpr_ress_selections=>factory( ). ASSIGN lr_ress_selections->gr_table->* TO . lt_comp_tab = lr_ress_selections->gt_comp_tab. ls_comp_tab-name = 'SUMME'. * APPEND ls_comp_tab TO lt_comp_tab. * ls_comp_tab-name = 'CELL_VARIANT'. APPEND ls_comp_tab TO lt_comp_tab. CLEAR ls_comp_tab. l_num_rows = num_rows + 1. CONDENSE l_num_rows. l_num_cols = num_columns + 1. CONDENSE l_num_cols. * UI-Element 'TABLE' lv_table ?= wd_this->m_view->get_element( 'TBL_TABLE' ). lv_table->remove_all_columns( ). * Kontext-Knoten 'TABLE' lv_node = wd_context->get_child_node( 'TABLE' ). lv_node_info = lv_node->get_node_info( ). lv_node_info->remove_dynamic_attributes( ). attribute-type_name = 'STRING'. lv_num_cols_minus_1 = num_columns - 1. * Für jede Spalte einmal tun DO lv_num_cols_minus_1 TIMES. lv_index = sy-index + 1. CONDENSE lv_index. lv_table_column = cl_wd_table_column=>new_table_column( ). lv_column_id = lv_table_column->id. * Spaltenüberschriften setzen IF lv_index EQ 1. "Beim ersten Durchlauf --> erste Spalte = "Ressourcen" lv_text = text-010. sy-index = 0. ELSE. "Danach für jede weitere Spalte eine Zeile aus der gt_comp_tab nehmen lv_index_read = lv_index - 1. READ TABLE lt_comp_tab INDEX lv_index_read INTO ls_comp_tab. lv_text = ls_comp_tab-name. lv_header = cl_wd_caption=>new_caption( text = lv_text ). lv_table_column->set_header( lv_header ). ENDIF. CONCATENATE 'TABLE.A' lv_index INTO path. lv_text_view = cl_wd_text_view=>new_text_view( bind_text = path ). lv_table_column->set_table_cell_editor( lv_text_view ). lv_table_column->bind_selected_cell_variant( 'TABLE.CELL_VARIANT' ). lv_table->add_column( lv_table_column ). wd_table_column ?= wd_this->m_view->get_element( lv_column_id ). ******************Test Cell Variant************************************************** IF lv_index GT 1. LOOP AT  ASSIGNING . ASSIGN COMPONENT 'TYPE' OF STRUCTURE  TO . ADD 1 TO lv_data_count. lv_data_count_str = lv_data_count. CONCATENATE 'A' lv_index lv_data_count_str INTO path. wd_standard_cell = cl_wd_table_standard_cell=>new_table_standard_cell( view = wd_this->m_view variant_key = 'FLDATE' ). IF  = '01' OR  = '04'. lv_image = cl_wd_image=>new_image( bind_source = path view = wd_this->m_view ). wd_standard_cell->set_editor( lv_image ). wd_standard_cell->set_cell_design( '01' ). ELSE. lv_text_view = cl_wd_text_view=>new_text_view( bind_text = path view = wd_this->m_view ). wd_standard_cell->set_editor( lv_text_view ). wd_standard_cell->set_cell_design( '02' ). ENDIF. wd_table_column->add_cell_variant( wd_standard_cell ). ENDLOOP. ENDIF. ************************************************************************************* CONCATENATE 'A' lv_index INTO attribute-name. lv_node_info->add_attribute( attribute ). ENDDO. DO num_rows TIMES." Für jede Zeile einmal tun lv_cur_row = sy-index. lv_element = lv_node->create_element( ). lv_node->bind_element( new_item = lv_element set_initial_elements = abap_false ). DO l_num_cols TIMES. ADD 1 TO lv_col_count. IF lv_count LT 1. LOOP AT  ASSIGNING . IF sy-tabix EQ lv_cur_row. * Name zuweisen ASSIGN COMPONENT 'NAME' OF STRUCTURE  TO . "NAME lv_value = . * Zuweisen ob Blatt oder nicht lv_element->set_attribute( name = 'NAME' value = lv_value ). ASSIGN COMPONENT 'IS_LEAF' OF STRUCTURE  TO . "NAME lv_value = . lv_element->set_attribute( name = 'IS_LEAF' value = lv_value ). ENDIF. ENDLOOP. ENDIF. IF lv_count GT 0. lv_col_count_read = lv_col_count - 1. lv_index = sy-index. LOOP AT  ASSIGNING . IF sy-tabix EQ lv_cur_row. CLEAR ls_comp_tab. READ TABLE lt_comp_tab INDEX lv_col_count_read INTO ls_comp_tab. ASSIGN COMPONENT ls_comp_tab-name OF STRUCTURE  TO . lv_value = . CONDENSE lv_index. CONCATENATE 'A' lv_index INTO attr_name. lv_element->set_attribute( name = attr_name value = lv_value ). ENDIF. ENDLOOP. ENDIF. lv_count = lv_count + 1. ENDDO. CLEAR lv_col_count. CLEAR lv_count. ENDDO. ENDMETHOD. I definied my table in Layout Tab of the View and create here in thos method dynamicly my columns. lv_table_column = cl_wd_table_column=>new_table_column( ). . . lv_table->add_column( lv_table_column ). In  I have my data that should be shown later in my table. So I create for each row in this fieldsymbol in a loop: lv_element = lv_node->create_element( ). lv_node->bind_element( new_item = lv_element set_initial_elements = abap_false ). Later I fill every cell in my table with a different value with this loop: LOOP AT  ASSIGNING . IF sy-tabix EQ lv_cur_row. CLEAR ls_comp_tab. READ TABLE lt_comp_tab INDEX lv_col_count_read INTO ls_comp_tab. ASSIGN COMPONENT ls_comp_tab-name OF STRUCTURE  TO . lv_value = . CONDENSE lv_index. CONCATENATE 'A' lv_index INTO attr_name. lv_element->set_attribute( name = attr_name value = lv_value ). ENDIF. ENDLOOP. Now my problem is, that I need for every ROW of my table UI Element a different cell editor. I know how to change it for the column. But is not my issue. I want to have images (traffic lights red and green) in some rows. The other rows should have numbers. The coding works, so that I have all the data at the right place in my table, only the images are shown as a string, because the cells of these rows have the cell editor Text_View. I tried something with cell variants (with cl_wd_table_standard_cell), but it was not possible for me to get a cell variant "image" in these cells/rows were I need it. I hope you understand my problem and now what to do here. Thanks a lot in advance. Best Regards, Ingmar

  • Saving cluster of different data types to a file

    Hi,
    I use LV 8.6 SDK. I need to save clusters of different data types to a file on a disk, row by row.
    To be specific: I have a program that performs various investigations on a signal collected by DAQmx. Each time the quality of the signal is not in a specified boundaries, i get an indication. It is a cluster of time stamp, string, dbl, and Boolean. The program is supposed to run for few weeks in a row so there can be a lot of these indications. I expect to have around 200 000 rows a week (Altogether, divided into several groups).  
    I thought about TDMS but I am not able to save such a cluster. And I would like to save it as tdms cause i could divide the data to different groups. I also thought about data base but that would be the first time i use db and I really do not  have time to learn that now.
    I know it is possible to change some of the data types to others, ex Boolean to 0-1, but i need a string and a time stamp there. 
    Can someone advise me which data format should I use? Which one is the best one in this situation?
    Thanks in advance
    handre

    If you do not need to access data from another application (other than Labview) you can just save it as a binary file.
    It is the best choice (for me).
    I made an example with one cluster. You can replace that with an array of clusters, of that data type.
    Attachments:
    Example_VI_BD.png ‏2 KB

  • How to add different data types in Linked list?

    The basic idea is that I want to implement a linked list like the one which we generally implement in C. I need to store different data types in a single node. Is it possible to implement like this or I have to implement a linked list for each different data type?

    I have an application program in which there is a form. In this form there are different text fields in which data is to be inserted by the user. These data's will be inserted into the database. I want to hit the database only once. So I need to store these data in a data structure before I insert into the database. I think it will be easy for me to handle the data in a linked list if I can have different data types in a single node.
    Moreover, I think u're not getting my question. This pic will help u.
    http://img522.imageshack.us/img522/4500/sampler.jpg
    I'm not sure about that the code which u have written will have different data types in single node. I have to try that.
    And of course if anyone has any better idea than me, it will be very helpful.

  • Join columns of different data types

    Can i join two columns of different data types in a single statement. Is there any cast or convert statement
    SELECT B~PARTNER AS RESP_GROUP
    FROM BUT000 AS B
    INNER JOIN CRMV_LINKPARTNER AS C ON BPARTNER_GUID = CPARTNER_NO.
    Here PARTNER_GUID is Raw 16 and PARTNER_NO is Char 32, the query is not returning any rows.
    Thanks
    Akila.R

    Hi!
    Basically we can say, you can't join them, but you might try this way:
    SELECT B~PARTNER AS RESP_GROUP
    FROM BUT000 AS B
    INNER JOIN CRMV_LINKPARTNER AS C ON BPARTNER_GUID = CPARTNER_NO(16).   "add
    (16)
    Or an other version
    C~PARTNER_NO+16(16)   "depends on, where is the real number stored
    Regards
    Tamá

  • Store values of different data types into single database field

    Hi Friends,
      I  have to store values of different data types(character, numeric, date, time,  text, etc) into a single database field(Char 80). Then read the same values and display it into ABAP Webdynpro report. 
    Appreciate any ideas, examples, suggestions.
    Thanks
    JB

    Hi,
    Try like this:
    data: txt1 type string,
          var1(1) type c,
          var2(1) type n,
          var3 like sy-datum,
          var4 like sy-uzeit.
    parameters: a type c,
                b type n,
                c like sy-datum,
                d like sy-uzeit.
    concatenate a b c d into txt1.
    write txt1.
    var1 = txt1+0(1).
    var2 = txt1+1(1).
    var3 = txt1+2(8).
    var4 = txt1+8(8).
    write: / var1,
           / var2,
           / var3,
           / var4.
    Regards,
    Bhaskar

  • Same Input name with different data type cause the reflection exception

    I have a proxy contains couple RFCs. Two RFCs contain an argument named IN_COMPANY_CODE with data type of ZTRE_FX_BUKRSTable. Another RFC contains the same argument name of IN_COMPANY_CODE but hold different data type (String). All RFCs are in the same proxy. Complie and build the application with no issue.
    But when I ran the RFC, it generates the reflection exception below:
    Method SAPProxy1.Z_F_Tre_R_Pre_Trade_Fx can not be reflected. --> There was an error reflecting 'In_Company_Code'. > The XML element named 'IN_5fCOMPANY_--5fCODE' from namespace '' references distinct types System.String and MSTRFOREX.ZTRE_FX_BUKRSTable. Use XML attributes to specify another XML name or namespace for the element or types.
    I realize the conflict introduced by the same name with difference data type. But I would like to know if this is fixable as a bug or if there is any best practice and/or some manual intervention to make it work.

    Please install fix from OSS note 506603. After this, right-click .sapwsdl file and select "Run custom tool".

  • Is parameter in ORDER BY clause possible?

    I'm using a function to return a ref cursor and currently pass a parameter without any problems. I would like to change the sort on the fly by passing a parameter to the order by clause, but Oracle ignores it.
    CREATE OR REPLACE PACKAGE pkg_agent_appt_status AS
    TYPE rcur IS REF CURSOR;
    FUNCTION f_agent_appt_status (ssn IN VARCHAR2, sort_str IN VARCHAR2) RETURN rcur;
    END pkg_agent_appt_status;
    CREATE OR REPLACE PACKAGE BODY pkg_agent_appt_status AS
    FUNCTION f_agent_appt_status (ssn IN VARCHAR2, sort_str IN VARCHAR2)
    RETURN rcur
    IS
    retval rcur;
    BEGIN
    OPEN retval FOR
    SELECT agncy.CORPORATE_NAME "Agency Name",
    agnt_state.APPT_STATE "State",
    agnt.AGENT_STATUS "Appt Status",
    TO_CHAR(agnt_state.APPT_STATE_EFF_DT,'mm/dd/yyyy') "Effective Date",
    agnt.AGENT_NUMBER "Agent ID",
    agnt.AGENT_STATUS "Agent Status",
    STATE.STATE_NAME
    FROM AGNT_APPT_STAT_PRDCR_WRK agnt,
    AGNT_APPT_STAT_WRK agncy,
    AGNT_APPT_STATE_STAT_PRDCR_WRK agnt_state,
    STATE
    WHERE agnt.AGENT_TAX_ID = ssn
    AND agnt.COMPANY_CODE = agncy.COMPANY_CODE
    AND agnt.PARENT_AGENT_AGENCY_ID = agncy.AGENT_NUMBER
    AND agnt.COMPANY_CODE = agnt_state.COMPANY_CODE
    AND agnt.AGENT_AGENCY_ID = agnt_state.AGENT_AGENCY_ID
    AND agnt.AGENT_NUMBER = agnt_state.AGENT_NUMBER
    AND agnt_state.APPT_STATE = STATE.STATE_CODE
    ORDER BY
    sort_str;                     
    RETURN retval;
    END f_agent_appt_status;
    END pkg_agent_appt_status;

    If you want to do this, you'd have to use dynamic SQL (execute immediate or DBMS_SQL). For the easier 'execute immediate' approach, you'd do something like
    create or replace someProc( someArg varchar2 )
    as
      strSQL varchar2(4000)
    begin
      strSQL := <<string containing your SQL statement up to the order by clause>>
      strSQL := strSQL || 'ORDER BY ' || someArg
      execute immediate strSQL;
    endJustin

  • Is passing parameter to ORDER BY clause possible?

    I'm using a function to return a ref cursor and currently pass a parameter without any problems. I would like to change the sort on the fly by passing a parameter to the order by clause, but Oracle ignores it.
    CREATE OR REPLACE PACKAGE pkg_agent_appt_status AS
    TYPE rcur IS REF CURSOR;
    FUNCTION f_agent_appt_status (ssn IN VARCHAR2, sort_str IN VARCHAR2) RETURN rcur;
    END pkg_agent_appt_status;
    CREATE OR REPLACE PACKAGE BODY pkg_agent_appt_status AS
    FUNCTION f_agent_appt_status (ssn IN VARCHAR2, sort_str IN VARCHAR2)
    RETURN rcur
    IS
    retval rcur;
    BEGIN
    OPEN retval FOR
    SELECT agncy.CORPORATE_NAME "Agency Name",
    agnt_state.APPT_STATE "State",
    agnt.AGENT_STATUS "Appt Status",
    TO_CHAR(agnt_state.APPT_STATE_EFF_DT,'mm/dd/yyyy') "Effective Date",
    agnt.AGENT_NUMBER "Agent ID",
    agnt.AGENT_STATUS "Agent Status",
    STATE.STATE_NAME
    FROM AGNT_APPT_STAT_PRDCR_WRK agnt,
    AGNT_APPT_STAT_WRK agncy,
    AGNT_APPT_STATE_STAT_PRDCR_WRK agnt_state,
    STATE
    WHERE agnt.AGENT_TAX_ID = ssn
    AND agnt.COMPANY_CODE = agncy.COMPANY_CODE
    AND agnt.PARENT_AGENT_AGENCY_ID = agncy.AGENT_NUMBER
    AND agnt.COMPANY_CODE = agnt_state.COMPANY_CODE
    AND agnt.AGENT_AGENCY_ID = agnt_state.AGENT_AGENCY_ID
    AND agnt.AGENT_NUMBER = agnt_state.AGENT_NUMBER
    AND agnt_state.APPT_STATE = STATE.STATE_CODE
    ORDER BY
    sort_str;
    RETURN retval;
    END f_agent_appt_status;
    END pkg_agent_appt_status;

    This is quite easy, as you are already using a REF CURSOR. Instead of
    OPEN retval FOR
    SELECT ...
    ORDER BY sort_str;we can code this:
    OPEN retval FOR
    'SELECT ...
    ORDER BY '|| sort_str;Watch out for the single quotes in your query e.g. the date format mask: you need to wrap these in an additional set of single quotes i.e. 'mm/dd/yyyy' becomes ''mm/dd/yyyy''.
    Cheers, APC

  • JPA dynamic order by clause

    I need to dynamically build the order by clause of my query.
    I tried this:
    <named-query name="list">
      <query>
        <![CDATA[
          SELECT p FROM Person p
          ORDER BY :orderby
        ]]>
      </query>
    </named-query>
    @SuppressWarnings("unchecked")
    public List<Person> list(String sort) {
      Query query = getEntityManager().createNamedQuery("list");
      query.setParameter("orderby", sort);
      return query.getResultList();
    }But at runtime it throws an exception:
    com.microsoft.sqlserver.jdbc.SQLServerException:
    L'elemento SELECT identificato da ORDER BY 1 include una variabile nell'espressione che identifica la posizione di una colonna.
    Le variabili sono consentite solo nell'ordinamento in base a un'espressione che fa riferimento a un nome di colonna.The translation of the italian message is something like:
    The SELECT element identified by ORDER BY 1 includes a variable that identifies the position of a column.
    The valid variables in the order by clause must refer to the name of a columnThe value of the parameter sort is_ the name of a column!
    Any hint?

    My solution was to append the order clause to an "namedQuery" like this:
    - declare the named query as usual, with annotation
    - create a simple helper function like findNamedQuery to find the query string for a given class and queryName (using reflection)
    - if you need to execute the query without sort order - use EntityManager.createNamedQuery (as usual)
    - BUT: if you want to sort data: use EntityManager.createQuery with the string obtained from findNamedQuery and the sort clause
    I guess the is a performance penalty, but.. .it works.

  • Dynamic ORDER BY clause

    Hi all,
    I'm creating a webpage using jsp thats accessing a mysql database. When I get a ResultSet from a query, I was wondering if anyone could give me some pointers on how I could sort the results based on a field name that someone clicks on. For example:
    Column1   Column2
    5         2
    8         1
    3         6I'd like to create hyperlinks on the field names so when a user clicks on it, it will sort the data in according to that field. Here is my code that I am trying to modify:
    public String displayResultSet(ResultSet rs)
    {// return a result set as an html table
         String htmlTable = "";
         try {
              // get the number of columns
              ResultSetMetaData rsmd = rs.getMetaData();
              int numColumns = rsmd.getColumnCount();
              // create a table and display the mysql field names as table headers
              htmlTable += "<TABLE>\n<TR>\n";
              for(int i=1; i<=numColumns; i++)
                   htmlTable += "<TH>" + rsmd.getColumnName(i) + "</TH>\n";
              htmlTable += "</TR>\n\n";
              // create an object to temporarily hold a piece of ResultSet data
              Object cellData = null;
              // display the data in the ResultSet in rows of an html table
              while(rs.next())
              {// while the ResultSet has more rows, convert them to html
                   htmlTable += "<TR>";
                   for(int j=1; j<=numColumns; j++)
                   {// if the data is not null, display it, otherwise display a blank space
                        cellData = rs.getObject(j);
                        if(cellData != null)
                             htmlTable += "<TD>" + rs.getObject(j) + "</TD>\n";
                        else
                             htmlTable += "<TD> </TD>\n";
                   htmlTable += "</TR>\n\n";
              htmlTable += "</TABLE>\n\n";
         catch (Exception e)
              { return("Error accessing database: " + e); }
         return htmlTable;
    }Any help or references to where I can read up on it would be appreciated. Thanks
    Leon

    Your display code should not be mixed in with your database code. That functionality should be seperated classes.
    Generally GUIs do the ordering themselves. They do not repeatedly call the database.
    But if you want you pass in a descriptor that defines the fields that will be ordered on. You optionally map that to the exact database field names. You then use StringBuilder to construct the entire SQL string and add the order by clause dynamically at the end. Then you execute it.

  • The priority of different data type conversion

    Hi All,
    I want to know the priority of data type conversion rule. if in an expression, I have several kind of data type( I, P, F,N..).
    Then finaly, all the data object will convert to which data type?
    I don't know the priority of data conversion.
    E.g.   data a type i. data b type p. data c type f.
             a = b + c.
    or    data d type p, data e type f.
          if ( d > f ).
    Then who will convert to who's type?
    Thanks and Regards.
    Aaron

    For expressions, the right term in SAP is "calculation type", it's explained here : [abap help - determining the calculation type|http://help.sap.com/abapdocu_70/en/ABENARITH_TYPE.htm]. SAP takes the "biggest" type of all variables in the expression. It can be I, P or F (smallest is I, biggest is F).
    Conditions are handled differently, just using data type conversion (see link given above by Abhishek), SAP converts from smallest to biggest type (in your case, it converts P to F and compares the two F variables).

  • Error;invaild number. different data type: how to insert

    In testtable, ID(number(12), amount(number(12))
    Now I want to insert the following record. I got error,a invalid number .
    insert into testtable(id,amount) values('111','9,000.00');
    I think data type is different. amount is number type but '9,000.00' is varchar2.
    How can i insert '9,000.00' to number data type?
    I do insert to_number('9,000.00'). It doesn't work.
    Would you help me for this problem.

    as amount is a number field it will only take data of type number only.so if ue data is not number type u need to convert it to number and insert it.
    however u can select it in the same format(original),using something like this:
    SQL> SELECT ename employee, TO_CHAR(sal, '99,990.99') from emp;
    EMPLOYEE TO_CHAR(SA
    SMITH 800.00
    ALLEN 1,600.00
    WARD 1,250.00
    JONES 2,975.00
    MARTIN 1,250.00
    BLAKE 2,850.00
    CLARK 2,450.00
    SCOTT 3,000.00
    KING 5,000.00
    TURNER 1,500.00
    ADAMS 1,100.00
    EMPLOYEE TO_CHAR(SA
    JAMES 950.00
    FORD 3,000.00
    MILLER 1,300.00
    14 rows selected.

  • Arrays of Different Data Types

    Hi, I am studing Java Development as 2 of my units (Programming Theory and Programming Practice), and I have a problem with a program which involves an array that contains two data types; int and long. The program is designed to store Student ID's and Exam Marks (1 Exam Mark per ID). The program is designed to use sorting, and the array is to be populated at the start of program execution. It compiles fine, but I get an error when the program is running as soon as you input the first value. The program is not very complex, but I need to understand how to get this fixed and why is isn't already. Any help is appreciated as this is a genuine problem. This program follows a consistent style template given to me by my tutor. The source is given below, and I appreciate any positive response.
    Thanks in advance...
    Aaron
         Name: Aaron Allport ([email protected])
         Assignment Number: 7
         Program Title/Topic: Student Marks/ID's with use of Array's
         Program Description: Using arrays and search/sort methods,
                                  write a program that keeps a record of
                                  students on a module, and allows the
                                  data to be manipulated.
         Course Title/Unit: BTEC National in Computing
    import javax.swing.JOptionPane;
    class StudentRecord
         int mark;
         long sID;
    public class Assignment7
         public static void main(String args[])
              final int numOfStudents = 11;
              String highestMark;
              String lowestMark;
              String examMark;
              long studentID = 00000000;
              String menuChoice;
              StudentRecord module[] = new StudentRecord[numOfStudents];
              inputRecords(module, numOfStudents);
              do
              menuChoice = JOptionPane.showInputDialog(null,
                   "STUDENT MODULE MARKS\n\n" +
                   "1. Find student with highest mark\n" +
                   "2. Find student with lowest mark\n" +
                   "3. Find grade for a given student\n" +
                   "4. Sort records by Student ID\n" +
                   "5. Sort records by Student Mark\n" +
                   "6. Display all records");
                        if (menuChoice.equals("1"))
                             highestMark = findHighest(module, numOfStudents);
                        else if (menuChoice.equals("2"))
                             lowestMark = findLowest(module, numOfStudents);
                        else if (menuChoice.equals("3"))
                             examMark = findGrade(module, numOfStudents, studentID);
                        else if (menuChoice.equals("4"))
                             studentIDSort(module, numOfStudents);
                             displayData(module, numOfStudents);
                        else if (menuChoice.equals("5"))
                             markSort(module, numOfStudents);
                             displayData(module, numOfStudents);
                        else if (menuChoice.equals("6"))
                             displayData(module, numOfStudents);
                   } while (menuChoice.equalsIgnoreCase("Q") == false);     
                   System.exit(0);
         public static void inputRecords(StudentRecord module[], int numOfStudents)
              int i;
              String inputMark;
              String inputStudentID;
              for (i = 1; i < numOfStudents; i++)
                   module[ i] = new StudentRecord();
                   inputStudentID = JOptionPane.showInputDialog(null,
                                       "Please enter Student ID for position " + i + ":");
                   module[ i].sID = Long.parseLong(inputStudentID);
                   inputMark = JOptionPane.showInputDialog(null,
                                       "Please enter Student Mark for position " + i + ":");
                   module[ i].mark = Integer.parseInt(inputMark);
         public static String findHighest(StudentRecord module[], int numOfStudents)
              int highStudentID;
              int j;
              StudentRecord temp = new StudentRecord();
              boolean intChange = true;
              int pass = 1;
              String outputMark;
              String outputSID;
              while((pass <= numOfStudents - 1) && (intChange))
                   intChange = false;
                   for (j = 1; j <= numOfStudents - pass; j++)
                        module[j] = new StudentRecord();
                        if(module[j].mark > module[j + 1].mark)
                             intChange = true;
                             temp.mark = module[j].mark;
                             temp.sID = module[j].sID;
                             module[j] = module[j + 1];
                             module[j + 1].mark = temp.mark;
                             module[j + 1].sID = temp.sID;
                   pass++;
              outputSID = String.valueOf(module[module.length].sID);
              outputMark = String.valueOf(module[module.length].mark);
              return (outputSID + " " + outputMark);
         public static String findLowest(StudentRecord module[], int numOfStudents)
              String outputMark;
              String outputSID;
              int j;
              StudentRecord temp = new StudentRecord();
              boolean intChange = true;
              int pass = 1;
              while((pass <= numOfStudents - 1) && (intChange))
                   intChange = false;
                   for (j = 1; j <= numOfStudents - pass; j++)
                        module[j] = new StudentRecord();
                        if(module[j].mark > module[j + 1].mark)
                             intChange = true;
                             temp.mark = module[j].mark;
                             temp.sID = module[j].sID;
                             module[j] = module[j + 1];
                             module[j + 1].mark = temp.mark;
                             module[j + 1].sID = temp.sID;
                   pass++;
              outputSID = String.valueOf(module[1].sID);
              outputMark = String.valueOf(module[1].mark);
              return (outputSID + " " + outputMark);
         public static String findGrade(StudentRecord module[], int numOfStudents, long studentID)
              String foundGrade = "";
              int i;
              String outputSID;
              String outputMark;
              for (i = 1; i <= module.length; i++)
                   module[ i] = new StudentRecord();
                   if (studentID == module[ i].sID)
                        outputSID = String.valueOf(module[ i].sID);
                        outputMark = String.valueOf(module[ i].mark);
                        foundGrade = (outputSID + " " + outputMark);
              if (foundGrade == "")
                   JOptionPane.showMessageDialog(null,
                        "No grade found for Student: " + studentID);
              return foundGrade;
         public static void studentIDSort(StudentRecord module[], int numOfStudents)
              int i;
              int j;
              StudentRecord temp = new StudentRecord();
              for (i = (module.length - 1); i >= 0; i--)
                   for (j = 1; j <= i; j++)
                        module[j] = new StudentRecord();
                        if (module[j - 1].sID > module[j].sID)
                             temp = module[j - 1];
                             module[j - 1] = module[j];
                             module[j] = temp;
         public static void markSort(StudentRecord module[], int numOfStudents)
              int i;
              int j;
              StudentRecord temp = new StudentRecord();
              for (i = (module.length - 1); i >= 0; i--)
                   for (j = 1; j <= i; j++)
                        module[j] = new StudentRecord();
                        if (module[j - 1].mark > module[j].mark)
                             temp = module[j - 1];
                             module[j - 1] = module[j];
                             module[j] = temp;
         public static void displayData(StudentRecord module[], int numOfStudents)
              String outputMessage = "";
              int i;
              for (i = 1; i <= module.length; i++)
                   module[ i] = new StudentRecord();
                   outputMessage += (module[ i].sID + " " + module[ i].mark + "\n");
              JOptionPane.showMessageDialog(null,
                   "Data Display\n" +
                   "**** *******\n\n" +
                   outputMessage,
                   "Data Display", JOptionPane.INFORMATION_MESSAGE);
    }

    Try this piece of code...... I adapted it to your program, so it starts from 1. You should pass numOfStudents - 1 as numOfStudents to don't get the notorious error =D
    if (menuChoice.equals("1"))
    findHighest(module, numOfStudents - 1);
    I added the println statement because in your prog isn't present an output routine (well, at last I didn't see it..... maybe because I'm sleepy =) )
    public static void findHighest(StudentRecord module[], int numOfStudents)
    String outputMark;
    String outputSID;
    StudentRecord retValue = new StudentRecord();
    retValue.sID = module[1].sID;
    retValue.mark = module[1].mark;
    for (int i = 2; i <= numOfStudents; i++) {
         if (module.mark > retValue.mark) {
         retValue.sID = module[i].sID;
         retValue.mark = module[i].mark;
    outputSID = String.valueOf(retValue.sID);
    outputMark = String.valueOf(retValue.mark);
    System.out.println(outputSID + " " + outputMark);
    Hope it can help you

Maybe you are looking for

  • Windows 7 - Files missing from network share after trying to burn and no data cached to be burned

    I ran into an issue trying to burn some file from a network share using Windows 7 Home Professional.  I was trying to burn some .jpg files from a mapped network share drive using explorer.  Every time I would drag the files to be burned from the shar

  • Why won't my adobe reader update work right? it won't take my password

    My adobe reader update keeps flashing but every time i click on it and put in my password it hangs up at 97%..I tried it several times:))

  • I lost my IPhone need your help with a question ty

    I just lost my iphone on Nov. 17th, 07 and i just wonder does iphone has Satellite positioning function, if it does can i use serial and IMEI number to find where it is or they are both not related, any suggestions will be great thank you for paying

  • Real time scenario for sales order types

    Hi gurus, could u plz explain realtime scenario, where we will use the following order types. 1. Manual Order 2. Dir dispatch order 3.loose packs order 4. manual return order 5. dir dispatch return order. Plzzzz help on this. Urs Manasa

  • AS-IS & TO-BE

    Could any body help me for AS-Is and To-Be Sample documents of Pharma industry specifically. So Based on any kind of related document i can map my requirements.Please forward those to my mail id : [email protected] Your help would be highly appreciat