首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle 12中强制使用函数名称长度以满足SQL-92标准

在Oracle 12中强制使用函数名称长度以满足SQL-92标准
EN

Stack Overflow用户
提问于 2020-09-30 22:46:51
回答 1查看 84关注 0票数 1

在Oracle12中,有没有办法将函数名(和常量名)的最大长度限制为30个字符?(与oracle 11g和更早版本相同)

EN

回答 1

Stack Overflow用户

发布于 2020-10-05 16:00:04

可以通过COMPATIBLE参数或通过事件触发器限制Oracle函数名长度。

COMPATIBLE参数设置为小于12.2.0.0.0的值将防止任何标识符超过30个字节。但是,这是一个功能强大的参数,它会影响很多功能,并且不能轻易更改。

一种更简单但不全面的方法是创建一个事件触发器,该触发器阻止任何创建具有长对象名的对象的DDL。例如,下面的触发器防止一个模式创建任何具有长名称的函数。

代码语言:javascript
复制
create or replace trigger enforce_name_length
--Change "schema" to "database" to protect entire database.
--But be careful and test thoroughly before you block DDL on an entire database.
before create on schema
begin
    if ora_dict_obj_type = 'FUNCTION' and lengthb(ora_dict_obj_name) >= 31 then
        raise_application_error(-20000, 'Cannot create ' || ora_dict_obj_owner || '."' 
            || ora_dict_obj_name || '", the object name is longer than 30 bytes.');
    end if;
end;
/

尝试创建如下函数:

代码语言:javascript
复制
create or replace function large_function_name012345789012 return number is begin return 1; end;
/

将生成此错误:

代码语言:javascript
复制
ORA-04088: error during execution of trigger 'JHELLER.ENFORCE_NAME_LENGTH'
ORA-00604: error occurred at recursive SQL level 1
ORA-20000: Cannot create JHELLER."LARGE_FUNCTION_NAME012345789012", the object name is longer than 30 bytes.
ORA-06512: at line 3

您需要在函数中限制多大程度的名称?我可以想到一种比较困难的方法,将函数的所有标识符限制在30字节内,但将常量标识符限制在30字节内会更加困难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64140116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档