
# 函数/存储过程设计规范
- 【规则】禁止使用存储过程、触发器等实现业务逻辑，应该将这些逻辑都放到业务服务器上处理，避免对数据库产生逻辑依赖。
- 【规则】业务的数据库升级脚本中，禁止使用存储过程实现升级逻辑。
- 【规则】仅创建对固定入参有固定返回值的函数，函数必须设为IMMUTABLE和SHIPPABLE类型。 目前数据库支持三种类型的函数，分别是IMMUTABLE、STABLE、VOLATILE。
  对于IMMUTABLE类型且设置为SHIPPABLE的函数，允许在DN上执行。在大部分场景下，该函数的执行效率较高。但是此类函数要求对于固定的入参得到固定的返回值，来保证函数在DN上执行的正确性。如果函数的结果依赖对数据表的扫描结果（例如获取某个表中列的max值）或依赖时间（例如获取当前时间），那么函数应设置为STABLE或者VOLATILE，且NOT SHIPPABLE，以保证函数执行的正确性。
  
 
