我正在cursor
语句中查看decode(1, 1, 1, NULL, 0)
SELECT
CURSOR worked_more_then_five_years
IS
SELECT decode(1, 1, 1, NULL, 0)
FROM table
WHERE /*query conditions*/
。该查询返回已工作5年或更长时间的员工的记录。我假设解码语句的目的是检查是否返回记录(意味着该员工已经工作了五年或更长时间)。
这种方法似乎不起作用。可能是因为我只是输入错误的虚拟数据。我的假设是否正确(这种方法不起作用)?如果我不正确,这个解码语句如何实现识别是否返回记录的目标?
{{1}}
答案 0 :(得分:1)
decode
语句正在影响返回的行的返回值。
为了保证返回行 ,最好使用聚合:
CURSOR worked_more_then_five_years
IS
SELECT (case when count(*) > 0 then 1 else 0 end)
FROM table
WHERE /*query conditions*/
case
语句是与decode()
“等效”的SQL标准。聚合将始终返回一行。如果没有匹配项,则值为0;如果匹配,则满足第一个子句,返回值为1.
答案 1 :(得分:1)
保证返回单行,并指示是否符合条件:
select count(*) row_found
from table
where ...
and rownum <= 1;
只要没有其他(非聚合)列,您将始终返回一行。
如果你的谓词保证只有一行符合条件,那么当然你可以关闭rownum谓词,实际上只要使用聚合就可以返回值:
select count(*) row_found,
min(employee_id) employee_id,
min(date_started) date_started
...
from table
where predicate_to_return_one_row.
答案 2 :(得分:0)
CURSOR working_more_then_five_years IS SELECT解码(1,1,1,NULL,0) 从表 WHERE / 查询条件 /
Decode的第一个参数必须是Column Name。 例) SELECT DECODE(WORK_YEAR,'5',WORK_YEAR,NULL) FROM TABLE
那句话的意思是“如果WORK_YEAR是'5',那么它应该输出'5',如果WORK_YEAR不是'5',那么所有的输出都是'null'。”
答案 3 :(得分:-1)
解码语句的工作方式类似于“if-then-else”,因此如果我们不提供任何默认情况,则返回null。它基本上有助于在检索期间操纵数据。
在你的陈述中你在比较什么?