【问题标题】:Symfony2 Doctrine2 Oracle database NUMBER DEFAULT type?Symfony2 Doctrine2 Oracle 数据库 NUMBER DEFAULT 类型?
【发布时间】:2023-03-29 02:17:02
【问题描述】:

我有一个问题,我将一个应用程序从 Symfony 1.4 迁移到 Symfony 2.4。我在让十进制变量工作时遇到了一些麻烦。我最终用另一种类型更新了数据库,但现在我必须使用旧的生产 Oracle 数据库,Doctrine2 告诉我,如果其中有数据,我无法更新字段类型。

它存储的数据是0.1或0.5或1.0

在 Oracle 中,DATA_TYPE 是“NUMBER”

    CREATE TABLE "APPRENTICE"."APPRENTICE_YEARTYPE" 
   (    "ID" NUMBER(20,0), 
    "NAME" VARCHAR2(255 BYTE), 
    "ROUNDNUMBER" NUMBER DEFAULT NULL
   ) SEGMENT CREATION IMMEDIATE

当我使用 Symfony2 命令导出旧数据库时,Doctrine 中的数据类型是 Integer... 我不能使用带 int 的小数。 当我尝试将类型更改为小数位数为 2 时,我收到无法更改类型的错误。

生成的Doctrine2代码:

/**
 * @var integer
 *
 * @ORM\Column(name="ROUNDNUMBER", type="integer", nullable=false)
 */
private $roundnumber;

Doctrine1 架构:

ApprenticeYeartype:
  columns:
    id:                  {type: integer, notnull: true, primary: true, autoincrement: true}
    name:                {type: string(255), notnull: true}
    roundNumber:         {type: float, notnull: true}

如果我尝试将 Doctrine2 值设置为浮动和更新,我会收到以下错误:

 [Doctrine\DBAL\DBALException]
 An exception occurred while executing 'ALTER TABLE APPRENTICE_YEARTYPE MODI
 FY (ROUNDNUMBER  DOUBLE PRECISION DEFAULT NULL)':

 ORA-01440: column to be modified must be empty to decrease precision or sca
 le






 [Doctrine\DBAL\Driver\OCI8\OCI8Exception]
 ORA-01440: column to be modified must be empty to decrease precision or sca
 le

我被这个困住了,有人可以帮忙吗?

问候

【问题讨论】:

  • 为什么Doctrine1类型“float”在Oracle中设置为NUMBER DEFAULT而Doctrine2类型“float”设置为DOUBLE???

标签: php sql oracle symfony doctrine-orm


【解决方案1】:

最后,我将 Doctrine 类型更改为“十进制,精度 2,小数位数 1”。

我手动将 Oracle 类型更新为 NUMBER(2,1)。

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 2013-06-30
    • 2013-08-26
    • 2012-04-21
    • 2013-09-27
    • 2022-11-21
    • 2021-04-28
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多