
# DROP FUNCTION
#### 功能描述
删除一个已存在的函数。
#### 注意事项
- 如果函数中涉及对临时表的相关操作，则无法使用DROP FUNCTION删除函数。
- 只有函数的所有者或者被授予了函数DROP权限的用户才能执行DROP FUNCTION命令，系统管理员默认拥有该权限。
- 仅初始用户有权对初始用户的函数进行DROP操作。
 
#### 语法格式
```
DROP FUNCTION [ IF EXISTS ] function_name 
[ ( [ {[ argname ] [ argmode ] argtype} [, ...] ] ) [ CASCADE | RESTRICT ] ];
```
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002527059426.png "点击放大")
#### 参数说明
- **IF EXISTS**
  IF EXISTS表示如果函数存在则执行删除操作，函数不存在也不会报错，只是发出一个notice。
  
- **function_name**
  要删除的函数名称。
  取值范围：已存在的函数名。
  
- **argmode**
  函数参数的模式。
  
- **argname**
  函数参数的名称。
  
- **argtype**
  函数参数的类型
  
- **CASCADE \| RESTRICT**
  - CASCADE：级联删除依赖于函数的对象 。
  
  - RESTRICT：如果有任何依赖对象存在，则拒绝删除该函数（缺省行为）。
   
 
#### 示例
- 删除函数可省略参数列表
  ```
  --创建函数。
  gaussdb=# CREATE FUNCTION func_test(varchar) RETURN VARCHAR AS
  BEGIN 
      RETURN $1||_'test';
  END;
  /
  --删除函数。
  gaussdb=# DROP FUNCTION func_test;
  ```
  
- 删除存在同名的函数
  如果存在同名函数，删除时需加上参数列表，否则报错。
  ```
  --创建函数。
  gaussdb=# CREATE FUNCTION func_add(int) RETURNS int AS $$
  BEGIN 
      RETURN $1+10;
  END;
  $$ LANGUAGE PLPGSQL;
  --重载函数func_add。
  gaussdb=# CREATE FUNCTION func_add(int,int) RETURNS int AS $$
  BEGIN 
      RETURN $1+$2;
  END;
  $$ LANGUAGE PLPGSQL;
  --删除函数。
  gaussdb=# DROP FUNCTION func_add(int);
  gaussdb=# DROP FUNCTION func_add(int,int);
  ```
  
 
#### 相关链接
[ALTER FUNCTION](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0487.html#ZH-CN_TOPIC_0000002527828272)，[CREATE FUNCTION](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0548.html#ZH-CN_TOPIC_0000002559108019)
