使用SQL * Plus从Oracle 10g中的表的特定列删除数据的方法是什么?

时间:2017-04-20 08:02:59

标签: oracle10g sqlplus

示例:

Table_A

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

如果我想从表photo

中删除列A的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行,因此寻找不同的方法。

3 个答案:

答案 0 :(得分:2)

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

你应该更新表格 update table_a set photo = null, 但是,由于列定义了not null

,因此查看表格描述时,您无法执行此操作

答案 1 :(得分:1)

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

ALTER TABLE TableA modify (photo NULL);

然后你可以"擦除"一些数据将其设置为null:

UPDATE TableA SET photo = null

如果要删除列,则

ALTER TABLE TableA DROP photo;

答案 2 :(得分:-1)

DELETE photo FROM [Table A]

试试这个