在Oracle中,有一种简单的方法可以在单个查询中执行此操作,还是这是正确的方法?
SELECT MAX(ID) INTO n_FOO_ID FROM FOO WHERE BAR = n_InputVar and ConditionalFlag IS NULL;
IF n_FOO_ID IS NULL OR n_FOO_ID = 0 THEN
SELECT MAX(ID) INTO n_FOO_ID FROM FOO WHERE BAR = n_InputVar;
END IF;
我要做的是获取条件与输入变量匹配的最大ID,但优先考虑没有条件标志的行。
我的大部分数据库经验都在SQL Server中,我会做这样的事情:
SELECT TOP 1 ID INTO @FooID FROM FOO WHERE Bar = @InputVar ORDER BY ConditionalFlag, ID DESC
但这似乎在Oracle上不一样,或者更可能......我没有正确地做到这一点。任何人都可以提供任何建议吗?
谢谢!
答案 0 :(得分:4)
我相信Oracle相当于:
SELECT TOP 1 ID
INTO @FooID
FROM FOO
WHERE Bar = @InputVar ORDER BY ConditionalFlag, ID DESC
是
SELECT ID FROM
( SELECT ID
INTO FooID
FROM FOO
WHERE Bar = InputVar ORDER BY ConditionalFlag, ID DESC
) WHERE ROWNUM = 1;