【问题标题】:Altering data types within a table using SQL command ALTER使用 SQL 命令 ALTER 更改表中的数据类型
【发布时间】:2013-01-28 19:59:55
【问题描述】:

我已经研究过如何更改表数据类型并且我知道如何去做,但我无法让它发挥作用。我正在尝试使用以下命令在 APP 中更新我的表 Person:

ALTER TABLE APP.PERSON ALTER uName varchar;

到目前为止我所尝试的:

  • 使用 Modify 但意识到,在收到错误后,这确实应该是 ALTER。
  • 将 uName 更改为 UNAME。
  • 将其更改为 varchar2 数据类型。
  • 在末尾添加数据类型“(20)”和“NOT NULL”的大小。

我哪里错了?我正在使用在 Mac OS X 上运行的 Netbeans 7.3 Beta 2,这一切都在 Netbeans 的 SQL 命令部分完成,如果有任何问题,使用 Java-DB 作为我的数据库。

【问题讨论】:

    标签: sql netbeans sqlcommand alter


    【解决方案1】:

    已经在 SO 上回答了here。您基本上需要创建具有所需数据类型的新列并删除旧列。但是,如果你看一下Apache Derby doc,有一个SET DATA TYPE 命令,所以试试类似

    ALTER TABLE APP.PERSON ALTER UNAME SET DATA TYPE VARCHAR(30)
    

    编辑

    如果上面的代码不起作用,那么您只需按照我之前的建议重新创建该列。

    ALTER TABLE APP.PERSON ADD COLUMN UNAME_NEW VARCHAR(30);
    UPDATE APP.PERSON SET UNAME_NEW = UNAME;
    ALTER TABLE APP.PERSON DROP COLUMN UNAME;
    RENAME COLUMN APP.PERSON.UNAME_NEW TO UNAME;
    

    【讨论】:

    • 这似乎是我需要使用的命令,但我无法让它工作,使用 @Joachim 的响应我收到此错误 - “错误代码 -1,SQL 状态 42Z15:指定的类型无效列‘UNAME’。列的类型不能更改。”
    • 同样的错误 - “错误代码 -1,SQL 状态 42Z15:为列 'UNAME' 指定的类型无效。列的类型不能更改。” ...这是有和没有结束分号的。
    • 我没有正在运行的 Derby 来测试它,所以你可以回退到原来的解决方案。
    • 好的,谢谢,如果可以的话,还有最后一个问题。我知道您没有正在运行的 Derby 来对此进行测试,但您可能知道,如何将列放在特定位置以便替换它的旧位置?
    • 对不起,我不认识这个。快速查看文档并没有告诉我任何关于此的信息:(
    【解决方案2】:

    大多数数据库需要特定权限才能使用 DDL(数据定义语言)命令,例如 ALTER TABLE。很多时候,应用层中使用的数据库凭据在数据库中没有 DDL 权限。

    验证您使用的连接是否有权运行ALTER TABLE。如果确实如此,请发布您正在使用的特定代码和任何特定的错误消息。

    【讨论】:

      【解决方案3】:

      我没有要测试的 JavaDB,但根据 the documentation 应该是;

      ALTER TABLE APP.PERSON ALTER uName SET DATA TYPE VARCHAR(20)
      

      【讨论】:

      • 谢谢,我真的只是尝试过这个,然后回来发布我的结果,然后看到了你的帖子。我收到此错误 - “错误代码 -1,SQL 状态 42Z15:为列 'UNAME' 指定的类型无效。列的类型可能不会更改。”
      • @JohnVasiliou 您正在运行哪个版本的 JavaDB?
      • 我不确定,我该如何检查?如果有帮助,它是一个嵌入式驱动程序吗?我相信它是随 Java 6 一起提供的。
      • @JohnVasiliou 我怀疑SET DATA TYPE 命令太旧了,在这种情况下@petr 重新创建列的解决方案是您唯一的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2016-04-21
      • 2013-01-04
      相关资源
      最近更新 更多