为啥我会得到 SP2-0253
Posted
技术标签:
【中文标题】为啥我会得到 SP2-0253【英文标题】:Why do I get SP2-0253为什么我会得到 SP2-0253 【发布时间】:2015-04-27 04:34:03 【问题描述】:我正在参加考试。但我认为 linesize 已经足够大了。我知道增加 linesize 会解决这个问题。请让我知道为什么我会在这里收到 SP2-0253。
SQL> COLUMN sal HEADING 'Salary' FORMAT $99,999.99
SQL> set lines 10
SQL> show user
USER is "SCOTT"
SQL> desc sal from emp
Usage: DESCRIBE [schema.]object[@db_link]
SQL> select sal from emp where rownum = 1;
SP2-0253: data item 1 ("SAL") will not fit on line
SQL> set lines 20
SQL> /
Salary
-----------
$800.00
SQL>
【问题讨论】:
COLUMN 命令仅在完全匹配时适用于 SELECT 列表中的列名。如果它们不同,那么您必须在 select 语句的列列表中使用确切的别名。 【参考方案1】:1) show linesize
获取当前行大小。我的猜测是“80”。
2) set linesize 32767
3) 运行您的 SQL 命令。检查实际行大小。
【讨论】:
在我的示例中查看该行:set lines 10
。所以 linesize 是 10
将 linesize 设置为更大的数字(例如 32767!),运行您的 SQL,并检查实际的行大小!你会发现你有超过10个!建议:尝试使用正数...和负数进行“选择”;)【参考方案2】:
SP2-0253:数据项 1(“SAL”)不适合在线
原因很简单。您希望输出格式为:
FORMAT $99,999.99
这需要11
的linesize 才能在SQL*Plus 输出中以正确的position 和alignment 显示强>。
让我们看看:
SQL> set linesize 11
SQL> select sal from emp where rownum = 1;
Salary
-----------
$800.00
查看输出中包含多少行的最简单方法是检查下划线的LENGTH:
SQL> select length('-----------') length from dual;
LENGTH
----------
11
SQL>
所以,它回答了“为什么 11 行的输出不能放入 10 行”的问题。
更新该行为的实际原因是列名被格式化为新列名,并且没有提供正确的别名 选择列表。
COLUMN 命令仅在完全匹配时适用于 SELECT 列表中的列名。如果它们不同,那么您必须在 select 语句的列列表中使用确切的别名。
解决方案添加与格式中提供的列名相同的别名。
SQL> COLUMN sal HEADING 'Salary' FORMAT $99,999.99
SQL> set lines 10
SQL> show user
USER is "SCOTT"
SQL> select sal from emp where rownum = 1;
SP2-0253: data item 1 ("SAL") will not fit on line
SQL> select sal Salary from emp where rownum = 1;
SALARY
----------
800
SQL>
或者,
SQL> set linesize 10
SQL> select sal Salary from emp where rownum = 1;
SALARY
----------
800
SQL> select sal as "Salary" from emp where rownum = 1;
Salary
----------
800
SQL> select sal from emp where rownum = 1;
SP2-0253: data item 1 ("SAL") will not fit on line
SQL> set linesize 11
SQL> select sal from emp where rownum = 1;
Salary
-----------
$800.00
SQL>
【讨论】:
为什么FORMAT $99,999.99
需要 11 行大小?我在想 9 就够了。
您是否阅读了完整的答案?您了解对齐方式和位置吗?您在输出中看到总行数是 11 吗?
当然我完全阅读了答案,但我不知道对齐和位置。为什么格式是 11,而不是 9 或 10 或其他值。
查看更新,我发现问题实际上出在您的别名和格式命令中给出的列名上。因此,输出中的列名不匹配。【参考方案3】:
问题不在于格式,而在于负数的尾随符号。没有数字格式可以避免这种情况。使用to_char
选择所需格式的数据,并结合substr
将结果修剪为 10 个字符
【讨论】:
以上是关于为啥我会得到 SP2-0253的主要内容,如果未能解决你的问题,请参考以下文章