使Oracle限制大于30

时间:2014-03-17 11:48:36

标签: oracle limit tablename

我们都知道Oracle对象名称表名列和bla-bla有30个字节的限制,我一直在网上搜索解决方案的几个小时,但我找不到任何东西,最终我放弃了。

我们正在开发一个同时使用MySQL和Oracle的应用程序,在我们开始实现Oracle之前一切正常,我们遇到了有关表和存储过程名称的问题。

我无法更改表的名称,因为应用程序已在客户端服务器上运行。

任何解决方案?也许某些属性告诉oracle使限制大于30。

1 个答案:

答案 0 :(得分:4)

Oracle 12c中的

SQL Translator Profiles可以帮助应用程序假装Oracle支持长度合适的对象名称。这可以允许您在不修改应用程序的情况下更改数据库。

下面是一个将大于30字节的名称翻译成短名称的简单示例:

SQL> create table short_table_name(a varchar2(100));

Table created.

SQL> insert into short_table_name values ('Success');

1 row created.

SQL> begin
  2     dbms_sql_translator.create_profile('LONG_OBJECT_NAMES');
  3     dbms_sql_translator.register_sql_translation(
  4             profile_name    => 'LONG_OBJECT_NAMES',
  5             sql_text        => 'select * from because_30_bytes_just_isnt_enough_sometimes',
  6             translated_text => 'select * from short_table_name');
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> alter session set sql_translation_profile = LONG_OBJECT_NAMES;

Session altered.

SQL> alter session set events = '10601 trace name context forever, level 32';

Session altered.

SQL> select * from because_30_bytes_just_isnt_enough_sometimes;

A
----------------------------------------------------------------------------------------------------
Success

这个可能会工作,但我可以想到十几个原因,为什么这是一个坏主意。只考虑这是最后的手段。