× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Hi,

Is it possible use a variable or parameter value for setting an ORDER BY in
a UDTF?
I want to do something like the code below but having a hard time to
achieve this. IS it even doable?

Thanks,
-Arco

CREATE OR REPLACE FUNCTION
Test_Udtf_01
(
peOrderBy01 INTEGER,
peOrderDir01 CHAR(10)
)
RETURNS TABLE (
var INTEGER,
str CHAR(20)
)
LANGUAGE SQL
READS SQL DATA
NO EXTERNAL ACTION
NOT DETERMINISTIC
DISALLOW PARALLEL
RETURN
(
SELECT * FROM LATERAL(VALUES
(1, 'Hello'), (3, 'Is'), (6, 'But'), (7, 'Nothing'),
(2, 'Everything'), (4, 'Just'), (5, 'Fine'), (8, 'Happens'))
AS TestTable(val, str)
ORDER BY peOrderBy01
) ;

SELECT * FROM TABLE
( Test_Udtf_01(
CAST(1 AS INTEGER), -- order by this column
CAST('ASC' AS CHAR(10)) -- order direction
)
) AS t ;

Executing this UDTF runs into errors:
CPF9898 UDF inlining error.
CPF4204 Internal failure occurred in query processor.
SQL0901 SQL system error.

Trying a variety of CASE statements in the ORDER BY clause, then it does
execute without error but does not order:

..repeated code..
ORDER BY CASE WHEN COALESCE(peOrderBy01, 0) <> 0 THEN peOrderBy01 ELSE
peOrderBy01 END

..repeated code..
ORDER BY CASE WHEN COALESCE(peOrderBy01, 1) = 1 THEN 1 ELSE 2 END

..repeated code..
ORDER BY (CAST(peOrderBy01 AS INTEGER))

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.