【问题标题】:Oracle sqlplus functions shows as ###Oracle sqlplus 函数显示为 ###
【发布时间】:2021-05-19 02:08:51
【问题描述】:

提交选择查询后,其中包含诸如 row_number() 或任何其他函数的函数,结果为####。如果我使用 rownum 作为东西,它会显示 ### 如果我只使用 rownum 一切正常。

我在使用其他通用列时遇到了这个问题,但我可以简单地使用列列名格式 9999;

问题不在于空间不够,每条记录只有一位数。

我已经在互联网上搜索了所有内容,但还没有解决我的问题。

有谁知道函数可能有什么问题以及如何格式化它们?

select ROW_NUMBER() OVER (ORDER BY student_surname) "Nr.", 
      student_surname || ' ' || student_name "Student", 
      NVL(sum(m.stipend),0) + NVL(sum(m.compensation),0) "Total" 
from student s 
  inner join money m on m.student_id=s.id_student 
group by student_surname, student_name;

试过清列,还是不行。

【问题讨论】:

  • 请向我们提供您正在使用的查询和输出
  • 添加查询和结果
  • 只是为了测试,替换“Nr.”使用 NR 并执行 COLUMN NR FORMAT A50。这将使第一列 50 字符宽。然后运行语句(NR 不是“Nr.”)
  • 一般来说,sqlplus 并不是运行查询的最现代(1884 年首次使用...)选项。我会考虑使用 sql developer 或者 - 如果您使用命令行客户端 - sqlcl。您在这里看到的问题与 sqlplus 列格式有关 - 我几乎可以肯定。
  • Khm,“第一次使用于 1884”@Koen? :)

标签: sql oracle sqlplus


【解决方案1】:

看起来好像您用错误的格式格式化了数字列,这不允许显示所有数字。

例如,这是某人的薪水 - 看起来不错:

SQL> select sal from emp where rownum = 1;

       SAL
----------
       920

但是,如果您将其格式化如下(即说我希望该列只有两位数字 (99)),则结果为 ###

SQL> col sal format 99
SQL> select sal from emp where rownum = 1;

SAL
---
###

SQL>

怎么办?最简单的方法是clear格式化:

SQL> col sal clear
SQL> select sal from emp where rownum = 1;

       SAL
----------
       920

SQL>

另一种可能是numformat(一般)设置错误;所有这些列都是NUMBER,它们都受到这个set numformat的影响:

SQL> set numformat 9
SQL> select empno, mgr, sal, deptno from emp where rownum = 1;

     EMPNO        MGR        SAL     DEPTNO
---------- ---------- ---------- ----------
########## ########## ########## ##########

如何解决这个问题?退出 SQL*Plus 并重新连接。

【讨论】:

  • 感谢您的深入回答,是的,真正的答案只是重新启动。有趣的是,我想我做到了,但是由于您的回答确实再次重新启动了它。现在一切正常。再次感谢您,为此苦苦挣扎了好几个小时。
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2013-09-02
  • 1970-01-01
相关资源
最近更新 更多