sql - oracle循环排序
问题描述
我有 pl/sql 的循环脚本,我的脚本按 i asc 返回的顺序,
DECLARE
i NUMBER;
BEGIN
FOR rec IN (
SELECT 1 as i from dual
UNION
SELECT 2 as i from dual
UNION
SELECT 3 as i from dual
UNION
SELECT 4 as i from dual
)
LOOP
DBMS_OUTPUT.PUT_LINE (rec.i);
END LOOP;
end;
它回来了
1
2
3
4
但我需要订购
1
4
3
2
我应该使用什么功能来解决问题,谢谢你advence
解决方案
我希望这能返回你想要的:
DECLARE
i NUMBER;
BEGIN
FOR rec IN (
SELECT 1 as i from dual
UNION ALL
SELECT 4 as i from dual
UNION ALL
SELECT 3 as i from dual
UNION ALL
SELECT 2 as i from dual
) LOOP
DBMS_OUTPUT.PUT_LINE (rec.i);
END LOOP;
end;
然而,这只是因为数据很小。Oracle 不保证没有ORDER BY
. 所以更安全的方法是:
DECLARE
i NUMBER;
BEGIN
FOR rec IN (
SELECT i
FROM (SELECT 1 as i, 1 as ord from dual UNION ALL
SELECT 4 as i, 2 from dual UNION ALL
SELECT 3 as i, 3 from dual UNION ALL
SELECT 2 as i, 4 from dual
) x
ORDER BY ord
) LOOP
DBMS_OUTPUT.PUT_LINE (rec.i);
END LOOP;
end;
推荐阅读
- xml - Powershell XML 删除 ChildNode“日期”超过一个月的节点
- python - 将数据框转换为列表时出现错误
- arrays - 两个excel数组的逻辑运算
- python - Python Web Scrape:删除输出中多余的 HTML 标签。所有数据都来自页表,get_text 和 pretiffy 不起作用
- r - 通过指数平滑获得预测的 RMSE
- node.js - 命令行工具的跨平台分发
- c# - 错误:ConnectionString 属性尚未初始化
- database - 内存中的sqlite出现“没有这样的表”错误
- python - 如何使用 tweepy 和 python 获取给定推文的回复?
- apache-kafka - Message Broker - 作业之间的依赖关系