【发布时间】:2009-04-29 20:24:57
【问题描述】:
回滚到第一版,然后进行了一些编辑。请参阅修改后的question。
我对下面的 SELECT 有一个有趣的问题。
关于 ORDER BY 子句;我正在尝试使用名为“p_sortby”的变量进行排序。
Order by 可以按列名或列位置使用,(1、2、...等)。
不知何故,如果我在 PL/SQL 中使用位置,它就不起作用。
所以我必须使用列名,我们不能简单地在那里传递一个 varchar2 字符串,
我们需要使用真实的列名。我注意到它只适用于 varchar2 类型的列。
它不适用于例如数字列。
请各位大神指教一下这种问题如何解决。
/*I am sorry as I cannot paste the format correct here*/.
请大家编辑 SELECT 并输入所需的格式。
select distinct gl.group_id, gl.group_name
from test_group gl
where gl.group_org_id = p_orgid
and ( gl.group_name_key like '%' || p_name || '%'
or p_name is null
or p_name = ''
)
and ( gl.group_description_key like '%' || p_description || '%'
or p_description is null
or p_description = ''
)
and ( gl.status_code = p_statuscode
or p_statuscode is null
or p_statuscode = 99
)
and gl.group_id in (
select gm.group_id
from test_group_member gm join test_org_person op
on gm.person_id = op.o_person_id
join test_person pp
on op.o_person_id = pp.person_id
where ( upper(pp.firstname) like
'%' || upper(p_adminfirstname) || '%'
or p_adminfirstname is null
or p_adminfirstname = ''
)
and ( upper(pp.lastname) like
'%' || upper(p_adminlastname) || '%'
or p_adminlastname is null
or p_adminlastname = ''
)
and ( upper(op.emplid) like
'%' || upper(p_adminemployeeid) || '%'
or p_adminemployeeid is null
or p_adminemployeeid = ''
)
and gm.isadmin = 1)
and gl.group_id in (
select gm.group_id
from test_group_member gm join test_org_person op
on gm.person_id = op.o_person_id
join test_person pp
on op.o_person_id = pp.person_id
where ( upper(pp.firstname) like
'%' || upper(p_memberfirstname) || '%'
or p_memberfirstname is null
or p_memberfirstname = ''
)
and ( upper(pp.lastname) like
'%' || upper(p_memberlastname) || '%'
or p_memberlastname is null
or p_memberlastname = ''
)
and ( upper(op.emplid) like
'%' || upper(p_memberemployeeid) || '%'
or p_memberemployeeid is null
or p_memberemployeeid = ''
)
and gm.isadmin = 0)
【问题讨论】:
-
我开始格式化代码。您可以通过选择您的代码并单击编辑框上方的二进制查找按钮来做到这一点。保留空格等。
-
Rohit - 下一次,用 4 个空格的缩进格式化代码,让问题的文本不缩进。我整理了乱七八糟的东西,以便@devio 因其出色的回答而得到应有的赞誉。但是,作为提问者,您有责任将问题格式化为易读性。请记得看预览。您还可以获得有关标记语言的帮助。最好避免水平滚动;如果一些长行强制它是可以的,但人们应该能够看到你的大部分代码。
-
@Rohit:还请注意,最好编辑您的问题以澄清,而不是添加“来自提问者的答案”,如下所示。
-
@Rohit:最后,就目前而言,请注意,当人们提供答案时删除问题的正文并不好——尤其是投票赞成的答案。您有责任让问题可见,以便其他人可以看到答案适用于什么。
-
我认为您还真的想为您的搜索参数使用绑定变量。连接字符串不安全且速度慢。