为啥我会得到 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

这需要11linesize 才能在SQL*Plus 输出中以正确的positionalignment 显示强>。

让我们看看:

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的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会得到“名称已存在的游标”?

为啥我会得到不同形状的张量错误?

施放 pParam 后,为啥我会得到随机字符?

为啥我会得到“未处理的异常类型 IOException”?

为啥我会得到欧洲/柏林时区 0:53 的偏移量?

对于这个简单的示例,为啥我会得到“检测到 PInvokeStackImbalance”?