我在存储过程中的代码:
SELECT * FROM
my_table ir
WHERE
--where clause goes here
ORDER BY
CASE WHEN p_order_by_field='Id' AND p_sort_order='ASC' THEN IR.ID end,
CASE WHEN p_order_by_field='Id' AND p_sort_order='DESC' THEN IR.ID end DESC,
CASE WHEN p_order_by_field='Date' AND p_sort_order='ASC' THEN TO_CHAR(IR.IDATE, 'MM/dd/yyyy') end,
CASE WHEN p_order_by_field='Date' AND p_sort_order='DESC' THEN TO_CHAR(IR.IDATE, 'MM/dd/yyyy') end DESC;
问题是排序是基于字符完成的,这对于日期大小写是错误的。但是,CASE 语句不允许除 char 之外的任何其他数据类型。那么在这种情况下有什么解决方案呢?我需要能够将 p_order_by_field 传递到存储过程中。
谢谢