更改所有表列,使名称之间没有空格

时间:2019-08-06 12:09:54

标签: oracle trim removing-whitespace

Oracle-更改所有表列名称,并在名称之间使用空格修饰

对于alter之前的列名:

家庭电话

手机号码

本地号码

更改列名称后应为:

家庭电话

手机号码

本地号码

我已经尝试过这种方式:但是无法破解:

 UPDATE SA_VW_PHONENUMBER TN SET TN.Column_Name   = TRIM (TN.Column_Name);

2 个答案:

答案 0 :(得分:3)

全自动方式

使用此基于游标的DDL黑客-语句concat。

BEGIN
   FOR alters IN
   (
      SELECT
        'ALTER TABLE "'||table_name||'" RENAME COLUMN "'||column_name||
         '" TO "'||replace(cols.column_name,' ','')||'"' sql_stmt
      FROM all_tab_cols cols
      WHERE REGEXP_LIKE(column_name,'[[:space:]]')
         AND owner = user --Add real schema name here
      ORDER BY 1
   ) LOOP
      DBMS_OUTPUT.PUT_LINE ( alters.sql_stmt ||';') ;
      EXECUTE IMMEDIATE alters.sql_stmt;
   END LOOP;
END;
/

如果您想使用安全的方式

据我所知,您不能将DDL作为动态SQL执行,因此您不能将变量传递给ALTER TABLE命令,但是您可以代替它来做。

  1. 选择事件:
SELECT table_name,column_name,replace(cols.column_name,' ','') as replace_name
  FROM all_tab_cols
 WHERE REGEXP_LIKE(column_name,'[[:space:]]');
  1. 使用ALTER TABLE DDL命令:
alter table T_TABLE rename column "COLUMN SPACE" TO "COLUMNNOSPACE";

答案 1 :(得分:0)

尝试替换功能

 UPDATE SA_VW_PHONENUMBER TN SET TN.Column_Name = REPLACE(TN.Column_Name,' ','')