【Data Platform】/⤷ SQL, T-SQL

[2k] 시스템 오브젝트(System Function, Information Schema View)의 생성 및 활용

디비랑 2008. 9. 7. 00:44
  1. /**********************************************************************************************
    -- Title : [2k] 시스템 오브젝트(System Function, Information Schema View)의 생성 및 활용
    -- Reference : dba guide
    -- Key word : information schema view, sp_ms_upd_sysobj_category,
    --                 reconfigure with override 시스템 함수 시스템 프로시저 시스템프로시저
    **********************************************************************************************/
    /*
    -- System Function 생성하기
    */

    -- 시스템 테이블을 직접 수정할 수 있도록 설정합니다.
    EXEC sp_configure 'allow updates',1
    RECONFIGURE WITH OVERRIDE
    GO

    -- 함수는 master 데이터베이스에 생성하고,
    -- 소유자는 system_function_schema로 지정합니다.
    USE master
    GO

    CREATE FUNCTION system_function_schema.fn_greatest (@x bigint, @y bigint)
    RETURNS bigint
    AS
    BEGIN
        RETURN(CASE WHEN @x>@y THEN @x ELSE @y END)
    END
    GO

    CREATE FUNCTION system_function_schema.fn_least (@x bigint, @y bigint)
    RETURNS bigint
    AS
    BEGIN
        RETURN(CASE WHEN @x<@y THEN @x ELSE @y END)
    END
    GO

    -- 시스템 테이블을 직접 수정할 수 없도록 0으로 변경합니다. (반드시 수행 요망)
    EXEC sp_configure `allow updates`,0
    RECONFIGURE WITH OVERRIDE
    GO

    -- 생성한 시스템 함수는 모든 데이터베이스에서 호출 가능합니다.
    USE Northwind
    GO

    SELECT fn_greatest(989, 998), fn_least(989, 998)
    GO
     

    /*
    -- Information Schema View 생성하기
    */

    -- 사용자가 INFORMATION 스키마 뷰 생성하기
    USE master;
    GO

    -- 사용자의 시스템 테이블의 수정 허용
    EXEC sp_configure 'allow updates', 1;

    RECONFIGURE WITH OVERRIDE;
    GO

    -- ??
    EXEC sp_MS_upd_sysobj_category 1;
    GO

    -- 스키마 뷰 생성
    CREATE VIEW INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS
    AS
      SELECT db_name() as CONSTRAINT_CATALOG
      ,      user_name(c_obj.uid) as CONSTRAINT_SCHEMA
      ,      c_obj.name as CONSTRAINT_NAME
      ,      com.text as DEFAULT_CLAUSE
      FROM sysobjects c_obj, syscomments com
      WHERE c_obj.uid = user_id()
      AND c_obj.id = com.id
      AND c_obj.xtype = 'D'
    GO

    -- ??
    EXEC sp_MS_upd_sysobj_category 2;
    GO

    -- 사용자의 시스템 테이블 수정 불가
    EXEC sp_configure 'allow updates', 0;
    GO

    RECONFIGURE WITH OVERRIDE;
    GO

    -- 생성한 INFORMATION 스키마 뷰 활용하기
    USE pubs
    GO

    SELECT *
    FROM INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS
    GO