【问题标题】:What is the way to delete data from a particular column of a table in Oracle 10g using SQL*Plus?在 Oracle 10g 中使用 SQL*Plus 从表的特定列中删除数据的方法是什么?
【发布时间】:2017-09-16 17:46:17
【问题描述】:

例子:

表_A

id    | not null | number(10) 
name  | not null | varchar(50)  
photo | not null | blob

如果我想从表A中删除列photo的blob数据

我的表包含大约 2,000,000 行,因此执行 UPDATE 语句变得很耗时。

我的做法:

CREATE DIRECTORY EXT_DIR as '/tmp/TEST/';

CREATE TABLE TABLE_TEMP
(   
    ID varchar2(10),
    NAME varchar2(50)
)
ORGANIZATION EXTERNAL 
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY EXT_DIR
    ACCESS PARAMETERS 
    (
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ','
        MISSING FIELD VALUES ARE NULL
        (
            ID char(10),
            NAME char(50)
        )
    )
    LOCATION ('TABLE_A.csv') ---dump taken from TABLE_A
)
REJECT LIMIT UNLIMITED;
/

INSERT INTO TABLE_A(ID,NAME) SELECT ID,NAME FROM TABLE_TEMP;

我的方法是将表数据放入 CSV 并使用 EXTERNAL TABLE 将 CSV 数据插入到我的表中,但由于 CSV 最多只能存储 1048576 行,因此寻找不同的方法。

【问题讨论】:

  • 你试过什么? SO 不适用于操作方法问题,因此您应该进行一些搜索,尝试一些东西,然后,如果您仍然需要帮助,请发布问题
  • 好的,请注意!首先,我的表包含大约 20 行 lac 行,因此执行 UPDATE 语句变得很耗时。我的方法是将表数据放入 CSV 并使用 EXTERNAL TABLE 将 CSV 数据插入到我的表中,但 CSV 最多可以存储 1048576 行。
  • 如果您可以执行 DDL 语句,请删除该列,然后重新添加。但是列上的 NOT NULL 约束呢?
  • 我可以从该列中删除 NOT NULL 但使用 DDL 会更改我的表结构。
  • 表上是否有需要保留的触发器等?原则上,创建一个与现有表具有相同结构(列名和数据类型)的空表是最简单的; create table table_temp as select * from table_a where 0 = 1 是一种常用的方法。然后insert into table_temp select id, name, NULL from table_a。然后删除table_a 并将table_temp 重命名为table_a。您将不得不重新创建索引和触发器等,但这应该是快速和简单的。

标签: oracle10g sqlplus


【解决方案1】:

首先对于像delete col from table 这样回答的人,oracle 中没有删除列值的语句,delete 语句删除行。请在回答之前确保它与问题相对应。

你应该更新表格 update table_a set photo = null, 但是查看您的表格描述,由于列定义为not null,您无法做到这一点。

【讨论】:

    【解决方案2】:

    如果要删除照片列的某些行,则必须事先更改该表

    ALTER TABLE TableA modify (photo NULL);
    

    然后你可以“擦除”一些设置为空的数据:

    UPDATE TableA SET photo = null
    

    如果你想删除该列,那么

    ALTER TABLE TableA DROP photo;
    

    【讨论】:

      【解决方案3】:
      DELETE photo FROM [Table A]
      

      试试这个

      【讨论】:

      • 对不起..它适用于 sql server dbms 。如果这些列可以为空,您可以运行一个查询来使它们为空:UPDATE [Table A] set photo=NULL
      • 如果您仍然想删除它,首先将列更改为可空,即ALTER TABLE [TABLE A] modify (photo NULL);,然后运行UPDATE [Table A] set photo=NULL,然后将其设置回不可空ALTER TABLE [TABLE A] modify (photo NOT NULL);
      猜你喜欢
      • 2015-12-19
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多