Oracle-10g

PL/SQL 游標中的動態 ORDER BY 子句

  • January 9, 2015

我不確定這是否根本不可能,或者我是否需要從不同的角度來解決這個問題。

簡化,這是我正在嘗試的:

create or replace FUNCTION someFunction(SortCol1 varchar2 default 'column1',
                                       SortDir1 varchar2 default 'ASC')
RETURN STUFF pipelined
AS
CURSOR c1 is
   SELECT
       *
   FROM
       table1
   ORDER BY
       SortCol1 SortDir1;

BEGIN
   FOR c1_rec IN c1
   LOOP
       -- Some logic, etc...
   END LOOP;
END someFunction;

編譯後這只是告訴我我的 SQL 被不正確地終止。它不喜歡SortCol1 SortDir1

您不能使用靜態 SQL 動態更改要排序的列。您需要使用動態 SQL。像這樣的東西應該​​工作

create or replace FUNCTION someFunction(SortCol1 varchar2 default 'column1',
                                       SortDir1 varchar2 default 'ASC')
RETURN STUFF pipelined
AS
   c1 SYS_REFCURSOR;
   c1_rec table1%rowtype;
BEGIN
   OPEN c1
    FOR 'select * from table1 order by ' || sortCol1 || ' ' || sortDir1;

   LOOP
       FETCH c1 INTO c1_rec;  

       <<do something>>
   END LOOP;

END someFunction;

引用自:https://dba.stackexchange.com/questions/88964