Skip to content

大小写转换

在MySQL数据库中,数据库对象默认为大小写敏感;在虚谷数据库中,数据库对象默认为大写。在虚谷数据库中可通过修改“xugu.ini”配置文件参数“cata_case_sensitive”进行大小写敏感配置,可配置为“false(大小写不敏感,默认)”或“true(大小写敏感)”。

在使用数据库设计数据库对象时,应首先确认数据库对象名和字段名采用大写还是小写,并且在数据库的设计和编码过程中完全统一(统一大写或统一小写),统一的大小写规则有助于对象管理及屏蔽使用过程中因大小写不一致导致的对象识别错误。

在虚谷数据库中,可以通过以下方式统一数据库对象的大小写:

  • 通过迁移工具更改,在使用迁移工具V11.3.0及之后版本迁移表之前,配置表名小写转大写(统一为大写)。
  • 通过SQL进行批量变更表名小写转大写。
    sql
    -- MySQL小写表名转换为大写
    declare
      str_tab varchar;
      src_sql varchar;
      aim_sql varchar;
    begin
      for i in (
        select
          s.schema_name,
          t.table_name
        from
          dba_tables t,
          dba_schemas s
        where t.schema_id = s.schema_id) 
      loop 
        begin
          select upper(i.table_name) into str_tab;
          src_sql := 'alter table ' || i.schema_name || '."' || i.table_name || '" rename to ' || str_tab || '_BAK cascade;';
          aim_sql := 'alter table ' || i.schema_name || '."' || str_tab || '_BAK' || '" rename to ' || str_tab || ' cascade;';
    
          -- 该行信息打印可注释
          send_msg(src_sql);
          -- 该行信息打印可注释
          send_msg(aim_sql);
          execute immediate src_sql;
          execute immediate aim_sql;
    
          exception
            when others THEN
              dbms_output.put_line('ERR-'||SQLCODE||' , '||SQLERRM); -- 异常编号&异常描述信息
        end;
      end loop;
    end;
    /
    
    -- MySQL小写字段名转换为大写
    declare
      str_col varchar;
      aim_sql varchar;
    begin
      for i in (
          select
          schema_name,
          table_name,
          col_name
        from
          dba_columns c,
          dba_tables t,
          dba_schemas s
        where
          c.table_id = t.table_id
          and t.schema_id = s.schema_id) 
      loop 
        begin
          select upper(i.col_name) into str_col;
          aim_sql := 'alter table '|| i.schema_name || '.' || i.table_name ||' rename "'|| i.col_name ||'"  to '|| str_col ||  ' cascade;';
    
          -- 该行信息打印可注释
          send_msg(aim_sql);
            -- 执行rename命令
          execute immediate aim_sql;
    
          exception
            when others THEN
              dbms_output.put_line('ERR-'||SQLCODE||' , '||SQLERRM); -- 异常编号&异常描述信息
        end;
      end loop;
    end;
    /