Any*_*are 3 sql informix stored-procedures
如果我有这样的存储过程:
get_my_dep(empNum)
Run Code Online (Sandbox Code Playgroud)
它返回一行ex:
call get_my_dep(567);
dep_code dep_year dep_name
66 2017 HR
Run Code Online (Sandbox Code Playgroud)
如何在我的查询中仅检查行的第一个值(dep_code),如下所示:
SELECT *
FROM rmcandidate a INNER JOIN task b
ON a.task_code = b.task_code
WHERE get_my_dep(emp_num) != 0 -- here I want to check only the dep_code
AND b.active_flag = 1
Run Code Online (Sandbox Code Playgroud)
小智 5
据推测,存储过程被定义为返回多个值,如下所示:
create procedure get_my_dep(emp_num int)
returning int as dep_code, int as dep_year, char(8) as dep_name;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以创建一个只返回其中一个值的包装程序,然后在WHERE子句中使用它.例如:
create procedure get_my_dep_code(emp_num int)
returning int as dep_code;
define dc, dy int;
define dn char(8);
execute procedure get_my_dep(emp_num) into dc, dy, dn;
return dc;
end procedure;
Run Code Online (Sandbox Code Playgroud)
另一种方法是定义返回行类型的过程.例如:
create row type dep_code_t(dep_code int, dep_year int, dep_name char(8));
create procedure get_my_dep(emp_num int)
returning dep_code_t;
define dc, dy int;
define dn char(8);
...
return row(dc, dy, dn)::dep_code_t;
end procedure;
Run Code Online (Sandbox Code Playgroud)
然后可以在WHERE子句中直接引用返回的行类型的元素,如下所示:
WHERE get_my_dep(emp_num).dep_code != 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |