【问题标题】:Make Oracle limit larger than 30使 Oracle 限制大于 30
【发布时间】:2014-03-17 11:48:35
【问题描述】:

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

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

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

有什么解决办法吗?也许有一些属性可以告诉 oracle 使限制大于 30。

【问题讨论】:

  • 自己有一个元表,并用超过 30 个字符的名称映射每个对象。但请记住,您需要忍受 Oracle 中的这种限制
  • 这不是重复的。 在这种特定情况下,您可以通过在 12c 中使用 SQL Translator Profiles 来解决 30 字节的限制。您需要拦截使用大对象名称的 SQL 并将它们转换为短 Oracle 名称。我投票决定重新开放,但问题几乎从未重新开放。为避免关闭,您可能需要提出另一个问题并明确引用“重复”问题并解释为什么这种情况不同。
  • 这根本不可能。

标签: oracle limit tablename


【解决方案1】:

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

可能行得通,但我能想到十几个理由说明这是一个坏主意。仅将此视为最后的手段。

【讨论】:

  • 如果我使用的是 Oracle 10g,这还能用吗?
  • 不,这个功能在10g中是不存在的。
猜你喜欢
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2021-11-17
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
相关资源
最近更新 更多