
# 命名规范
不规范的存储过程和变量命名可能会对系统使用产生负面影响。
- 存储过程、变量以及类型名称的最大长度不得超过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 function.');
      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 function.
   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
  ```
  
 
