有TABLE1这张表,里面有FIFO_FIELD1-FIFO_FIELD10,FIFO_SORT1-FIFO_SORT10共20个字段,
FIFO_FIELD1-FIFO_FIELD10是排序的字段名称,FIFO_SORT1-FIFO_SORT10是排序的方法。
我需要把判断里面的FIFO_FIELD1-FIFO_FIELD10和FIFO_SORT1-FIFO_SORT10共20个字段,如果不为空则加到sql的后面,并加豆号。
我写了一下的语句
if table1.fifo_FIELD1 IS NOT NULL THEN
P_ORDER_BY:=P_ORDER_BY || ‘,’|| table1.fifo_FIELD1 ;
IF table1.fifo_SORT1 ='D' THEN
P_ORDER_BY:=P_ORDER_BY || 'DESC';
END IF;
END IF;
如果用上面的方法,需要些10个这样的语句,请教大家,有没有更加简洁的办法。谢谢!
FIFO_FIELD1-FIFO_FIELD10是排序的字段名称,FIFO_SORT1-FIFO_SORT10是排序的方法。
我需要把判断里面的FIFO_FIELD1-FIFO_FIELD10和FIFO_SORT1-FIFO_SORT10共20个字段,如果不为空则加到sql的后面,并加豆号。
我写了一下的语句
if table1.fifo_FIELD1 IS NOT NULL THEN
P_ORDER_BY:=P_ORDER_BY || ‘,’|| table1.fifo_FIELD1 ;
IF table1.fifo_SORT1 ='D' THEN
P_ORDER_BY:=P_ORDER_BY || 'DESC';
END IF;
END IF;
如果用上面的方法,需要些10个这样的语句,请教大家,有没有更加简洁的办法。谢谢!
解决方案 »
- 建了复合索引后,如果有单独字段查询,是否还需建单独索引?
- linux shell oracle
- 在关联查询视图表和本地表的时候报无法从套接字读取更多的数据
- Oracle存储过程
- exp中关于设定filesize大小及压缩问题?在线等谢谢了!
- oracle触发器请教,一次删除多个关联表中的数据
- Linux AS5 安装 oracle 10g的问题
- 做查询时,如果字段a为空则显示“空值” 如果不为空则显示“有值”,请问要怎么写?谢谢!!!
- 请问各位高手我如何取得今天前三天的日期
- 在P4机器上安装ora816,在安装到数据库创建到90%的时候出现凭证检索失败 50分
- dbms_lob.substr函数不能获取CLOB所有内容
- 新手求教一个简单的SQL语句的写法~~~可能用到exists?
把通用的写成一个procedure,再调用就好点了
CREATE OR REPLACE PROCEDURE P_ORDER_CLAUSE (
f1 in VARCHAR2,
f1_sort in VARCHAR2,
p_order_by in out varchar2) IS
BEGIN
if f1 IS NOT NULL THEN
P_ORDER_BY:=P_ORDER_BY || ',' || f1 ;
IF f1_sort ='D' THEN
P_ORDER_BY:=P_ORDER_BY || 'DESC';
END IF;
END IF;
END;-- 调用10次就好了
P_ORDER_CLAUSE (table1.fifo_FIELD1, table1.fifo_SORT1 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD2, table1.fifo_SORT2 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD3, table1.fifo_SORT3 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD4, table1.fifo_SORT4 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD5, table1.fifo_SORT5 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD6, table1.fifo_SORT6 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD7, table1.fifo_SORT7 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD8, table1.fifo_SORT8 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD9, table1.fifo_SORT9 , P_ORDER_BY);
P_ORDER_CLAUSE (table1.fifo_FIELD10, table1.fifo_SORT10 , P_ORDER_BY);-- 不知道还有更好的方法没?
有没有实现这种判断的方便的函数。
p_order_by := p_order_by ||
nvl2(table1.fifo_FIELD1, ',' || table1.fifo_FIELD1, '') ||
decode(table1.fifo_SORT1, 'D', ' DESC', ' ');
但是有一个问题,在table1.fifo_FIELD1为NULL,table1.fifo_SORT1为’D'的时候没有被排除。
p_order_by := p_order_by ||
nvl2(table1.fifo_FIELD1, ',' || table1.fifo_FIELD1 || decode(table1.fifo_SORT1, 'D', ' DESC', ' '), '');
LZ的做法如果有新的排序字段添加并且多余10个要修改表结构的。
这是我的想法。多多指教
支持你的想法,现在的系统是每个用户可以自己定义排序方式,随意使用增加10个以下的字段来排序。
现在这20个字段都被添加到USER表的后面,如果另外做成一张表(USERID,FILED_NAME,SORT)的话,
就方便多了。数据库设计是有缺陷的。