
# DROP FUNCTION
#### 功能描述
删除一个已存在的函数。
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
内部使用功能，不支持用户使用。
#### 注意事项
- 如果函数中涉及对临时表的相关操作，则无法使用DROP FUNCTION删除函数。
- 只有函数的所有者或者被授予了函数DROP权限的用户才能执行DROP FUNCTION命令，系统管理员默认拥有该权限。
 
#### 语法格式
```
DROP FUNCTION [ IF EXISTS ] function_name 
[ ( [ {[ argname ] [ argmode ] argtype} [, ...] ] ) [ CASCADE | RESTRICT ] ];
```
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/figure/zh-cn_image_0000002526893966.png "点击放大")
#### 参数说明
- **IF EXISTS**
  表示如果函数存在则执行删除操作，函数不存在也不会报错，只是产出一个NOTICE。
  
- **function_name**
  要删除的函数名称。
  取值范围：已存在的函数名。
  
- **argmode**
  函数参数的模式。
  
- **argname**
  函数参数的名称。
  
- **argtype**
  函数参数的类型
  
- **CASCADE \| RESTRICT**
  - CASCADE：级联删除依赖于函数的对象 。
  
  - RESTRICT：如果有任何依赖对象存在，则拒绝删除该函数（缺省行为）。
   
 
#### 示例
- 删除函数可省略参数列表
  ```
  --创建函数。
  m_db=# CREATE OR REPLACE FUNCTION func_add_sql(integer, integer) RETURNS bigint
  AS 'select $1 + $2;'
  LANGUAGE SQL
  IMMUTABLE
  SHIPPABLE
  STRICT
  AUTHID DEFINER
  not fenced
  COST 10000;
  /
  --删除函数。
  m_db=# DROP FUNCTION func_add_sql;
  ```
  
- 删除存在同名的函数
  如果存在同名函数，删除时需加上参数列表，否则报错。
  ```
  --创建函数。
  m_db=# CREATE OR REPLACE FUNCTION func_increment_plsql(i integer) RETURNS integer AS $$
  BEGIN
      RETURN i + 1;
  END;
  $$ LANGUAGE plpgsql;
  --重载函数func_add。
  m_db=# CREATE OR REPLACE FUNCTION func_add(int) RETURNS int AS $$
  BEGIN
      RETURN $1+10;
  END;
  $$ LANGUAGE PLPGSQL;
  --删除函数。
  m_db=# DROP FUNCTION func_add(int);
  m_db=# DROP FUNCTION func_add(int,int);
  ```
  
 
#### 相关链接
[CREATE FUNCTION](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-42-0548.html#ZH-CN_TOPIC_0000002527965416)
