关于Oracle存储过程的问题

VitoHuang 发布于 2016/02/24 22:23
阅读 200
收藏 0
procedure p(
	emp in varchar2,
	x_r out sys_refcursor
) as 
begin
	open x_r for 
		with classz as(
			select classId,className from classz
		),
		all_data as(
			select stu.id,stu.name,stu.sex,c.className
			from student stu join classz c on stu.classId = c.classId
			where 1=1
			--此处用什么方法添加 动态的条件查询 即当 emp 不为空的时候,后面可以接上and stu.id=emp 
			--又或者有什么其他的方法实现呢?麻烦各位了!
		)
		select * from all_data
end



加载中
0
IdleMan
IdleMan

法1

open x_r for
        with classz as(
            select classId,className from classz
        ),
        all_data as(
            select stu.id,stu.name,stu.sex,c.className
            from student stu join classz c on stu.classId = c.classId
            where 1=1
            and ( 
	       ( stu.id=emp  and emp is not null )
	         or 
	      (emp is null)
	    )
            --此处用什么方法添加 动态的条件查询 即当 emp 不为空的时候,后面可以接上and stu.id=emp 
            --又或者有什么其他的方法实现呢?麻烦各位了!
        )
        select * from all_data



法2:

if emp is not null then 
  OPEN emp_cv FOR  
      '....' || ' and stu.id=emp ';
 else
    OPEN emp_cv FOR  
      '....' ;
 end if;



1
一群河马
一群河马

and stu.id=nvl(emp,stu.id)

不客气

一群河马
一群河马
回复 @VitoHuang : 一样啊.and stu.id like nvl(emp || '%',stu.id)
VitoHuang
VitoHuang
如果是like呢?
返回顶部
顶部