2016-03-30 3 views
0

Я передаю csv имен столбцов в качестве аргумента для процедуры pl/sql, которая, в свою очередь, будет использоваться в порядке по команде sql, но ее игнорируют.Прохождение порядка по столбцам в качестве аргумента pl sql

SET serverOutput ON SIZE unlimited; 
SET linesize 32767; 
declare 
test1 varchar2(30); 
begin 
test1 := 'PARAMETER_NAME,DESCRIPTION'; -- This will be passed as input parameter 
for rCursor in (select * from configurations order by test1 asc) loop 
dbms_output.put_line(rCursor.parameter_name || '-=-' || rCursor.Description); 
-- Output is not ordered by any of these columns 
end loop; 
end; 

Любые входы?

+0

Ваш запрос «упорядочивается» по столбцу test1, почему вы склонны полагать, что ваши данные будут упорядочены по имени параметра и столбцам описания? , чтобы сортировать по этим столбцам, вам нужно изменить запрос, чтобы включить порядок по имени параметра, Описание – elirevach

ответ

2

Вы используете переменную заказать статический курсор, так что результат будет таким же, чем

select * from configurations order by 'PARAMETER_NAME,DESCRIPTION' 

Если вам необходимо использовать переменную для динамического изменения порядка курсора, вам может понадобиться что-то например:

declare 
    test1 varchar2(30); 
    rcursor SYS_REFCURSOR; /* define a cursor */ 
    vConfiguration configurations%ROWTYPE; /* define a variable to host the result of your query */ 
begin 
    test1 := 'PARAMETER_NAME,DESCRIPTION'; -- This will be passed as input parameter 
    open rCursor for 'select * from configurations order by ' || test1; /* open a dynamic cursor */ 
    loop 
     fetch rCursor into vConfiguration; /* fetch the cursor into a variable */ 
     exit when rCursor%NOTFOUND;  /* check if the cursor has rows */ 
     dbms_output.put_line(vConfiguration.parameter_name || '-=-' || vConfiguration.Description); 
    end loop; 
end; 
+0

Спасибо! Он работает для моего требования. –

Смежные вопросы