调整数据库表中每个VARCHAR列的大小 - Oracle 11g

nam*_*ked 3 sql oracle

我至少有65 VARCHAR表列A,我将不得不从调整大小X bytesX char.我希望找到比发出ALTER TABLE A MODIFY..命令更简单的方法65次.

任何人都可以请帮助我如何做到这一点是一种更快的方式?

Jus*_*ave 5

你可以编写一些动态SQL.假设该表在当前架构中

DECLARE
  l_sql_stmt VARCHAR2(1000);
BEGIN
  FOR t IN (SELECT * FROM user_tab_cols WHERE table_name = 'A')
  LOOP
    l_sql_stmt := 'ALTER TABLE ' || t.table_name || ' MODIFY (' || 
                     t.column_name || ' varchar2(' || t.char_length || ' char))';
    EXECUTE IMMEDIATE l_sql_stmt;
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

你可以在下面看到它

SQL> ed
Wrote file afiedt.buf

  1  create table foo(
  2    col1 varchar2(10 byte),
  3    col2 varchar2(20 byte)
  4* )
SQL> /

Table created.

DECLARE
  l_sql_stmt VARCHAR2(1000);
BEGIN
  FOR t IN (SELECT * FROM user_tab_cols WHERE table_name = 'FOO')
  LOOP
    l_sql_stmt := 'ALTER TABLE foo MODIFY (' || 
                     t.column_name || ' varchar2(' || t.char_length || ' char))';
    EXECUTE IMMEDIATE l_sql_stmt;
  END LOOP;
END;


SQL> desc foo;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               VARCHAR2(10 CHAR)
 COL2                                               VARCHAR2(20 CHAR)
Run Code Online (Sandbox Code Playgroud)