Oracle-10g
PL/SQL 游標中的動態 ORDER BY 子句
我不確定這是否根本不可能,或者我是否需要從不同的角度來解決這個問題。
簡化,這是我正在嘗試的:
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;