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

标签 sql oracle

我至少有 65 VARCHAR表中的列 A我必须从 X bytes 调整大小至 X char .我希望找到比问题更简单的方法 ALTER TABLE A MODIFY..命令 65 次。

任何人都可以帮我解决如何以更快的方式做到这一点吗?

最佳答案

您可以编写一些动态 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;

你可以看到下面的工作
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)

关于sql - 调整数据库表中每个 VARCHAR 列的大小 - Oracle 11g,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10130700/

相关文章:

sql - 计算两个日期之间不包括星期日的天数

sql - Oracle SQL 触发器 - DBMS_OUTPUT.PUT_LINE

java.sql.SQLException : ORA-00917: missing comma while Inserting rows in a table 异常

mysql - 如何将来自不同供应商的不同数据库的不同列的数据合并到一张表中?

database - 如何在 Oracle 中生成排列?

C# ExecuteScalar() null COUNT 与 SELECT

mysql - SQL语句用变量测试外键字段?

mysql - 调用存储过程时出错

mysql - SQL:将具有相同标题的所有表复制到一个表中

php - 当搜索参数值为 null 或为空时选择所有行 [mysql]