更新时间:2025-08-19 GMT+08:00
分享

命名规范

不规范的存储过程和变量命名可能会对系统使用产生负面影响。

  • 存储过程、变量以及类型名称的最大长度不得超过63个字符。如果超出此限制,名称将被自动截断至63个字符。
    gaussdb=# CREATE SCHEMA best_practices_for_procedure;
    CREATE SCHEMA
    
    --创建长度为66字符的存储过程名,提示被截断为63个字符长度。
    gaussdb=# CREATE OR REPLACE PROCEDURE best_practices_for_procedure.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891011() AS
    BEGIN
        NULL;
    END;
    /
    NOTICE:  identifier "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891011" will be truncated to "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891"
    CREATE PROCEDURE
    
    --创建长度为66字符的变量名,提示被截断为63个字符长度。
    gaussdb=# CREATE OR REPLACE PROCEDURE best_practices_for_procedure.proc1(abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891011 int) as
    BEGIN
        NULL;
    END;
    /
    NOTICE:  identifier "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891011" will be truncated to "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891"
    CREATE PROCEDURE
    
    gaussdb=# DROP SCHEMA best_practices_for_procedure CASCADE;
    NOTICE:  drop cascades to 2 other objects
    DETAIL:  drop cascades to function best_practices_for_procedure.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01234567891()
    drop cascades to function best_practices_for_procedure.proc1(integer)
    DROP SCHEMA
  • 在创建存储过程时,避免在不同变量作用域内使用相同名称的变量和类型,变量作用域的具体内容请参见《开发指南》中“存储过程 > 基本语句 > 定义变量”章节中“变量作用域”。在不同变量作用域内使用相同名称的变量和类型,可能会降低存储过程的可读性,并增加其维护难度。
    gaussdb=# CREATE SCHEMA best_practices_for_procedure;
    CREATE SCHEMA
    
    --创建存储过程,在不同变量作用域中创建相同变量名,并赋值。
    gaussdb=# CREATE OR REPLACE PROCEDURE best_practices_for_procedure.proc1() AS
        name varchar2(10) := 'outer';
        age int := 2025;
    BEGIN
        DECLARE
            name varchar2(10) := 'inner'; --仅做示例,不推荐使用。
            age int := 2024; --仅做示例,不推荐使用。
        BEGIN
            dbe_output.print_line('inner name =' || name);
            dbe_output.print_line('inner age =' || age);
        END;
        dbe_output.print_line('outer name =' || name);
        dbe_output.print_line('outer age =' || age);
    END;
    /
    CREATE PROCEDURE
    
    --执行存储过程,相同变量名在不同作用域中其实为不同变量。
    gaussdb=# CALL best_practices_for_procedure.proc1();
    inner name =inner
    inner age =2024
    outer name =outer
    outer age =2025
     proc1
    -------
    
    (1 row)
    
    gaussdb=# DROP SCHEMA best_practices_for_procedure cascade;
    NOTICE:  drop cascades to function best_practices_for_procedure.proc1()
    DROP SCHEMA
  • 避免在存储过程的名称、内部变量名和数据类型名中使用SQL关键字,以确保在所有场景下都能正常运行。

    gaussdb=# CREATE SCHEMA best_practices_for_procedure;
    CREATE SCHEMA
    
    gaussdb=# 
    CREATE OR REPLACE PROCEDURE best_practices_for_procedure."as"() AS --仅做示例,不推荐使用。
    BEGIN
        NULL;
    END;
    /
    CREATE PROCEDURE
    
    --直接调用会报错。
    gaussdb=# CALL as();
    ERROR:  syntax error at or near "as"
    LINE 1: call as();
                 ^
    gaussdb=# CALL best_practices_for_procedure."as"();
     as
    ----
    
    (1 row)
    
    gaussdb=# DROP SCHEMA best_practices_for_procedure CASCADE;
    NOTICE:  drop cascades to function best_practices_for_procedure."as"()
    DROP SCHEMA
  • 创建存储过程时,请勿与系统函数同名,以避免混淆。如果必须使用相同名称,请在调用时明确指定SCHEMA。

    gaussdb=# CREATE SCHEMA best_practices_for_procedure;
    CREATE SCHEMA
    
    --在schema下创建和系统函数abs重名的abs函数。仅做示例,不推荐使用。
    gaussdb=# 
    CREATE OR REPLACE FUNCTION best_practices_for_procedure.abs(a int) RETURN int AS
    BEGIN
        dbe_output.print_line('my abs funciton.');
        RETURN abs(a);
    END;
    /
    CREATE FUNCTION
    
    --调用存储过程,若不加Schema则会调用系统函数abs。
    gaussdb=# CALL abs(-1);
     abs
    -----
       1
    (1 row)
    
    --建议使用时添加Schema。
    gaussdb=# CALL best_practices_for_procedure.abs(-1);
    my abs funciton.
     abs
    -----
       1
    (1 row)
    
    gaussdb=# DROP SCHEMA best_practices_for_procedure CASCADE;
    NOTICE:  drop cascades to function best_practices_for_procedure.abs(integer)
    DROP SCHEMA

相关文档