有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个这样的语句,请教大家,有没有更加简洁的办法。谢谢!
解决方案 »
- 求根据订单长度,更新字段值的sql
- 说明何时需要建立位图索引。
- 插入记录后的顺序为什是这样?
- 一个pl/sql问题 关于异常处理
- TRIGGER ‘OF’ 问题:FORM中不可修改,而SQL/PLUS可以修改,如何使在FORM中也可以修改?
- 一个简单问题,在toad里新增加一个数据库连接
- Oracle9i的sqlplus能连接Oracle 7.2.3的服务器吗?
- 求教oracle字符函数问题
- oracle 如何用sql实现split功能?
- linux装的oralce11g,表空间迁移修改地址报错
- 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)的话,
就方便多了。数据库设计是有缺陷的。