# DROP FUNCTION
#### 功能描述
从数据库中删除一个已存在的函数。
#### 注意事项
- 如果函数中涉及对临时表的相关操作，则无法使用该操作进行删除。
- 仅函数的所有者或者被授予了函数DROP权限的用户可以执行该操作，系统管理员默认拥有该权限。
- 仅初始用户可以对初始用户的函数进行删除操作。
 
#### 语法格式
```
DROP FUNCTION [ IF EXISTS ] function_name 
[ ( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) [ CASCADE | RESTRICT ] ];
```
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002764309286.png "点击放大")
#### 参数说明
- **IF EXISTS**
  判断指定的函数是否存在。
  - 如果指定的函数存在，则删除成功。
  
  - 如果指定的函数不存在，不会进行删除操作，仅产生一个NOTICE提示，用于告知指定的函数不存在。
   
- **function_name**
  要删除的函数名称。
  取值范围：已存在的函数名。
  
- **argmode**
  函数参数的模式。
  
- **argname**
  函数参数的名称。
  
- **argtype**
  函数参数的类型。
  
- **CASCADE \| RESTRICT**
  可选，是否级联删除依赖于该函数的对象。未指定时，默认为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/distributed-ref-v10-gaussdb/gaussdb-08-0190.html)，[CREATE FUNCTION](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0249.html)
