【问题标题】:oracle add column with value based on conditionoracle根据条件添加具有值的列
【发布时间】:2021-03-16 16:57:21
【问题描述】:

我想使用 ORACLE 根据“LEASE_ID_count”的值添加一个“标签”列。

但我收到此错误:

“CUSTOM_LIFETIME_VALUE_TAG”列的值太大。“tag”(实际: 7、最大值:3),引起:OracleDatabaseException: ORA-12899: value 对于列“CUSTOM_LIFETIME_VALUE_TAG”来说太大了。“标签”(实际:7, 最大:3

select "COMPANY_CODE", "LEASE_ID_count",
(CASE WHEN "LEASE_ID_count" IN ('3','4', '5') THEN '3 à 5vh' WHEN "LEASE_ID_count" ='1' THEN '1vh' WHEN "LEASE_ID_count" ='2' THEN '2vh' END) "tag"
from "CUSTOM_LIFETIME_VALUE_TESR"

任何想法请帮助我?谢谢

【问题讨论】:

  • 这个SELECT 不会导致该错误。 SELECT 似乎是 INSERT 的一部分,并且在这种情况下错误似乎很明显。
  • 我意识到一双全新的眼睛有时可以看到一些你看不到的明显的东西,但这里的信息非常清楚。 tag 列是如何定义的?错误提示varchar2(3)'3 à 5vh' 中有多少个字符? (顺便说一句,同事们不太可能感谢您使用带引号的标识符;这似乎是您应该在视图中执行的操作,或者作为现有表中的虚拟列,而不是作为您必须维护的新表?)跨度>
  • @GordonLinoff 谢谢,你的意思是我必须通过插入来重新选择?我不清楚
  • varchar2??我在错误消息中没有看到这个:o

标签: sql oracle


【解决方案1】:

评论太长了。错误消息指的是"CUSTOM_LIFETIME_VALUE_TAG"."tag"。这是来自在查询中没有明显引用的表。好的,也许CUSTOM_LIFETIME_VALUE_TESR 是一个引用该表的视图。这是可能的。

但是,错误消息是关于将数据存储到该列,而不是引用它。所以,我最好的猜测是你有这样的查询:

INSERT INTO CUSTOM_LIFETIME_VALUE_TAG (COMPANY_CODE, LEASE_ID_count, tag)
    <your select here>;

并且该表中的tag列定义为3个字符。显然,'3 à 5vh' 有 7 个字符,多于 3 个字符会导致错误。因此出现错误。

Oracle 确实潜伏着很多功能。即便如此,我还是很难想到 SELECT 在不涉及 DML 的情况下如何导致此错误。

正如 Alex Poole 非常正确地指出的那样:编写不带双引号的查询。带引号的标识符只会使查询更难编写和阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 2022-11-13
    • 1970-01-01
    • 2023-03-30
    • 2021-12-02
    • 2020-03-12
    • 1970-01-01
    • 2016-02-03
    相关资源
    最近更新 更多