我正在编写一个PL / SQL函数,需要从几个不同的表中获取日期并返回最新的表。我的方法是:
创建一个临时表来保存日期:
CREATE TYPE t_dates IS TABLE OF DATE;
/
创建一些局部变量:
l_date DATE;
l_dates t_dates := t_dates();
l_idx INTEGER := 0;
l_output_date DATE;
然后在我感兴趣的每个日期选择一个变量,并将其添加到临时表中:
SELECT it.date
INTO l_date
FROM interesting_table it
WHERE it.id = 1
;
l_dates.extend;
l_idx := l_idx + 1;
l_dates(l_idx) := l_date;
填充临时表后,现在我只想从中选择最大值。我怎么做?有点像...
SELECT max(*)
INTO l_output_date
FROM l_dates
;
RETURN l_output_date;
但我不确定我可以像这样引用我的临时表,也不知道如何找到未命名的列的最大值。
编辑:当我测试上述内容时,出现错误:PL/SQL: ORA-00936: missing expression
与我所拥有的行SELECT max(*)
相关。但是,我不相信这是我唯一的错误,因为如果我将最后一个块更改为:
SELECT *
INTO l_output_date
FROM l_dates
WHERE rownum = 1
;
,仅用于测试,应该选择临时表中的第一个日期,然后错误变为PL/SQL: ORA-00942: table or view does not exist
,这表明我不能以这种方式引用我的临时表。
我从评论中了解到我应该max(column_value)
而不是max(*)
,但是使用它,我仍然会收到table or view does not exist
错误。
答案 0 :(得分:0)
无法从您尝试过的嵌套表中进行选择。 您可能必须使用逻辑来查找最大值
l_idx := l_idx + 1;
l_dates(l_idx) := l_date;
if(l_date > l_dates(l_idx-1) OR l_idx =1) THEN
max_date :=l_date;
End if;
对于您的情况,您可以在查询中找到最大日期,而不是获取日期列表然后获取最大日期
SELECT max(it.date)
INTO l_date
FROM interesting_table it
WHERE it.id = 1
;