
# 失效重编译特性函数
- gs_set_object_invalid()/gs_set_object_invalid(schema, objname, objtype) 描述：将PACKAGE和FUNCTION在pg_object中的状态置为false，同时级联将依赖PACKAGE和FUNCTION的对象状态置为false。调用该函数的用户需要具有SYSADMIN权限。
  参数：该函数为重载函数。当无入参时，将当前DATABASE内的PACKAGE和FUNCTION对象置为失效。当指定schema、objname、objtype三个参数时可将当前DATABASE内的PACKAGE和FUNCTION对象在pg_object中的状态置为false。其中：schema为对象所属的schema名称；objname为对象名称；objtype为对象类型，对象为package类型时值为"package"，对象为函数或存储过程时值为"function"。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 需要将PACKAGE和FUNCTION和依赖PACKAGE和FUNCTION的对象状态置为失效时可以使用该函数。
  
  - 仅系统管理员可以调用函数。
   
  示例：
  该函数不返回失效结果，可通过pg_object系统表查询失效结果，对象有效时查找到对应的valid状态为true，对象失效后对应的valid状态为false。
  gs_set_plsql_invalid所属的Schema为pg_catalog，但不指定Schema也可调用该函数。
  ```
  -- 创建一个包pkg1，pkg2和函数f3，查询pg_object信息，状态为valid。
  SET enable_force_create_obj=on;
  SET
  SET ddl_invalid_mode=invalid;
  SET
  CREATE SCHEMA testInvalidate;
  CREATE SCHEMA
  SET CURRENT_SCHEMA TO testInvalidate;
  SET
  CREATE OR REPLACE PACKAGE pkg1 AS
  var1 VARCHAR;
  FUNCTION f1() RETURN VARCHAR;
  END pkg1;
  /
  CREATE PACKAGE
  CREATE OR REPLACE PACKAGE BODY pkg1 AS
  FUNCTION f1() RETURN VARCHAR
  IS
  BEGIN
  var1 := '2';
  RETURN var1;
  END;
  END pkg1;
  /
  CREATE PACKAGE BODY
  CREATE OR REPLACE PACKAGE pkg2 AS
  var1 pkg1.var1%TYPE;
  FUNCTION f2() RETURN VARCHAR;
  END pkg2;
  /
  CREATE PACKAGE
  CREATE OR REPLACE PACKAGE BODY pkg2 AS
  FUNCTION f2() RETURN VARCHAR
  IS
  BEGIN
  var1 := '2';
  RETURN var1;
  END;
  END pkg2;
  /
  CREATE PACKAGE BODY
  CREATE OR REPLACE FUNCTION f3() RETURN VARCHAR
  IS
  DECLARE
  var2 VARCHAR := 'li2';
  BEGIN
  var2='22';
  RETURN var2;
  END
  /
  CREATE FUNCTION
  SELECT pkg1.f1();
   f1 
  ----
   2
  (1 row)
  SELECT pkg2.f2();
   f2 
  ----
   2
  (1 row)
  SELECT f3();
   f3 
  ----
   22
  (1 row)
  -- 调用函数，指定schema、函数名、类型即可将pkg1和pkg2失效，再次查询pg_object，pkg1和pkg2对应的valid为false。
  SELECT gs_set_object_invalid('testinvalidate','pkg1','package');
   set_object_invalid 
  -------------------------
  (1 row)
  -- 如果要失效function，参数如下所示，查询pg_object，f3对应的valid为false。
  SELECT gs_set_object_invalid('testinvalidate','f3','function');
   set_object_invalid 
  -------------------------
  (1 row)
  -- 调用时没有入参，则将失效所有缓存对象。
  SELECT gs_set_object_invalid();
   set_object_invalid 
  -------------------------
  (1 row)
  ```
  
 
