【问题标题】:Change all column units from byte to char将所有列单位从字节更改为字符
【发布时间】:2011-12-30 11:31:38
【问题描述】:

我的任务是将 MS SQL Server 中的大型数据库转换为 Oracle。该数据库有 150 多个表,其中包含许多约束、默认值和关系,以及许多存储过程和触发器。现在我想知道两件事:

  1. 这通常是如何完成的?我们是否必须为每个对象一个一个地手动完成,还是有更好的方法?
  2. 默认情况下,Oracle 中的字符串列以字节为单位创建。如何将所有表中的所有列从字节更新为字符?

提前致谢。

【问题讨论】:

    标签: sql-server oracle


    【解决方案1】:

    我使用 ADO.NET 元数据检索数据库结构的自制批处理将 MS SQL Server 数据库迁移到 Informix。我这样做是因为我找不到适合这种转换的工具。对于可以使用现有工具迁移的数据库,我不建议使用这种方法。
    因此,如果要迁移到 Oracle,最好使用一些现有的工具,例如:

    http://www.oracle.com/technetwork/database/migration/sqlserver-095136.html

    【讨论】:

    • 谢谢你的身体。你提供的链接真的很棒。我正在为 Oracle 使用 SQL 开发者。但我不知道它的迁移能力。现在,我意识到我浪费了很多时间来搬运桌子。
    【解决方案2】:

    对于 2:这将生成将所有 BYTE 列更新为 CHAR 的代码

    BEGIN
        FOR x in (SELECT * FROM user_tab_columns WHERE data_type LIKE 'VARCHAR%' and CHAR_USED = 'B')
        LOOP
            DBMS_OUTPUT.PUT_LINE('ALTER TABLE '||x.table_name||' MODIFY '||x.column_name||' '||x.data_type||'('||x.data_length||' CHAR)');
        END LOOP;
    END;
    /
    

    【讨论】:

    • 就我而言,我不得不使用EXECUTE IMMEDIATE 而不是DBMS_OUTPUT.PUT_LINE
    • 是的,这将运行代码。脚本将生成可以运行的代码
    • @Ellone 问题可能是你没有激活 DBMS_OUTPUT,检查这个answer 来激活它:)。 grokster +1 回答谢谢!
    • 您必须在脚本之前输入set serveroutput on format wrapped; 才能将其打印到您的控制台。
    【解决方案3】:

    并且为了避免如果您有视图可能发生的错误:

        BEGIN
        FOR X IN (SELECT C.TABLE_NAME, 
                         C.COLUMN_NAME,
                         C.DATA_TYPE,
                         C.DATA_LENGTH
                    FROM USER_TAB_COLUMNS C
                   WHERE DATA_TYPE LIKE 'VARCHAR%' 
                    AND CHAR_USED = 'B'
                    AND NOT EXISTS (SELECT 1 FROM USER_VIEWS V WHERE V.VIEW_NAME = C.TABLE_NAME))
        LOOP
            EXECUTE IMMEDIATE('ALTER TABLE '||X.TABLE_NAME||' MODIFY '||X.COLUMN_NAME||' '||X.DATA_TYPE||'('||X.DATA_LENGTH||' CHAR)');
        END LOOP;
        END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多