You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQLPLUS如何将查询结果转置为逐行显示?

Oracle SQLPlus 实现查询结果转置(字段名+值逐行显示)

SQLPlus本身没有内置的一键转置命令,但可以通过以下两种SQL方式实现你需要的「字段名+对应值逐行显示」效果,适配Putty终端的输出需求:

方法1:使用UNPIVOT(Oracle 11g及以上版本)

这是最简洁的原生SQL转置方式,适合单条或多条记录的转置:

-- 示例:转置EMP表中员工编号7369的信息
SELECT column_name, column_value
FROM (
    -- 这里写你的原始查询语句
    SELECT empno, ename, job, sal, hiredate
    FROM emp
    WHERE empno = 7369
)
UNPIVOT (
    -- 定义值列和字段名列
    column_value FOR column_name IN (
        empno AS 'EMPNO',
        ename AS 'ENAME',
        job AS 'JOB',
        sal AS 'SALARY',
        hiredate AS 'HIRE DATE'
    )
);

方法2:使用UNION ALL(兼容所有Oracle版本)

如果你的Oracle版本低于11g,可通过手动拼接查询实现转置,注意统一字段类型(非字符类型需转成字符串):

-- 示例:转置EMP表中员工编号7369的信息
SELECT 'EMPNO' AS column_name, TO_CHAR(empno) AS column_value FROM emp WHERE empno=7369
UNION ALL
SELECT 'ENAME' AS column_name, ename AS column_value FROM emp WHERE empno=7369
UNION ALL
SELECT 'JOB' AS column_name, job AS column_value FROM emp WHERE empno=7369
UNION ALL
SELECT 'SALARY' AS column_name, TO_CHAR(sal) AS column_value FROM emp WHERE empno=7369
UNION ALL
SELECT 'HIRE DATE' AS column_name, TO_CHAR(hiredate, 'DD-MON-YYYY') AS column_value FROM emp WHERE empno=7369;

优化SQLPlus终端输出效果

配合以下SQLPlus设置,让转置后的结果更整齐,避免混乱:

SET PAGESIZE 0       -- 隐藏表头、分页符
SET FEEDBACK OFF     -- 隐藏查询记录数提示
SET TRIMSPOOL ON     -- 去除输出末尾的空格
SET LINESIZE 60      -- 根据终端宽度调整,避免折行
SET HEADING OFF      -- 隐藏列标题

-- 执行你的转置查询
-- ...

-- 恢复默认设置(可选)
SET PAGESIZE 14
SET FEEDBACK ON
SET HEADING ON

补充说明

你可能混淆了其他数据库工具(如PL/SQL Developer)的一键转置功能,SQLPlus本身确实没有直接的转置命令,上述SQL方法是终端环境下的最优解决方案。

内容的提问来源于stack exchange,提问作者Martyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:43:29