
# ALTER PACKAGE
#### 功能描述
修改PACKAGE的属性或重编译包。
#### 注意事项
- 目前仅支持ALTER PACKAGE OWNER功能，系统管理员默认拥有该权限，有以下权限约束：
  - 当前用户必须是该package的所有者或者系统管理员，且该用户是新所有者角色的成员。
   
- 当打开三权分立时，即使是系统管理员，也必须拥有用户组权限才能修改package的owner，DEFINER类型package不允许修改所有者。
- 只有初始化用户才能修改package的owner为初始化用户。
- 当关闭三权分立时，仅系统管理员以上权限可以修改package所有者，但不允许修改所有者为运维管理员。
- 不允许系统管理员将DEFINER类型的package的所有者改为初始用户或运维管理员。
 
#### 语法格式
- 修改package的所有者。
  ```
  ALTER PACKAGE package_name OWNER TO new_owner;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526897132.png "点击放大")
  

- 重编译包。
  ```
  ALTER PACKAGE package_name COMPILE [PACKAGE | BODY | SPECIFICATION];
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558056979.png "点击放大")
  
 
#### 参数说明
- **package_name**
  要修改的package名称。
  取值范围：已存在的package名，仅支持修改单个package。
  
- **new_owner**
  package的新所有者。要修改函数的所有者，新所有者必须拥有该package所属模式的CREATE权限。
  取值范围：已存在的用户角色。
  
 
#### 示例
- 修改PACKAGE的所有者。
  ```
  --创建数据库。
  gaussdb=# CREATE DATABASE test DBCOMPATIBILITY 'ORA';
  gaussdb=# \c test
  --创建PACKAGE。
  test=# CREATE OR REPLACE PACKAGE test_pkg AS
      pkg_var int := 1;
      PROCEDURE test_pkg_proc(var int);
  END test_pkg;
  /
  test=# CREATE OR REPLACE PACKAGE BODY test_pkg AS
      PROCEDURE test_pkg_proc(var int) AS
      BEGIN
          pkg_var := 1;
      END;
  END test_pkg;
  /
  --创建用户。
  test=# CREATE ROLE test PASSWORD '********';
  --修改包的所有者。
  test=# ALTER PACKAGE test_pkg OWNER TO test;
  --查询test_pkg的所有者。
  test=# SELECT t1.pkgname,t2.rolname FROM gs_package t1, gs_roles t2 WHERE t1.pkgname = 'test_pkg' AND t1.pkgowner = t2.oid;
   pkgname  | rolname 
  ----------+---------
   test_pkg | test
  (1 row)
  --删除。
  test=# DROP PACKAGE test_pkg;
  test=# DROP ROLE test;
  --切换至默认数据库（根据实际情况修改数据库名）。
  test=# \c postgres
  gaussdb=# DROP DATABASE test;
  ```
  
 
#### 相关链接
[CREATE PACKAGE](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0556.html#ZH-CN_TOPIC_0000002527826208)，[DROP PACKAGE](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0606.html#ZH-CN_TOPIC_0000002527986178)
