有人写了(他离开公司)以下功能:
Create function code_status
( p_code_id varchar,
p_daytime date,
p_status varchar);
Select status into l_value from table1 where code_id=p_code_id and daytime=p_daytime;
Return l_value;
End;
并在下面的SQL查询中使用它:
Select code, daytime, status, code_status(code_id, daytime, status) from table2
where code_status(code_id, daytime, status) in ('act') and daytime = '12 Jan 2017'
当我从函数运行select查询以获取code ='f23'
的所有行时Select code, code_id, daytime, status from table1 where code = 'f23';
它给出了以下结果:
Code code_id status daytime
F23 123df act 16 Jul 2016
F23 123df stn 12 Jan 2017
F23 123df act 15 Mar 2017
当我在下面运行查询时,会得到以下结果:
Select code, daytime, code_id,status, code_status(code_id, daytime, status) stat_funct
from table2
where code_status(code_id, daytime, status) in ('act')
and daytime = '12 Jan 2017'
and code='f23'
Code daytime code_id status stat_funct
F23 12 Jan 2017 123df act act
现在我想了解这个函数的作用以及它在查询中的工作原理,为什么stat_funct是'act'?
答案 0 :(得分:0)
它使用提供的参数抽象status
table2
{{1}}字段的访问权限并命名为" code_status"。 table1和table2具有相似模式的事实是巧合的,但它确实意味着函数可以用连接替换(这会更好地执行)。
创建它的原因可能是为了更容易在简单查询中使用(避免连接),或出于安全原因(所有数据访问都是通过SP进行的,并且通过授予对SP的访问权限来处理安全性)而不是表 - 恕我直言,反模式。)