dynamic control of would adopt does not work - what am I doing wrong

Oracle 10g version
DECLARE
   v_sort   VARCHAR2 (1000);
   p_sort_obj WE_SORTOBJ_TAB
                       := WE_SORTOBJ_TAB (WE_SORT_OBJ (1, 'full_name', 'DESC'),
                            WE_SORT_OBJ (2, 'p2g_score', 'ASC')) ;
BEGIN
   FOR i IN 1 .. p_sort_obj.COUNT
   LOOP
      v_sort :=
            v_sort
         || ', '
         || p_sort_obj (i).field_name
         || ' '
         || p_sort_obj (i).asc_desc;
   END LOOP;

   v_sort := TRIM (LEADING ',' FROM v_sort);

   v_sql :=
         'SELECT  /*+ first_rows(100) */ total_pages, full_name, p2g_score '
      || ' FROM   (SELECT   ROWNUM rnum, a.* '
      || '     FROM   (  SELECT   CEIL(COUNT ( * ) '
      || '                                OVER (PARTITION BY search_id) '
      || '                             / :page_size) '
      || '                           total_pages, '
      || '                          a.* '
      || '                  FROM   client_history_tmp a '
      || '                  WHERE   search_id = :search '
      || '               ORDER BY   :sort) a '     
      || '      WHERE   ROWNUM <= :page_no * :page_size) '
      || ' WHERE   rnum >= (:page_no - 1) * :page_size ';

   OPEN p_dataset FOR v_sql
      USING p_page_size,
            v_search_id,
            v_sort,
            p_page,
            p_page_size,
            p_page,
            p_page_size;
END;
And when I run the above Proc
I get follows him out put
DBMS_OUTPUTS
Sort Order : full_name DESC, p2g_score ASC  
457,Michelle Hall,3-5
457,Jane G Confer,3-2
457,Elizabeth Fox,3-5
457,Geraldine Wiggins,4-0
457,Baby Boy Duda,4-0
457,Richard A Cobb,3-6
457,Timothy Dampier,3-3
457,Paul E Collins,3-5
457,Virginia R Kennedy,3-6
457,James T Ganger,4-0
Help, please
Thank you

I think that the dynamic linking of the names of columns in the order by is considered a string rather than columns.

Try this,

DECLARE
   v_sort   VARCHAR2 (1000);
   p_sort_obj WE_SORTOBJ_TAB
                       := WE_SORTOBJ_TAB (WE_SORT_OBJ (1, 'full_name', 'DESC'),
                            WE_SORT_OBJ (2, 'p2g_score', 'ASC')) ;
BEGIN
   FOR i IN 1 .. p_sort_obj.COUNT
   LOOP
      v_sort :=
            v_sort
         || ', '
         || p_sort_obj (i).field_name
         || ' '
         || p_sort_obj (i).asc_desc;
   END LOOP;

   v_sort := TRIM (LEADING ',' FROM v_sort);

   v_sql :=
         'SELECT  /*+ first_rows(100) */ total_pages, full_name, p2g_score '
      || ' FROM   (SELECT   ROWNUM rnum, a.* '
      || '     FROM   (  SELECT   CEIL(COUNT ( * ) '
      || '                                OVER (PARTITION BY search_id) '
      || '                             / :page_size) '
      || '                           total_pages, '
      || '                          a.* '
      || '                  FROM   client_history_tmp a '
      || '                  WHERE   search_id = :search '
      || '               ORDER BY   '||v_sort||') a '
      || '      WHERE   ROWNUM <= :page_no * :page_size) '
      || ' WHERE   rnum >= (:page_no - 1) * :page_size ';

   OPEN p_dataset FOR v_sql
      USING p_page_size,
            v_search_id,
            p_page,
            p_page_size,
            p_page,
            p_page_size;
END;

G.

Tags: Database

Similar Questions

Maybe you are looking for