Source Code
PROCEDURE: SETTINGS_READ_STRING
PROCEDURE: SETTINGS_READ_NUMBER
PROCEDURE: SETTINGS_READ_BOOL
PROCEDURE: SETTINGS_READ_DATE
PROCEDURE: SETTINGS_WRITE_STRING
PROCEDURE: SETTINGS_WRITE_NUMBER
PROCEDURE: SETTINGS_WRITE_BOOL
PROCEDURE: SETTINGS_WRITE_DATE
PROCEDURE: DB_TO_IANA_CHARSET
PROCEDURE: GETNEXTKEYS
PROCEDURE: GET_SAFETY_DATE
PROCEDURE: GLOBAL_TABLE_CHANGE
PROCEDURE: OPEN_TABLE_CHANGE
PROCEDURE: AUDIT_TAB_OPTIONS
PROCEDURE: AUDIT_PRM_USER
PROCEDURE: AUDIT_PROC_INFO
PROCEDURE: AUDIT_IDENTITY
PROCEDURE: AUDIT_DATA
PROCEDURE: AUDIT_ROW
PROCEDURE: GET_PRIMARY_KEY
PROCEDURE: CASCADE_DELETE_CHILD
PROCEDURE: CASCADE_DELETE
PROCEDURE: REFRDEL_CLEANUP
PROCEDURE: CLEANUP_LOGICAL_DELETES
PROCEDURE: SOURCE_VERSION
TRIGGER: TR_PROTECT_SPIDMAP
TRIGGER: PRMAUD_ACTVCODE
TRIGGER: PRMAUD_ACTVCODE
TRIGGER: PRMAUD_ACTVTYPE
TRIGGER: PRMAUD_ACTVTYPE
TRIGGER: PRMAUD_ADMIN_CONFIG
TRIGGER: PRMAUD_ADMIN_CONFIG
TRIGGER: PRMAUD_COSTTYPE
TRIGGER: PRMAUD_COSTTYPE
TRIGGER: PRMAUD_CURRTYPE
TRIGGER: PRMAUD_CURRTYPE
TRIGGER: PRMAUD_DOCCATG
TRIGGER: PRMAUD_DOCCATG
TRIGGER: PRMAUD_DOCUMENT
TRIGGER: PRMAUD_DOCUMENT
TRIGGER: PRMAUD_FACTCATG
TRIGGER: PRMAUD_FACTCATG
TRIGGER: PRMAUD_FACTOR
TRIGGER: PRMAUD_FACTOR
TRIGGER: PRMAUD_FACTVAL
TRIGGER: PRMAUD_FACTVAL
TRIGGER: PRMAUD_FILTPROP
TRIGGER: PRMAUD_FILTPROP
TRIGGER: PRMAUD_LINKWBS
TRIGGER: PRMAUD_LINKWBS
TRIGGER: PRMAUD_MEMOTYPE
TRIGGER: PRMAUD_MEMOTYPE
TRIGGER: PRMAUD_OBS
TRIGGER: PRMAUD_OBS
TRIGGER: PRMAUD_PHASE
TRIGGER: PRMAUD_PHASE
TRIGGER: PRMAUD_POBS
TRIGGER: PRMAUD_POBS
TRIGGER: PRMAUD_PREFER
TRIGGER: PRMAUD_PREFER
TRIGGER: PRMAUD_PROCGROUP
TRIGGER: PRMAUD_PROCGROUP
TRIGGER: PRMAUD_PROCITEM
TRIGGER: PRMAUD_PROCITEM
TRIGGER: PRMAUD_PROFILE
TRIGGER: PRMAUD_PROFILE
TRIGGER: PRMAUD_PROFPRIV
TRIGGER: PRMAUD_PROFPRIV
TRIGGER: PRMAUD_QUALITY
TRIGGER: PRMAUD_QUALITY
TRIGGER: PRMAUD_QUERYLIB
TRIGGER: PRMAUD_QUERYLIB
TRIGGER: PRMAUD_RCATTYPE
TRIGGER: PRMAUD_RCATTYPE
TRIGGER: PRMAUD_RCATVAL
TRIGGER: PRMAUD_RCATVAL
TRIGGER: PRMAUD_RISKCTRL
TRIGGER: PRMAUD_RISKCTRL
TRIGGER: PRMAUD_RISKTYPE
TRIGGER: PRMAUD_RISKTYPE
TRIGGER: PRMAUD_ROLES
TRIGGER: PRMAUD_ROLES
TRIGGER: PRMAUD_RPT
TRIGGER: PRMAUD_RPT
TRIGGER: PRMAUD_RPTGROUP
TRIGGER: PRMAUD_RPTGROUP
TRIGGER: PRMAUD_RSRC
TRIGGER: PRMAUD_RSRC
TRIGGER: PRMAUD_RSRCRCAT
TRIGGER: PRMAUD_RSRCRCAT
TRIGGER: PRMAUD_RSRCROLE
TRIGGER: PRMAUD_RSRCROLE
TRIGGER: PRMAUD_TASK
TRIGGER: PRMAUD_TASK
TRIGGER: PRMAUD_TASKACTV
TRIGGER: PRMAUD_TASKACTV
TRIGGER: PRMAUD_TASKDOC
TRIGGER: PRMAUD_TASKDOC
TRIGGER: PRMAUD_TASKMEMO
TRIGGER: PRMAUD_TASKMEMO
TRIGGER: PRMAUD_TASKPRED
TRIGGER: PRMAUD_TASKPRED
TRIGGER: PRMAUD_TASKPROC
TRIGGER: PRMAUD_TASKPROC
TRIGGER: PRMAUD_TASKQUAL
TRIGGER: PRMAUD_TASKQUAL
TRIGGER: PRMAUD_TASKRSRC
TRIGGER: PRMAUD_TASKRSRC
TRIGGER: PRMAUD_TASKUSE
TRIGGER: PRMAUD_TASKUSE
TRIGGER: PRMAUD_TCATTYPE
TRIGGER: PRMAUD_TCATTYPE
TRIGGER: PRMAUD_TCATVAL
TRIGGER: PRMAUD_TCATVAL
TRIGGER: PRMAUD_TEMPLATE
TRIGGER: PRMAUD_TEMPLATE
TRIGGER: PRMAUD_TMPLCOST
TRIGGER: PRMAUD_TMPLCOST
TRIGGER: PRMAUD_TMPLRISK
TRIGGER: PRMAUD_TMPLRISK
TRIGGER: PRMAUD_TMPLTCAT
TRIGGER: PRMAUD_TMPLTCAT
TRIGGER: PRMAUD_TMPLWBS
TRIGGER: PRMAUD_TMPLWBS
TRIGGER: PRMAUD_UDFCODE
TRIGGER: PRMAUD_UDFCODE
TRIGGER: PRMAUD_UDFTYPE
TRIGGER: PRMAUD_UDFTYPE
TRIGGER: PRMAUD_UDFVALUE
TRIGGER: PRMAUD_UDFVALUE
TRIGGER: PRMAUD_UMEASURE
TRIGGER: PRMAUD_UMEASURE
TRIGGER: PRMAUD_USERCOL
TRIGGER: PRMAUD_USERCOL
TRIGGER: PRMAUD_USERDATA
TRIGGER: PRMAUD_USERDATA
TRIGGER: PRMAUD_USERENG
TRIGGER: PRMAUD_USERENG
TRIGGER: PRMAUD_USERS
TRIGGER: PRMAUD_USERS
TRIGGER: PRMAUD_USERTMPL
TRIGGER: PRMAUD_USERTMPL
TRIGGER: PRMAUD_VIEWPROP
TRIGGER: PRMAUD_VIEWPROP
TRIGGER: PRMAUD_WBSMEMO
TRIGGER: PRMAUD_WBSMEMO
TRIGGER: PRMAUD_WBSSTEP
TRIGGER: PRMAUD_WBSSTEP
TRIGGER: RT_ACTVCODE
TRIGGER: RT_ACTVCODE
TRIGGER: RT_ACTVCODE_DEL
TRIGGER: RT_ACTVTYPE
TRIGGER: RT_ACTVTYPE
TRIGGER: RT_ACTVTYPE_DEL
TRIGGER: RT_ADMIN_CONFIG
TRIGGER: RT_ADMIN_CONFIG
TRIGGER: RT_ADMIN_CONFIG_DEL
TRIGGER: RT_COSTTYPE
TRIGGER: RT_COSTTYPE
TRIGGER: RT_COSTTYPE_DEL
TRIGGER: RT_CURRTYPE
TRIGGER: RT_CURRTYPE
TRIGGER: RT_CURRTYPE_DEL
TRIGGER: RT_DOCCATG
TRIGGER: RT_DOCCATG
TRIGGER: RT_DOCCATG_DEL
TRIGGER: RT_DOCUMENT
TRIGGER: RT_DOCUMENT
TRIGGER: RT_DOCUMENT_DEL
TRIGGER: RT_FACTCATG
TRIGGER: RT_FACTCATG
TRIGGER: RT_FACTCATG_DEL
TRIGGER: RT_FACTOR
TRIGGER: RT_FACTOR
TRIGGER: RT_FACTOR_DEL
TRIGGER: RT_FACTVAL
TRIGGER: RT_FACTVAL
TRIGGER: RT_FACTVAL_DEL
TRIGGER: RT_FILTPROP
TRIGGER: RT_FILTPROP
TRIGGER: RT_FILTPROP_DEL
TRIGGER: RT_LINKWBS
TRIGGER: RT_LINKWBS
TRIGGER: RT_LINKWBS_DEL
TRIGGER: RT_MEMOTYPE
TRIGGER: RT_MEMOTYPE
TRIGGER: RT_MEMOTYPE_DEL
TRIGGER: RT_OBS
TRIGGER: RT_OBS
TRIGGER: RT_OBS_DEL
TRIGGER: RT_PHASE
TRIGGER: RT_PHASE
TRIGGER: RT_PHASE_DEL
TRIGGER: RT_POBS
TRIGGER: RT_POBS
TRIGGER: RT_POBS_DEL
TRIGGER: RT_PREFER
TRIGGER: RT_PREFER
TRIGGER: RT_PREFER_DEL
TRIGGER: RT_PROCGROUP
TRIGGER: RT_PROCGROUP
TRIGGER: RT_PROCGROUP_DEL
TRIGGER: RT_PROCITEM
TRIGGER: RT_PROCITEM
TRIGGER: RT_PROCITEM_DEL
TRIGGER: RT_PROFILE
TRIGGER: RT_PROFILE
TRIGGER: RT_PROFILE_DEL
TRIGGER: RT_PROFPRIV
TRIGGER: RT_PROFPRIV
TRIGGER: RT_PROFPRIV_DEL
TRIGGER: RT_QUALITY
TRIGGER: RT_QUALITY
TRIGGER: RT_QUALITY_DEL
TRIGGER: RT_QUERYLIB
TRIGGER: RT_QUERYLIB
TRIGGER: RT_QUERYLIB_DEL
TRIGGER: RT_RCATTYPE
TRIGGER: RT_RCATTYPE
TRIGGER: RT_RCATTYPE_DEL
TRIGGER: RT_RCATVAL
TRIGGER: RT_RCATVAL
TRIGGER: RT_RCATVAL_DEL
TRIGGER: RT_RISKCTRL
TRIGGER: RT_RISKCTRL
TRIGGER: RT_RISKCTRL_DEL
TRIGGER: RT_RISKTYPE
TRIGGER: RT_RISKTYPE
TRIGGER: RT_RISKTYPE_DEL
TRIGGER: RT_ROLES
TRIGGER: RT_ROLES
TRIGGER: RT_ROLES_DEL
TRIGGER: RT_RPT
TRIGGER: RT_RPT
TRIGGER: RT_RPT_DEL
TRIGGER: RT_RPTGROUP
TRIGGER: RT_RPTGROUP
TRIGGER: RT_RPTGROUP_DEL
TRIGGER: RT_RSRC
TRIGGER: RT_RSRC
TRIGGER: RT_RSRC_DEL
TRIGGER: RT_RSRCRCAT
TRIGGER: RT_RSRCRCAT
TRIGGER: RT_RSRCRCAT_DEL
TRIGGER: RT_RSRCROLE
TRIGGER: RT_RSRCROLE
TRIGGER: RT_RSRCROLE_DEL
TRIGGER: RT_SETTINGS
TRIGGER: RT_SETTINGS
TRIGGER: RT_SETTINGS_DEL
TRIGGER: RT_TASK
TRIGGER: RT_TASK
TRIGGER: RT_TASK_DEL
TRIGGER: RT_TASKACTV
TRIGGER: RT_TASKACTV
TRIGGER: RT_TASKACTV_DEL
TRIGGER: RT_TASKDOC
TRIGGER: RT_TASKDOC
TRIGGER: RT_TASKDOC_DEL
TRIGGER: RT_TASKMEMO
TRIGGER: RT_TASKMEMO
TRIGGER: RT_TASKMEMO_DEL
TRIGGER: RT_TASKPRED
TRIGGER: RT_TASKPRED
TRIGGER: RT_TASKPRED_DEL
TRIGGER: RT_TASKPROC
TRIGGER: RT_TASKPROC
TRIGGER: RT_TASKPROC_DEL
TRIGGER: RT_TASKQUAL
TRIGGER: RT_TASKQUAL
TRIGGER: RT_TASKQUAL_DEL
TRIGGER: RT_TASKRSRC
TRIGGER: RT_TASKRSRC
TRIGGER: RT_TASKRSRC_DEL
TRIGGER: RT_TASKUSE
TRIGGER: RT_TASKUSE
TRIGGER: RT_TASKUSE_DEL
TRIGGER: RT_TCATTYPE
TRIGGER: RT_TCATTYPE
TRIGGER: RT_TCATTYPE_DEL
TRIGGER: RT_TCATVAL
TRIGGER: RT_TCATVAL
TRIGGER: RT_TCATVAL_DEL
TRIGGER: RT_TEMPLATE
TRIGGER: RT_TEMPLATE
TRIGGER: RT_TEMPLATE_DEL
TRIGGER: RT_TMPLCOST
TRIGGER: RT_TMPLCOST
TRIGGER: RT_TMPLCOST_DEL
TRIGGER: RT_TMPLRISK
TRIGGER: RT_TMPLRISK
TRIGGER: RT_TMPLRISK_DEL
TRIGGER: RT_TMPLTCAT
TRIGGER: RT_TMPLTCAT
TRIGGER: RT_TMPLTCAT_DEL
TRIGGER: RT_TMPLWBS
TRIGGER: RT_TMPLWBS
TRIGGER: RT_TMPLWBS_DEL
TRIGGER: RT_UDFCODE
TRIGGER: RT_UDFCODE
TRIGGER: RT_UDFCODE_DEL
TRIGGER: RT_UDFTYPE
TRIGGER: RT_UDFTYPE
TRIGGER: RT_UDFTYPE_DEL
TRIGGER: RT_UDFVALUE
TRIGGER: RT_UDFVALUE
TRIGGER: RT_UDFVALUE_DEL
TRIGGER: RT_UMEASURE
TRIGGER: RT_UMEASURE
TRIGGER: RT_UMEASURE_DEL
TRIGGER: RT_USERCOL
TRIGGER: RT_USERCOL
TRIGGER: RT_USERCOL_DEL
TRIGGER: RT_USERDATA
TRIGGER: RT_USERDATA
TRIGGER: RT_USERDATA_DEL
TRIGGER: RT_USERENG
TRIGGER: RT_USERENG
TRIGGER: RT_USERENG_DEL
TRIGGER: RT_USERS
TRIGGER: RT_USERS
TRIGGER: RT_USERS_DEL
TRIGGER: RT_USERTMPL
TRIGGER: RT_USERTMPL
TRIGGER: RT_USERTMPL_DEL
TRIGGER: RT_USESSION
TRIGGER: RT_USESSION
TRIGGER: RT_USESSION_DEL
TRIGGER: RT_VIEWPROP
TRIGGER: RT_VIEWPROP
TRIGGER: RT_VIEWPROP_DEL
TRIGGER: RT_WBSMEMO
TRIGGER: RT_WBSMEMO
TRIGGER: RT_WBSMEMO_DEL
TRIGGER: RT_WBSSTEP
TRIGGER: RT_WBSSTEP
TRIGGER: RT_WBSSTEP_DEL
IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_STRING' and type='P')
  DROP PROCEDURE SETTINGS_READ_STRING

SETTINGS_READ_STRING
CREATE PROCEDURE settings_read_string
(@result varchar(4000) OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value varchar(4000) = ''
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  if @puser_id is null 
    select @result = setting_value
    from settings
    where namespace = @pnamespace
    and setting_name = @pname;
  else
    select @result = setting_value
    from settings
    where namespace = @pnamespace
    and setting_name = @pname
    and user_id = @puser_id;

  if @@ROWCOUNT = 0 
     set @result = @default_value

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_NUMBER' and type='P')
  DROP PROCEDURE SETTINGS_READ_NUMBER

SETTINGS_READ_NUMBER
CREATE PROCEDURE settings_read_number
(@result decimal(20,6) OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value decimal(20,6) = null
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @sresult varchar(255), @sdefault varchar(255)
  set @sdefault = str(@default_value)
  exec settings_read_string @sresult OUTPUT,@pnamespace,@pname,@sdefault,@puser_id 
  set @result = cast(@sresult AS decimal(20,6))

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_BOOL' and type='P')
  DROP PROCEDURE SETTINGS_READ_BOOL

SETTINGS_READ_BOOL
CREATE PROCEDURE settings_read_bool
(@result int OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value int = 0
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @sresult varchar(255), @sdefault varchar(255)
  if @default_value > 0 
    set @sdefault = 'TRUE'
  else
    set @sdefault = 'FALSE'
    
  exec settings_read_string @sresult OUTPUT,@pnamespace,@pname,@sdefault,@puser_id 
  set @sresult = upper(@sresult)
  if @sresult = 'TRUE' or @sresult = 'T' 
     or @sresult = '1' or @sresult = 'Y'
     or @sresult = 'YES' or @sresult = 'ON'
    set @result = 1
  else
    set @result = 0


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_DATE' and type='P')
  DROP PROCEDURE SETTINGS_READ_DATE

SETTINGS_READ_DATE
CREATE PROCEDURE settings_read_date
(@result datetime OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value datetime = null
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @sresult varchar(255), @sdefault varchar(255)
  set @sdefault =  convert(varchar(30),@default_value,120)
  exec settings_read_string @sresult OUTPUT,@pnamespace,@pname,@sdefault,@puser_id 
  set @result = convert(datetime,@sresult,120)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_STRING' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_STRING

SETTINGS_WRITE_STRING
CREATE PROCEDURE settings_write_string
(@pvalue varchar(4000) , @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  if @puser_id is null
    update settings 
    set setting_value = @pvalue
    where namespace = @pnamespace 
    and setting_name = @pname;
  else
    update settings 
    set setting_value = @pvalue
    where namespace = @pnamespace 
    and setting_name = @pname
    and user_id = @puser_id;

  if @@ROWCOUNT = 0 
    insert into settings (namespace,setting_name,setting_value,user_id)
    values(@pnamespace,@pname,@pvalue,@puser_id);

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_NUMBER' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_NUMBER

SETTINGS_WRITE_NUMBER
CREATE PROCEDURE settings_write_number
(@pvalue decimal(20,6) , @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @nstr varchar(1000)
  set @nstr = ltrim(str(@pvalue))
  exec settings_write_string @nstr,@pnamespace,@pname,@puser_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_BOOL' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_BOOL

SETTINGS_WRITE_BOOL
CREATE PROCEDURE settings_write_bool
(@pvalue int,  @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @boolstr varchar(5)
  if @pvalue > 0 
    set @boolstr = 'TRUE'
  else
    set @boolstr = 'FALSE'
  exec settings_write_string @boolstr,@pnamespace,@pname,@puser_id


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_DATE' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_DATE

SETTINGS_WRITE_DATE
CREATE PROCEDURE settings_write_date
(@pvalue datetime, @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @datestr varchar(30);
  set @datestr =  convert(varchar(30),@pvalue,120)
  exec settings_write_string @datestr,@pnamespace,@pname,@puser_id


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'DB_TO_IANA_CHARSET' and type='P')
  DROP PROCEDURE DB_TO_IANA_CHARSET

DB_TO_IANA_CHARSET
create procedure db_to_iana_charset ( @pcharset varchar(100) OUT )
as
  declare @servercollation sysname
  declare @verstr varchar(4), @dbname sysname, @sql nvarchar(1000)
  
  select @verstr = substring(replace(@@version,' ',''),19,4)

  select @dbname=name from master..sysdatabases 
  where dbid = (select dbid from master..sysprocesses where spid = @@spid)

  set @pcharset = 'ISO-8859-1'
    set @sql = N'select @sc = upper(convert(sysname, databasepropertyex('''+@dbname+''',''collation'')))';
    EXEC sp_executesql  @sql, N'@sc sysname OUTPUT', @servercollation OUT;

    print @servercollation  
    if @servercollation like 'CYRILLIC%'
      set @pcharset = 'windows-1251'
    else if @servercollation like 'JAPANESE%'
      set @pcharset = 'Shift_JIS'
    else if @servercollation like 'CHINESE_PRC%'
      set @pcharset = 'GBK'
    else if @servercollation like 'CHINESE_TAIWAN%'
      set @pcharset = 'BIG5'
    else if @servercollation like 'ARABIC%'
      set @pcharset = 'ISO-8859-6'
    else if @servercollation like 'HEBREW%'
      set @pcharset = 'ISO-8859-8'
    else if @servercollation like 'TURKISH%'
      set @pcharset = 'windows-1254'
    else if @servercollation like 'GREEK%'
      set @pcharset = 'ISO-8859-7'
    else if @servercollation like 'ESTONIAN%' or
            @servercollation like 'LATVIAN%' or
            @servercollation like 'LITHUANIAN%' 
      set @pcharset = 'windows-1257'
    else if @servercollation like 'CZECH%' or
            @servercollation like 'ALBANIAN%' or
            @servercollation like 'CROATIAN%' or
            @servercollation like 'HUNGARIAN%' or
            @servercollation like 'POLISH%' or
            @servercollation like 'ROMANIAN%' or
            @servercollation like 'SLOVAK%' or
            @servercollation like 'SLOVENIAN%'
      set @pcharset = 'windows-1250'
    else if @servercollation like 'VIETNAMESE%'
      set @pcharset = 'windows-1258'


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GETNEXTKEYS' and type='P')
  DROP PROCEDURE GETNEXTKEYS

GETNEXTKEYS
CREATE PROCEDURE getnextkeys (
	@tabcol varchar(50) = 'TableColumn%',
        @nkeys integer = 'NumKeys%',
        @startkey integer OUTPUT
	 )
AS 
  BEGIN TRAN
    UPDATE nextkey SET key_seq_num = (key_seq_num + @nkeys) WHERE key_name = @tabcol
    SELECT @startkey=key_seq_num-@nkeys FROM nextkey WHERE key_name = @tabcol
  COMMIT

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_SAFETY_DATE' and type='P')
  DROP PROCEDURE GET_SAFETY_DATE

GET_SAFETY_DATE
create procedure get_safety_date
	@psafety_date	datetime OUTPUT,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
declare @currtime datetime
set @currtime=getDate()
set @pret_val = 0
select @psafety_date = min(login_time)  from master..sysprocesses where dbid in (
select dbid from master..sysprocesses
where spid = @@spid)
and open_tran > 0

if @psafety_date is null 
  set @psafety_date = @currtime

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GLOBAL_TABLE_CHANGE' and type='P')
  DROP PROCEDURE GLOBAL_TABLE_CHANGE

GLOBAL_TABLE_CHANGE
create procedure global_table_change
	@pTS		datetime,
	@pchange_bits	varchar(255) OUTPUT,
	@psafety_date	datetime OUTPUT,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
  declare @vCnt tinyint;
  set @pret_val = -1
  exec get_safety_date  @psafety_date OUTPUT, @pret_val OUTPUT,@pret_msg OUTPUT
  set @pchange_bits = '000000000000000000000000000000000000000000000000000000000000000000000'
        select @vCnt=count(*) where exists (select * from ACTVCODE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,1,1,'1') 
        select @vCnt=count(*) where exists (select * from ACTVTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,2,1,'1') 
        select @vCnt=count(*) where exists (select * from COSTTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,4,1,'1') 
        select @vCnt=count(*) where exists (select * from CURRTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,5,1,'1') 
        select @vCnt=count(*) where exists (select * from DOCCATG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,6,1,'1') 
        select @vCnt=count(*) where exists (select * from DOCUMENT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,7,1,'1') 
        select @vCnt=count(*) where exists (select * from FACTCATG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,8,1,'1') 
        select @vCnt=count(*) where exists (select * from FACTOR where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,9,1,'1') 
        select @vCnt=count(*) where exists (select * from FACTVAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,10,1,'1') 
        select @vCnt=count(*) where exists (select * from FILTPROP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,11,1,'1') 
        select @vCnt=count(*) where exists (select * from LINKWBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,12,1,'1') 
        select @vCnt=count(*) where exists (select * from MEMOTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,13,1,'1') 
        select @vCnt=count(*) where exists (select * from OBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,15,1,'1') 
        select @vCnt=count(*) where exists (select * from PHASE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,16,1,'1') 
        select @vCnt=count(*) where exists (select * from POBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,67,1,'1') 
        select @vCnt=count(*) where exists (select * from PREFER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,17,1,'1') 
        select @vCnt=count(*) where exists (select * from PROCGROUP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,41,1,'1') 
        select @vCnt=count(*) where exists (select * from PROCITEM where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,65,1,'1') 
        select @vCnt=count(*) where exists (select * from PROFILE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,18,1,'1') 
        select @vCnt=count(*) where exists (select * from PROFPRIV where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,19,1,'1') 
        select @vCnt=count(*) where exists (select * from QUALITY where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,21,1,'1') 
        select @vCnt=count(*) where exists (select * from RCATTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,22,1,'1') 
        select @vCnt=count(*) where exists (select * from RCATVAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,23,1,'1') 
        select @vCnt=count(*) where exists (select * from RISKTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,25,1,'1') 
        select @vCnt=count(*) where exists (select * from ROLES where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,26,1,'1') 
        select @vCnt=count(*) where exists (select * from RPT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,27,1,'1') 
        select @vCnt=count(*) where exists (select * from RPTGROUP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,28,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRC where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,29,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCRCAT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,30,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCROLE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,31,1,'1') 
        select @vCnt=count(*) where exists (select * from TASKMEMO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,35,1,'1') 
        select @vCnt=count(*) where exists (select * from TASKPROC where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,37,1,'1') 
        select @vCnt=count(*) where exists (select * from TASKQUAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,38,1,'1') 
        select @vCnt=count(*) where exists (select * from TCATTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,42,1,'1') 
        select @vCnt=count(*) where exists (select * from TCATVAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,43,1,'1') 
        select @vCnt=count(*) where exists (select * from TEMPLATE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,44,1,'1') 
        select @vCnt=count(*) where exists (select * from UDFCODE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,62,1,'1') 
        select @vCnt=count(*) where exists (select * from UDFTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,50,1,'1') 
        select @vCnt=count(*) where exists (select * from UDFVALUE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,51,1,'1') 
        select @vCnt=count(*) where exists (select * from UMEASURE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,52,1,'1') 
        select @vCnt=count(*) where exists (select * from USERCOL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,53,1,'1') 
        select @vCnt=count(*) where exists (select * from USERDATA where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,54,1,'1') 
        select @vCnt=count(*) where exists (select * from USERENG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,55,1,'1') 
        select @vCnt=count(*) where exists (select * from USERS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,56,1,'1') 
        select @vCnt=count(*) where exists (select * from VIEWPROP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,59,1,'1') 
  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPEN_TABLE_CHANGE' and type='P')
  DROP PROCEDURE OPEN_TABLE_CHANGE

OPEN_TABLE_CHANGE
create procedure open_table_change
	@pTS		datetime,
	@psession_id integer,
	@pload_status varchar(1),
	@pchange_bits	varchar(255) OUTPUT,
	@psafety_date	datetime OUTPUT,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
  declare @vCnt tinyint;
  set @pret_val = -1
  exec get_safety_date  @psafety_date OUTPUT, @pret_val OUTPUT,@pret_msg OUTPUT
  set @pchange_bits = '000000000000000000000000000000000000000000000000000000000000000000000'
	select @vCnt=count(*) where exists ( select * from RISKCTRL t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,24,1,'1')
	select @vCnt=count(*) where exists ( select * from TASK t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,32,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKACTV t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,33,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKDOC t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,34,1,'1')
	select @vCnt=count(*) where  exists ( select * from TASKPRED t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );  
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,36,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKPRED t, TMPLSHAR p where update_date > @pTS 
			and t.pred_template_id = p.template_id and p.session_id = @psession_id  );
  if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,36,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKRSRC t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,39,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKUSE t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,40,1,'1')
	select @vCnt=count(*) where exists ( select * from TEMPLATE t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,44,1,'1')
	select @vCnt=count(*) where exists ( select * from TMPLCOST t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,45,1,'1')
	select @vCnt=count(*) where exists ( select * from TMPLRISK t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,46,1,'1')
	select @vCnt=count(*) where exists ( select * from TMPLTCAT t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,48,1,'1')
	select @vCnt=count(*) where exists ( select * from TMPLWBS t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,49,1,'1')
	select @vCnt=count(*) where exists ( select * from UDFVALUE t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,51,1,'1')
	select @vCnt=count(*) where exists ( select * from USERTMPL t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,57,1,'1')
	select @vCnt=count(*) where exists ( select * from WBSMEMO t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,60,1,'1')
	select @vCnt=count(*) where exists ( select * from WBSSTEP t, TMPLSHAR p where update_date > @pTS 
			and t.template_id = p.template_id and p.session_id = @psession_id  );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,61,1,'1')
         --Run delayed loading procedure if this is PM
		set @pret_val = 0
  

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_TAB_OPTIONS' and type='P')
  DROP PROCEDURE AUDIT_TAB_OPTIONS

AUDIT_TAB_OPTIONS
CREATE PROCEDURE audit_tab_options
(@ptable_name varchar(30), @paudit int OUTPUT
, @pins_audit int=0 OUTPUT, @pupd_audit int=0 OUTPUT, @pdel_audit int=0 OUTPUT
, @pcolumn_audit varchar(255)='' OUTPUT)
as
  set nocount on
  declare @audit_str varchar(4), @namespace varchar(255)
  exec settings_read_bool @paudit OUTPUT,'database.audit','Enabled',0
  set @namespace = 'database.audit.' + @ptable_name
  exec settings_read_string @audit_str OUTPUT,@namespace,'Options','111'
  set @pins_audit = substring(@audit_str,1,1)
  set @pupd_audit = substring(@audit_str,2,1)
  set @pdel_audit = substring(@audit_str,3,1)
if @pins_audit=0 and @pupd_audit=0 and @pdel_audit=0 
   set @paudit=0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_PRM_USER' and type='P')
  DROP PROCEDURE AUDIT_PRM_USER

AUDIT_PRM_USER
CREATE PROCEDURE audit_prm_user
( @psession_id int OUTPUT, @pprm_user_name varchar(32) OUTPUT
, @papp_name varchar(25) OUTPUT)
as
  set nocount on
  select @psession_id=session_id, @pprm_user_name=user_name, @papp_name=app_name
  from users u , usession us
  where u.user_id = us.user_id
  and us.spid = @@spid
  and u.delete_session_id is null and us.delete_session_id is null
  if @@ROWCOUNT = 0 
  begin	
    set @psession_id = 0

    select @pprm_user_name=user_name, @papp_name=app_name
    from spidmap
    where spid=@@spid
    if @@ROWCOUNT = 0 
    BEGIN
      set @pprm_user_name = 'NotPrmUser'
      set @papp_name = ''
    END 
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_PROC_INFO' and type='P')
  DROP PROCEDURE AUDIT_PROC_INFO

AUDIT_PROC_INFO
CREATE PROCEDURE audit_proc_info
( @pprogram varchar(255) OUTPUT, @phostname varchar(255) OUTPUT
, @pnetaddress varchar(24) OUTPUT, @prdbms_user varchar(30) OUTPUT
, @pos_user varchar(32) OUTPUT )
as
  select @pprogram=program_name , @phostname=hostname
  , @pnetaddress=net_address, @prdbms_user=u.name, @pos_user=nt_username
from master..sysprocesses sp, sysusers u
where sp.uid = u.uid  and spid = @@SPID

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_IDENTITY' and type='P')
  DROP PROCEDURE AUDIT_IDENTITY

AUDIT_IDENTITY
CREATE PROCEDURE audit_identity
( @psession_id int, @puser_id int=null, @puser_name varchar(32)=null)
as
  declare @cnt smallint, @user_name varchar(32), @user_id int
  set nocount on 
  if @puser_id is not null or @puser_name is not null 
  BEGIN
    if @puser_name is not null 
    BEGIN
      set @user_name = @puser_name
      set @user_id = 0
    END
    ELSE
    BEGIN
      select @user_name=user_name 
      from users
      where user_id = @puser_id
      and delete_session_id is null
      if @@ROWCOUNT = 0 
      BEGIN
        set @user_name = 'NotPrmUser'
        set @user_id = 0
      END
      ELSE
      BEGIN
        set @user_id = @puser_id
      END
    END

    select @cnt=count(*) from spidmap where spid = @@spid
    if @cnt = 0 
      insert into spidmap (spid,user_id,user_name)
      values(@@spid,@user_id,@user_name)
    ELSE
      update spidmap 
      set user_id = @user_id, user_name = @user_name
      where spid = @@spid
  END
  ELSE
  BEGIN
    update usession set spid=@@SPID where session_id = @psession_id
  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_DATA' and type='P')
  DROP PROCEDURE AUDIT_DATA

AUDIT_DATA
CREATE PROCEDURE audit_data
( @ptable_name varchar(30), @pcolumn_name varchar(30), @poper char(1)
, @ppk1 varchar(32), @ppk2 varchar(32), @ppk3 varchar(32), @ppk4 varchar(32),  @pprm_user_name varchar(32)
, @pprogram varchar(255), @phostname varchar(255), @pnetaddress varchar(24)
, @prdbms_user varchar(30), @pos_user varchar(32), @papp_name varchar(25)
, @pcolaud int, @plogical_delete varchar(1), @pprimary_record varchar(1)
, @pbefore_value varchar(2000), @pafter_value varchar(2000), @paudit_data varchar(4000) OUTPUT
)
as
  set nocount on
  if @pcolaud is null or @pcolaud = 1 
  begin
    declare @audit_data varchar(4000)
    declare @ptrval binary(16), @blen int
    set @audit_data=''
    if @pbefore_value is not null and (@poper='U' or @poper='D')
      set @audit_data=@audit_data+':'+'O'+@pcolumn_name+':'+substring(str(len(@pbefore_value)),7,10)+':'+@pbefore_value
    if @pafter_value is not null and (@poper='U' or @poper='I') 
      set @audit_data=@audit_data+':'+'N'+@pcolumn_name+':'+substring(str(len(@pafter_value)),7,10)+':'+@pafter_value

    if @audit_data is not null
    BEGIN
      if @paudit_data is null
        set @paudit_data = @audit_data
      else if len(@paudit_data)+len(@audit_data) <=4000
        set @paudit_data=@paudit_data+@audit_data
      else
      begin
        SELECT @ptrval = TEXTPTR(audit_info_extended) from spidmap where spid=@@spid
        SELECt @blen=datalength(audit_info_extended) from spidmap where spid=@@spid
        UPDATETEXT spidmap.audit_info_extended  @ptrval @blen 0 @audit_data
      end
    END
/*
    insert into prmaudit (audit_name,table_name,column_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name,app_name,
                        prm_user_name,os_user_name,program,host_name,old_value,new_value,netaddress,logical_delete_flag)
    values (getDate(),@ptable_name, @pcolumn_name, @ppk1, @ppk2, @ppk3, @ppk4, @poper, @prdbms_user, @papp_name
          ,@pprm_user_name, @pos_user, @pprogram, @phostname, @pbefore_value, @pafter_value, @pnetaddress,@plogical_delete)
*/
  end


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_ROW' and type='P')
  DROP PROCEDURE AUDIT_ROW

AUDIT_ROW
CREATE PROCEDURE audit_row
( @ptable_name varchar(30), @poper char(1)
, @ppk1 varchar(32), @ppk2 varchar(32), @ppk3 varchar(32), @ppk4 varchar(32),  @pprm_user_name varchar(32)
, @pprogram varchar(255), @phostname varchar(255), @pnetaddress varchar(24)
, @prdbms_user varchar(30), @pos_user varchar(32), @papp_name varchar(25)
, @plogical_delete varchar(1), @pprimary_record varchar(1), @paudit_data varchar(4000)=null
)
as
  set nocount on
  if @paudit_data is null or len(@paudit_data)<=4000
    insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
    values (getDate(),@ptable_name, @ppk1, @ppk2, @ppk3, @ppk4, @poper, @prdbms_user, @papp_name
          ,@pprm_user_name, @pos_user, @pprogram, @phostname, @pnetaddress,@plogical_delete, @paudit_data)
  else
    insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
    select getDate(),@ptable_name, @ppk1, @ppk2, @ppk3, @ppk4, @poper, @prdbms_user, @papp_name
          ,@pprm_user_name, @pos_user, @pprogram, @phostname, @pnetaddress,@plogical_delete, @paudit_data
          ,audit_info_extended
   from spidmap where spid = @@spid


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_PRIMARY_KEY' and type='P')
  DROP PROCEDURE GET_PRIMARY_KEY

GET_PRIMARY_KEY
CREATE PROCEDURE get_primary_key
	(@tab_name nvarchar(30), @key_cnt integer OUTPUT, @pk1 varchar(30) OUTPUT , @pk2 varchar(30)=null OUTPUT
         , @pk3 varchar(30)=null OUTPUT , @pk4 varchar(30)=null OUTPUT)
AS 
  declare @vkey_name nvarchar(30)

  if @tab_name != 'GCHANGE' and @tab_name != 'RLFOLIO'
    set @vkey_name = 'PK_' + @tab_name
  else
    set @vkey_name = 'PK_' + @tab_name + '_ID'

    select @pk1=index_col('dbo.' +@tab_name,i.indid,1),@pk2=index_col('dbo.' +@tab_name,i.indid,2)
          ,@pk3=index_col('dbo.' +@tab_name,i.indid,3),@pk4=index_col('dbo.' +@tab_name,i.indid,4)
    from sysindexes i
    where i.name = @vkey_name;

    set @key_cnt=1
    if LEN(@pk2)>0 
    begin
      set @key_cnt=2
      if LEN(@pk4)>0 
        set @key_cnt = 4
      ELSE
        if LEN(@pk3)>0 
          set @key_cnt = 3
    end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CASCADE_DELETE_CHILD' and type='P')
  DROP PROCEDURE CASCADE_DELETE_CHILD

CASCADE_DELETE_CHILD
CREATE PROCEDURE cascade_delete_child
	(@tab_name varchar(30), @parent_tab_name varchar(30), @fk1 varchar(30), @fk2 varchar(30)
         , @subquery nvarchar(4000), @delstmt nvarchar(4000), @updstmt nvarchar(4000)
         , @errorlevel int, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT
         , @pmax_to_delete int
         , @param1 varchar(255)=null, @param2 varchar(255)=null, @verbose bit=0)
AS 
  SET NOCOUNT on
  declare @new_delstmt nvarchar(4000), @new_subquery nvarchar(4000)
  declare @sub1 nvarchar(4000), @new_updquery nvarchar(4000), @new_execstmt nvarchar(4000)
  declare @child_table_name varchar(30), @child_col1 varchar(30), @child_col2 varchar(30)
  declare @fk1_nullable int, @fk2_nullable int, @key_cnt integer
  declare @pk_col1 varchar(30), @pk_col2 varchar(30), @rc int, @err int, @cnt int
  declare @del_nullable bit, @cntquery nvarchar(4000)

  declare child_c1 cursor local for
    select distinct po.name , sc.name, sc2.name
    from sysobjects fo, sysobjects po, sysforeignkeys fk, sysobjects oo
    , syscolumns sc, sysreferences ref, syscolumns sc2
    where fo.xtype = 'F' and oo.name = @tab_name
    and po.id = fo.parent_obj and fo.id = fk.constid and oo.id = fk.rkeyid
    and sc.id = po.id and ref.constid = fk.constid and sc.colid = ref.fkey1
    and sc2.id =* po.id and sc2.colid =* ref.fkey2;

  if @verbose = 1
    print 'Processing table ' + @tab_name + ' at ' + convert(varchar(20),getdate(),20)

  set @del_nullable=0
  if (@parent_tab_name = 'PROJECT') 
    or (@parent_tab_name = 'TASK') 
    or (@parent_tab_name = 'TASKRSRC') 
    or (@parent_tab_name = 'UDFCODE') 
    or (@parent_tab_name = 'USERS' AND @tab_name = 'USESSION') 
    or (@parent_tab_name = 'PROJWBS' AND @tab_name = 'PROJISSU') 
    or (@parent_tab_name = 'PROJWBS' AND @tab_name = 'PROJTHRS') 
    or ( (@parent_tab_name = 'RSRC' OR @parent_tab_name = 'ROLE') 
          AND ( @tab_name = 'TASKRSRC' OR @tab_name = 'TRSRCSUM' )) 
    set @del_nullable=1

  declare @is_nullable int
  set @is_nullable = 0
  if @fk2 is null and @del_nullable = 0
  begin
    select @is_nullable=sc.isnullable
    from sysobjects so, syscolumns sc
    where so.id = sc.id and so.xtype = 'U'
    and so.name = @tab_name and sc.name = @fk1
  end
 
  if @is_nullable = 1
  begin
    exec sp_executesql @updstmt ,N'@pk1 varchar(255),@pk2 varchar(255)',@param1, @param2
    select @err=@@error, @rc=@@rowcount
    if @err <> 0 
    BEGIN
      set @pret_msg = 'Errror ' + ltrim(str(@err)) + ' occured on update to null for table ' + @tab_name
      set @pret_val = -1
      return
    END
    set @pret_val = @pret_val+@rc
    if @verbose = 1
      print str(@rc) + ' FK Rows updated to null for table ' + @tab_name
    return
  end

  open child_c1
  fetch child_c1 into @child_table_name, @child_col1, @child_col2
  while @@fetch_status >= 0
  begin
    if @child_col2 is null 
      set @sub1= @child_col1 + ' in (' + @subquery + ')'
    else
      set @sub1=+'(str(' + @child_col1 + ')+str('+@child_col2 + ')) in (' + @subquery + ')'

    set @new_delstmt='delete from dbo.' + @child_table_name  + ' where ' + @sub1;
    if @errorlevel > 0  
    begin
      select @cnt=count(*)
      from sysobjects so, syscolumns sc
      where so.id = sc.id and so.xtype = 'U'
      and so.name = @child_table_name and sc.name = 'delete_session_id'

      if @cnt = 1
        set @new_delstmt=@new_delstmt + ' and delete_session_id is not null'
    end
    set @new_updquery='update dbo.' + @child_table_name +' set ' + @child_col1 + '=null where ' + @sub1;

    exec get_primary_key @child_table_name, @key_cnt OUTPUT, @pk_col1 OUTPUT, @pk_col2 OUTPUT


    if @pk_col2 is null  
      set @new_subquery = 'select ' + @pk_col1 + ' from dbo.' + @child_table_name + ' where ' + @sub1;
    else
      set @new_subquery = 'select str(' + @pk_col1 + ')+str(' + @pk_col2+ ') from dbo.' + @child_table_name + ' where ' + @sub1;


    exec cascade_delete_child @child_table_name, @tab_name, @child_col1, @child_col2
                           ,@new_subquery, @new_delstmt, @new_updquery, @errorlevel 
                           ,@pret_val OUTPUT, @pret_msg OUTPUT, @pmax_to_delete
                           ,@param1,@param2,@verbose
    if @pret_val < 0 or @pret_val > @pmax_to_delete
      return 

    fetch child_c1 into @child_table_name, @child_col1, @child_col2
  end

  /* Handle udfvalues */
  select @cnt=count(*) from udftype where table_name = @tab_name
  if @cnt > 0 
  begin
    set @new_delstmt= 'delete from udfvalue'
    set @new_delstmt=@new_delstmt+ ' where udf_type_id in (select udf_type_id from udftype where table_name = ''' + @tab_name + ''')'
    set @new_delstmt=@new_delstmt+ ' and fk_id in (' + @subquery + ')'
    exec sp_executesql @new_delstmt,N'@pk1 varchar(255),@pk2 varchar(255)',@param1, @param2
    select @err=@@error, @rc=@@rowcount
    set @pret_val = @pret_val+@rc
    if @err <> 0 
    BEGIN
      set @pret_msg = 'Errror ' + ltrim(str(@err)) + ' occured on UDF delete for table ' + @tab_name
      set @pret_val = -1
      return
    END
  end

  exec sp_executesql @delstmt,N'@pk1 varchar(255),@pk2 varchar(255)',@param1, @param2
  select @err=@@error, @rc=@@rowcount
  if @err <> 0 
  BEGIN
    set @pret_msg = 'Errror ' + ltrim(str(@err)) + ' occured on delete for table ' + @tab_name
    set @pret_val = -1
    return
  END
  set @pret_val = @pret_val+@rc

  if @verbose=1
    print str(@rc) + ' Rows deleted for table ' + @tab_name


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CASCADE_DELETE' and type='P')
  DROP PROCEDURE CASCADE_DELETE

CASCADE_DELETE
CREATE PROCEDURE cascade_delete
	(@tab_name varchar(30), @pk1 varchar(30), @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT
         , @pmax_to_delete int=999999999
         , @pk2 varchar(30)=null, @pk3 varchar(30)=null, @pk4 varchar(30)=null, @verbose bit=0 )
AS 
  SET NOCOUNT on
  declare @sub1 nvarchar(255), @pk_col1 varchar(30), @pk_col2 varchar(30)
  declare @pk_col3 varchar(30), @pk_col4 varchar(30), @key_cnt integer
  declare @new_delstmt nvarchar(4000), @i integer, @del_stmt nvarchar(4000)
  declare @rc int, @err int, @subquery nvarchar(4000)

  set @pret_val = 0

  if NOT exists (SELECT name FROM sysobjects WHERE name = @tab_name AND type = 'U')
  begin  
    set @pret_msg = 'Table ' + @tab_name + ' does not exist'
    return (@pret_val)
  end

  exec get_primary_key @tab_name, @key_cnt OUTPUT, @pk_col1 OUTPUT, @pk_col2 OUTPUT, @pk_col3 OUTPUT, @pk_col4 OUTPUT

  set @sub1 =  @pk_col1 + ' = @pk1 '
  if @key_cnt = 2 
    set @sub1 = @sub1 + ' and ' + @pk_col2 + ' = @pk2 '
  else if @key_cnt = 3
    set @sub1 = @sub1 + ' and ' + @pk_col2 + ' = @pk2 and ' + @pk_col3 + ' = @pk3 '
  else if @key_cnt = 4
    set @sub1 = @sub1 + ' and ' + @pk_col2 + ' = @pk2 and ' 
                + @pk_col3 + ' = @pk3 and ' + @pk_col4 + ' = @pk4'

  set @del_stmt = 'delete from dbo.' + @tab_name + ' where ' + @sub1


  if @key_cnt <= 2 
  BEGIN
    if @key_cnt = 1  
      set @subquery = 'select ' + @pk_col1 + ' from dbo.' + @tab_name + ' where ' + @sub1;
    else
      set @subquery = 'select str(' + @pk_col1 + ')+str(' + @pk_col2+ ') from dbo.' + @tab_name + ' where ' + @sub1;

   -- bug fix 3472 
  if @tab_name  = 'USERS'
    begin 
      delete from viewprop where user_id = @pk1 
    end   

    exec cascade_delete_child @tab_name, null, null, null, @subquery, @del_stmt, null, 0
                           ,@pret_val OUTPUT, @pret_msg OUTPUT,@pmax_to_delete, @pk1, @pk2, @verbose
  END
  ELSE
  BEGIN
    exec sp_executesql @del_stmt
         ,N'@pk1 varchar(255),@pk2 varchar(255),@pk3 varchar(255),@pk4 varchar(255)'
         ,@pk1, @pk2, @pk3, @pk4
    select @err=@@error, @rc=@@rowcount
    if @err <> 0 
    begin
      set @pret_msg = 'error ' + ltrim(str(@err)) + ' occured on delete for table ' + @tab_name
      set @pret_val = -1
      return
    end
    set @pret_val = @pret_val+@rc
    if @verbose=1
      print str(@rc) + ' rows deleted for table ' + @tab_name
  END

  if @verbose=1
    print 'Deleted ' + ltrim(str(@pret_val)) + ' record(s)'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'REFRDEL_CLEANUP' and type='P')
  DROP PROCEDURE REFRDEL_CLEANUP

REFRDEL_CLEANUP
CREATE PROCEDURE refrdel_cleanup
(@psession_id integer, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT )
AS 
  declare @early_login datetime, @curr_time datetime
  set nocount on
  set @curr_time = getDate()

  select @early_login=min(login_time) from usession
  where delete_session_id is null
  and app_name not in ('Job Service','Timesheets');

  if @early_login is null
    set @early_login = @curr_time
  delete from refrdel
  where delete_date < @early_login
    
  set @pret_val = 0
  set @pret_msg = ltrim(str(@pret_val)) + ' record(s) deleted'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CLEANUP_LOGICAL_DELETES' and type='P')
  DROP PROCEDURE CLEANUP_LOGICAL_DELETES

CLEANUP_LOGICAL_DELETES
CREATE PROCEDURE cleanup_logical_deletes
	(@days  integer, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT
         , @errorlevel int=1)
AS 
  SET NOCOUNT on
  declare @tab_name varchar(30), @del_stmt nvarchar(4000), @subquery nvarchar(4000)
  declare @sub1 nvarchar(255), @pk_col1 varchar(30), @pk_col2 varchar(30)
  declare @rows_changed int, @delete_date datetime, @min_date datetime, @key_cnt int

  -- bkd 28-feb-2006 -> Exclude Job Service and timesheet from delete date adjustment
  select @min_date=min(login_time) from usession where delete_session_id is null
  and app_name not in ('Job Service','Timesheets') 

  if @min_date is null or @min_date > getDate()
    set @min_date = getDate()

  print 'Min Date is ' + convert(varchar(30),@min_date)

  if @days >= 0 
    set @delete_date = getDate()- @days
  else
    set @delete_date = getDate()

  if @delete_date > @min_date 
    set @delete_date = @min_date

  print 'Delete Date is ' + convert(varchar(30),@delete_date)

  declare tabs_c1 cursor local for
    select o.name  from syscolumns c, sysobjects o 
    where o.type = 'U' and o.id = c.id and c.name = 'delete_session_id'
--    and o.name in ('task','rsrc','project','users')
    order by 1;

  set @pret_val = 0
  set @rows_changed=0
  open tabs_c1
  fetch tabs_c1 into @tab_name
  while (@@fetch_status >= 0)
  begin

    exec get_primary_key @tab_name, @key_cnt OUTPUT, @pk_col1 OUTPUT, @pk_col2 OUTPUT

    if @key_cnt <= 2 
    begin
      set @sub1 = 'delete_session_id is not null and update_date < ''' + convert(varchar(30),@delete_date) + ''''
               + ' and delete_session_id not in (select session_id from usession where delete_session_id is null)'
               + ' and delete_session_id > 0'	;

      if @pk_col2 is null  
        set @subquery = 'select ' + @pk_col1 + ' from dbo.' + @tab_name + ' where ' + @sub1;
      else
        set @subquery = 'select str(' + @pk_col1 + ')+str(' + @pk_col2+ ') from dbo.' + @tab_name + ' where ' + @sub1;

      set @del_stmt = 'delete from dbo.' + @tab_name + ' where ' + @sub1

      exec cascade_delete_child @tab_name,null,null, null, @subquery, @del_stmt,null, @errorlevel 
                             , @pret_val OUTPUT, @pret_msg OUTPUT, 999999999

      if @pret_val < 0 
      BEGIN
        print 'Error: ' + @pret_msg
        return (@pret_val)
      END
      set @rows_changed = @rows_changed + @pret_val
      set @pret_val = 0
    END
    fetch tabs_c1 into @tab_name
  end

  print 'Total Rows Deleted/Changed: ' + str(@rows_changed)
  set @pret_val=@rows_changed
  return (@pret_val)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SOURCE_VERSION' and type='P')
  DROP PROCEDURE SOURCE_VERSION

SOURCE_VERSION
create procedure source_version
        @version varchar(30) OUTPUT
AS
  set @version='24-July-2009 07:18 AM'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_PROTECT_SPIDMAP' and type='TR')
  DROP TRIGGER TR_PROTECT_SPIDMAP

TR_PROTECT_SPIDMAP
CREATE TRIGGER tr_protect_spidmap
on spidmap
for update,insert,delete
as     
declare @cnt int

if not exists (select name 
from master..syslogins sl, master..sysprocesses sp
where sysadmin = 1 and sp.spid = @@spid
and sp.loginame = sl.name)
begin
  if exists (select * from inserted where spid<>@@spid)
  or exists (select * from deleted where spid<>@@spid)
  begin
    raiserror ('Illegal update of spid',16,1)
    rollback transaction
  end
end

PRMAUD_ACTVCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ACTVCODE' AND xtype = 'TR')
    DROP trigger PRMAUD_ACTVCODE

PRMAUD_ACTVCODE
create trigger PRMAUD_ACTVCODE
on ACTVCODE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iactv_code_id varchar(255),@iactv_code_type_id varchar(255),@iseq_num varchar(255),@ishort_name varchar(255),@iparent_actv_code_id varchar(255),@iactv_code_name varchar(255)

  declare @dactv_code_id varchar(255),@dactv_code_type_id varchar(255),@dseq_num varchar(255),@dshort_name varchar(255),@dparent_actv_code_id varchar(255),@dactv_code_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(actv_code_id) and
			not update(actv_code_type_id) and
			not update(seq_num) and
			not update(short_name) and
			not update(parent_actv_code_id) and
			not update(actv_code_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ACTVCODE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVCODE',actv_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVCODE', actv_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select actv_code_id,actv_code_type_id,seq_num,short_name,parent_actv_code_id,actv_code_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select actv_code_id,actv_code_type_id,seq_num,short_name,parent_actv_code_id,actv_code_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iactv_code_id,@iactv_code_type_id,@iseq_num,@ishort_name,@iparent_actv_code_id,@iactv_code_name, @idelete_session_id
  else
    fetch deleted_c into @dactv_code_id,@dactv_code_type_id,@dseq_num,@dshort_name,@dparent_actv_code_id,@dactv_code_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dactv_code_id;
				

    end else begin
    	set @pk1 = @iactv_code_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dactv_code_id,@dactv_code_type_id,@dseq_num,@dshort_name,@dparent_actv_code_id,@dactv_code_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(actv_code_id)  exec audit_data 'ACTVCODE','actv_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_id,@iactv_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type_id)  exec audit_data 'ACTVCODE','actv_code_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_id,@iactv_code_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'ACTVCODE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(short_name)  exec audit_data 'ACTVCODE','short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshort_name,@ishort_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_actv_code_id)  exec audit_data 'ACTVCODE','parent_actv_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_actv_code_id,@iparent_actv_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_name)  exec audit_data 'ACTVCODE','actv_code_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_name,@iactv_code_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ACTVCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ACTVCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iactv_code_id,@iactv_code_type_id,@iseq_num,@ishort_name,@iparent_actv_code_id,@iactv_code_name, @idelete_session_id;
    else
     fetch deleted_c into @dactv_code_id,@dactv_code_type_id,@dseq_num,@dshort_name,@dparent_actv_code_id,@dactv_code_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ACTVTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ACTVTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_ACTVTYPE

PRMAUD_ACTVTYPE
create trigger PRMAUD_ACTVTYPE
on ACTVTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iactv_code_type_id varchar(255),@iseq_num varchar(255),@iactv_short_len varchar(255),@iactv_code_type varchar(255)

  declare @dactv_code_type_id varchar(255),@dseq_num varchar(255),@dactv_short_len varchar(255),@dactv_code_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(actv_code_type_id) and
			not update(seq_num) and
			not update(actv_short_len) and
			not update(actv_code_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ACTVTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVTYPE',actv_code_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVTYPE', actv_code_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select actv_code_type_id,seq_num,actv_short_len,actv_code_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select actv_code_type_id,seq_num,actv_short_len,actv_code_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iactv_code_type_id,@iseq_num,@iactv_short_len,@iactv_code_type, @idelete_session_id
  else
    fetch deleted_c into @dactv_code_type_id,@dseq_num,@dactv_short_len,@dactv_code_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dactv_code_type_id;
				

    end else begin
    	set @pk1 = @iactv_code_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dactv_code_type_id,@dseq_num,@dactv_short_len,@dactv_code_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(actv_code_type_id)  exec audit_data 'ACTVTYPE','actv_code_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_id,@iactv_code_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'ACTVTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(actv_short_len)  exec audit_data 'ACTVTYPE','actv_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_short_len,@iactv_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type)  exec audit_data 'ACTVTYPE','actv_code_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type,@iactv_code_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ACTVTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ACTVTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iactv_code_type_id,@iseq_num,@iactv_short_len,@iactv_code_type, @idelete_session_id;
    else
     fetch deleted_c into @dactv_code_type_id,@dseq_num,@dactv_short_len,@dactv_code_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ADMIN_CONFIG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ADMIN_CONFIG' AND xtype = 'TR')
    DROP trigger PRMAUD_ADMIN_CONFIG

PRMAUD_ADMIN_CONFIG
create trigger PRMAUD_ADMIN_CONFIG
on ADMIN_CONFIG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iconfig_name varchar(255),@iconfig_type varchar(255),@ifactory_version varchar(255),@ilast_change_date varchar(255),@iconfig_value varchar(255)

  declare @dconfig_name varchar(255),@dconfig_type varchar(255),@dfactory_version varchar(255),@dlast_change_date varchar(255),@dconfig_value varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(config_name) and
			not update(config_type) and
			not update(factory_version) and
			not update(last_change_date) and
			not update(config_value) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ADMIN_CONFIG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ADMIN_CONFIG',config_name,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ADMIN_CONFIG', config_name,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select config_name,config_type,factory_version,last_change_date,config_value
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select config_name,config_type,factory_version,last_change_date,config_value
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iconfig_name,@iconfig_type,@ifactory_version,@ilast_change_date,@iconfig_value, @idelete_session_id
  else
    fetch deleted_c into @dconfig_name,@dconfig_type,@dfactory_version,@dlast_change_date,@dconfig_value, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dconfig_name;
				

    end else begin
    	set @pk1 = @iconfig_name;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dconfig_name,@dconfig_type,@dfactory_version,@dlast_change_date,@dconfig_value, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(config_name)  exec audit_data 'ADMIN_CONFIG','config_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_name,@iconfig_name,@audit_data OUTPUT
      if (@loper='D') or  update(config_type)  exec audit_data 'ADMIN_CONFIG','config_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_type,@iconfig_type,@audit_data OUTPUT
      if (@loper='D') or  update(factory_version)  exec audit_data 'ADMIN_CONFIG','factory_version',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfactory_version,@ifactory_version,@audit_data OUTPUT
      if (@loper='D') or  update(last_change_date)  exec audit_data 'ADMIN_CONFIG','last_change_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_change_date,@ilast_change_date,@audit_data OUTPUT
      if (@loper='D') or  update(config_value)  exec audit_data 'ADMIN_CONFIG','config_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_value,@iconfig_value,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ADMIN_CONFIG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ADMIN_CONFIG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iconfig_name,@iconfig_type,@ifactory_version,@ilast_change_date,@iconfig_value, @idelete_session_id;
    else
     fetch deleted_c into @dconfig_name,@dconfig_type,@dfactory_version,@dlast_change_date,@dconfig_value, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_COSTTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_COSTTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_COSTTYPE

PRMAUD_COSTTYPE
create trigger PRMAUD_COSTTYPE
on COSTTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icost_type_id varchar(255),@iseq_num varchar(255),@icost_type varchar(255)

  declare @dcost_type_id varchar(255),@dseq_num varchar(255),@dcost_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(cost_type_id) and
			not update(seq_num) and
			not update(cost_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'COSTTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'COSTTYPE',cost_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'COSTTYPE', cost_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select cost_type_id,seq_num,cost_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select cost_type_id,seq_num,cost_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icost_type_id,@iseq_num,@icost_type, @idelete_session_id
  else
    fetch deleted_c into @dcost_type_id,@dseq_num,@dcost_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcost_type_id;
				

    end else begin
    	set @pk1 = @icost_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcost_type_id,@dseq_num,@dcost_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(cost_type_id)  exec audit_data 'COSTTYPE','cost_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_type_id,@icost_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'COSTTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(cost_type)  exec audit_data 'COSTTYPE','cost_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_type,@icost_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'COSTTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'COSTTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icost_type_id,@iseq_num,@icost_type, @idelete_session_id;
    else
     fetch deleted_c into @dcost_type_id,@dseq_num,@dcost_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_CURRTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_CURRTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_CURRTYPE

PRMAUD_CURRTYPE
create trigger PRMAUD_CURRTYPE
on CURRTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icurr_id varchar(255),@idecimal_digit_cnt varchar(255),@icurr_symbol varchar(255),@idecimal_symbol varchar(255),@idigit_group_symbol varchar(255),@ipos_curr_fmt_type varchar(255),@ineg_curr_fmt_type varchar(255),@icurr_type varchar(255),@icurr_short_name varchar(255),@igroup_digit_cnt varchar(255),@ibase_exch_rate varchar(255)

  declare @dcurr_id varchar(255),@ddecimal_digit_cnt varchar(255),@dcurr_symbol varchar(255),@ddecimal_symbol varchar(255),@ddigit_group_symbol varchar(255),@dpos_curr_fmt_type varchar(255),@dneg_curr_fmt_type varchar(255),@dcurr_type varchar(255),@dcurr_short_name varchar(255),@dgroup_digit_cnt varchar(255),@dbase_exch_rate varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(curr_id) and
			not update(decimal_digit_cnt) and
			not update(curr_symbol) and
			not update(decimal_symbol) and
			not update(digit_group_symbol) and
			not update(pos_curr_fmt_type) and
			not update(neg_curr_fmt_type) and
			not update(curr_type) and
			not update(curr_short_name) and
			not update(group_digit_cnt) and
			not update(base_exch_rate) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'CURRTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'CURRTYPE',curr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'CURRTYPE', curr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select curr_id,decimal_digit_cnt,curr_symbol,decimal_symbol,digit_group_symbol,pos_curr_fmt_type,neg_curr_fmt_type,curr_type,curr_short_name,group_digit_cnt,base_exch_rate
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select curr_id,decimal_digit_cnt,curr_symbol,decimal_symbol,digit_group_symbol,pos_curr_fmt_type,neg_curr_fmt_type,curr_type,curr_short_name,group_digit_cnt,base_exch_rate
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icurr_id,@idecimal_digit_cnt,@icurr_symbol,@idecimal_symbol,@idigit_group_symbol,@ipos_curr_fmt_type,@ineg_curr_fmt_type,@icurr_type,@icurr_short_name,@igroup_digit_cnt,@ibase_exch_rate, @idelete_session_id
  else
    fetch deleted_c into @dcurr_id,@ddecimal_digit_cnt,@dcurr_symbol,@ddecimal_symbol,@ddigit_group_symbol,@dpos_curr_fmt_type,@dneg_curr_fmt_type,@dcurr_type,@dcurr_short_name,@dgroup_digit_cnt,@dbase_exch_rate, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcurr_id;
				

    end else begin
    	set @pk1 = @icurr_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcurr_id,@ddecimal_digit_cnt,@dcurr_symbol,@ddecimal_symbol,@ddigit_group_symbol,@dpos_curr_fmt_type,@dneg_curr_fmt_type,@dcurr_type,@dcurr_short_name,@dgroup_digit_cnt,@dbase_exch_rate, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(curr_id)  exec audit_data 'CURRTYPE','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(decimal_digit_cnt)  exec audit_data 'CURRTYPE','decimal_digit_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddecimal_digit_cnt,@idecimal_digit_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(curr_symbol)  exec audit_data 'CURRTYPE','curr_symbol',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_symbol,@icurr_symbol,@audit_data OUTPUT
      if (@loper='D') or  update(decimal_symbol)  exec audit_data 'CURRTYPE','decimal_symbol',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddecimal_symbol,@idecimal_symbol,@audit_data OUTPUT
      if (@loper='D') or  update(digit_group_symbol)  exec audit_data 'CURRTYPE','digit_group_symbol',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddigit_group_symbol,@idigit_group_symbol,@audit_data OUTPUT
      if (@loper='D') or  update(pos_curr_fmt_type)  exec audit_data 'CURRTYPE','pos_curr_fmt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpos_curr_fmt_type,@ipos_curr_fmt_type,@audit_data OUTPUT
      if (@loper='D') or  update(neg_curr_fmt_type)  exec audit_data 'CURRTYPE','neg_curr_fmt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dneg_curr_fmt_type,@ineg_curr_fmt_type,@audit_data OUTPUT
      if (@loper='D') or  update(curr_type)  exec audit_data 'CURRTYPE','curr_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_type,@icurr_type,@audit_data OUTPUT
      if (@loper='D') or  update(curr_short_name)  exec audit_data 'CURRTYPE','curr_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_short_name,@icurr_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(group_digit_cnt)  exec audit_data 'CURRTYPE','group_digit_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dgroup_digit_cnt,@igroup_digit_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_exch_rate)  exec audit_data 'CURRTYPE','base_exch_rate',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_exch_rate,@ibase_exch_rate,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'CURRTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'CURRTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icurr_id,@idecimal_digit_cnt,@icurr_symbol,@idecimal_symbol,@idigit_group_symbol,@ipos_curr_fmt_type,@ineg_curr_fmt_type,@icurr_type,@icurr_short_name,@igroup_digit_cnt,@ibase_exch_rate, @idelete_session_id;
    else
     fetch deleted_c into @dcurr_id,@ddecimal_digit_cnt,@dcurr_symbol,@ddecimal_symbol,@ddigit_group_symbol,@dpos_curr_fmt_type,@dneg_curr_fmt_type,@dcurr_type,@dcurr_short_name,@dgroup_digit_cnt,@dbase_exch_rate, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DOCCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DOCCATG' AND xtype = 'TR')
    DROP trigger PRMAUD_DOCCATG

PRMAUD_DOCCATG
create trigger PRMAUD_DOCCATG
on DOCCATG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idoc_catg_id varchar(255),@iseq_num varchar(255),@idoc_catg_name varchar(255)

  declare @ddoc_catg_id varchar(255),@dseq_num varchar(255),@ddoc_catg_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(doc_catg_id) and
			not update(seq_num) and
			not update(doc_catg_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DOCCATG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCCATG',doc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCCATG', doc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select doc_catg_id,seq_num,doc_catg_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select doc_catg_id,seq_num,doc_catg_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idoc_catg_id,@iseq_num,@idoc_catg_name, @idelete_session_id
  else
    fetch deleted_c into @ddoc_catg_id,@dseq_num,@ddoc_catg_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddoc_catg_id;
				

    end else begin
    	set @pk1 = @idoc_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddoc_catg_id,@dseq_num,@ddoc_catg_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(doc_catg_id)  exec audit_data 'DOCCATG','doc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_catg_id,@idoc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'DOCCATG','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(doc_catg_name)  exec audit_data 'DOCCATG','doc_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_catg_name,@idoc_catg_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DOCCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DOCCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idoc_catg_id,@iseq_num,@idoc_catg_name, @idelete_session_id;
    else
     fetch deleted_c into @ddoc_catg_id,@dseq_num,@ddoc_catg_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DOCUMENT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DOCUMENT' AND xtype = 'TR')
    DROP trigger PRMAUD_DOCUMENT

PRMAUD_DOCUMENT
create trigger PRMAUD_DOCUMENT
on DOCUMENT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idoc_id varchar(255),@idoc_seq_num varchar(255),@idoc_name varchar(255),@iparent_doc_id varchar(255),@idoc_catg_id varchar(255),@idoc_date varchar(255),@iversion_name varchar(255),@iguid varchar(255),@idoc_short_name varchar(255),@iauthor_name varchar(255),@iprivate_loc varchar(255),@ipublic_loc varchar(255)

  declare @ddoc_id varchar(255),@ddoc_seq_num varchar(255),@ddoc_name varchar(255),@dparent_doc_id varchar(255),@ddoc_catg_id varchar(255),@ddoc_date varchar(255),@dversion_name varchar(255),@dguid varchar(255),@ddoc_short_name varchar(255),@dauthor_name varchar(255),@dprivate_loc varchar(255),@dpublic_loc varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(doc_id) and
			not update(doc_seq_num) and
			not update(doc_name) and
			not update(parent_doc_id) and
			not update(doc_catg_id) and
			not update(doc_date) and
			not update(version_name) and
			not update(guid) and
			not update(doc_short_name) and
			not update(author_name) and
			not update(private_loc) and
			not update(public_loc) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DOCUMENT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCUMENT',doc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCUMENT', doc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select doc_id,doc_seq_num,doc_name,parent_doc_id,doc_catg_id,doc_date,version_name,guid,doc_short_name,author_name,private_loc,public_loc
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select doc_id,doc_seq_num,doc_name,parent_doc_id,doc_catg_id,doc_date,version_name,guid,doc_short_name,author_name,private_loc,public_loc
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idoc_id,@idoc_seq_num,@idoc_name,@iparent_doc_id,@idoc_catg_id,@idoc_date,@iversion_name,@iguid,@idoc_short_name,@iauthor_name,@iprivate_loc,@ipublic_loc, @idelete_session_id
  else
    fetch deleted_c into @ddoc_id,@ddoc_seq_num,@ddoc_name,@dparent_doc_id,@ddoc_catg_id,@ddoc_date,@dversion_name,@dguid,@ddoc_short_name,@dauthor_name,@dprivate_loc,@dpublic_loc, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddoc_id;
				

    end else begin
    	set @pk1 = @idoc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddoc_id,@ddoc_seq_num,@ddoc_name,@dparent_doc_id,@ddoc_catg_id,@ddoc_date,@dversion_name,@dguid,@ddoc_short_name,@dauthor_name,@dprivate_loc,@dpublic_loc, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(doc_id)  exec audit_data 'DOCUMENT','doc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_id,@idoc_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_seq_num)  exec audit_data 'DOCUMENT','doc_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_seq_num,@idoc_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(doc_name)  exec audit_data 'DOCUMENT','doc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_name,@idoc_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_doc_id)  exec audit_data 'DOCUMENT','parent_doc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_doc_id,@iparent_doc_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_catg_id)  exec audit_data 'DOCUMENT','doc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_catg_id,@idoc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_date)  exec audit_data 'DOCUMENT','doc_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_date,@idoc_date,@audit_data OUTPUT
      if (@loper='D') or  update(version_name)  exec audit_data 'DOCUMENT','version_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dversion_name,@iversion_name,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'DOCUMENT','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(doc_short_name)  exec audit_data 'DOCUMENT','doc_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_short_name,@idoc_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(author_name)  exec audit_data 'DOCUMENT','author_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dauthor_name,@iauthor_name,@audit_data OUTPUT
      if (@loper='D') or  update(private_loc)  exec audit_data 'DOCUMENT','private_loc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprivate_loc,@iprivate_loc,@audit_data OUTPUT
      if (@loper='D') or  update(public_loc)  exec audit_data 'DOCUMENT','public_loc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpublic_loc,@ipublic_loc,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DOCUMENT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DOCUMENT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idoc_id,@idoc_seq_num,@idoc_name,@iparent_doc_id,@idoc_catg_id,@idoc_date,@iversion_name,@iguid,@idoc_short_name,@iauthor_name,@iprivate_loc,@ipublic_loc, @idelete_session_id;
    else
     fetch deleted_c into @ddoc_id,@ddoc_seq_num,@ddoc_name,@dparent_doc_id,@ddoc_catg_id,@ddoc_date,@dversion_name,@dguid,@ddoc_short_name,@dauthor_name,@dprivate_loc,@dpublic_loc, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FACTCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FACTCATG' AND xtype = 'TR')
    DROP trigger PRMAUD_FACTCATG

PRMAUD_FACTCATG
create trigger PRMAUD_FACTCATG
on FACTCATG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifact_catg_id varchar(255),@iseq_num varchar(255),@ifact_catg_name varchar(255)

  declare @dfact_catg_id varchar(255),@dseq_num varchar(255),@dfact_catg_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fact_catg_id) and
			not update(seq_num) and
			not update(fact_catg_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FACTCATG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTCATG',fact_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTCATG', fact_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fact_catg_id,seq_num,fact_catg_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fact_catg_id,seq_num,fact_catg_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifact_catg_id,@iseq_num,@ifact_catg_name, @idelete_session_id
  else
    fetch deleted_c into @dfact_catg_id,@dseq_num,@dfact_catg_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfact_catg_id;
				

    end else begin
    	set @pk1 = @ifact_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfact_catg_id,@dseq_num,@dfact_catg_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fact_catg_id)  exec audit_data 'FACTCATG','fact_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_catg_id,@ifact_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'FACTCATG','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(fact_catg_name)  exec audit_data 'FACTCATG','fact_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_catg_name,@ifact_catg_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FACTCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FACTCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifact_catg_id,@iseq_num,@ifact_catg_name, @idelete_session_id;
    else
     fetch deleted_c into @dfact_catg_id,@dseq_num,@dfact_catg_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FACTOR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FACTOR' AND xtype = 'TR')
    DROP trigger PRMAUD_FACTOR

PRMAUD_FACTOR
create trigger PRMAUD_FACTOR
on FACTOR
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifact_id varchar(255),@ifact_seq_num varchar(255),@ifact_type varchar(255),@ifact_name varchar(255),@idef_fact_val_id varchar(255),@ifact_catg_id varchar(255)

  declare @dfact_id varchar(255),@dfact_seq_num varchar(255),@dfact_type varchar(255),@dfact_name varchar(255),@ddef_fact_val_id varchar(255),@dfact_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fact_id) and
			not update(fact_seq_num) and
			not update(fact_type) and
			not update(fact_name) and
			not update(def_fact_val_id) and
			not update(fact_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FACTOR', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTOR',fact_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTOR', fact_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fact_id,fact_seq_num,fact_type,fact_name,def_fact_val_id,fact_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fact_id,fact_seq_num,fact_type,fact_name,def_fact_val_id,fact_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifact_id,@ifact_seq_num,@ifact_type,@ifact_name,@idef_fact_val_id,@ifact_catg_id, @idelete_session_id
  else
    fetch deleted_c into @dfact_id,@dfact_seq_num,@dfact_type,@dfact_name,@ddef_fact_val_id,@dfact_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfact_id;
				

    end else begin
    	set @pk1 = @ifact_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfact_id,@dfact_seq_num,@dfact_type,@dfact_name,@ddef_fact_val_id,@dfact_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fact_id)  exec audit_data 'FACTOR','fact_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_id,@ifact_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_seq_num)  exec audit_data 'FACTOR','fact_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_seq_num,@ifact_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(fact_type)  exec audit_data 'FACTOR','fact_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_type,@ifact_type,@audit_data OUTPUT
      if (@loper='D') or  update(fact_name)  exec audit_data 'FACTOR','fact_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_name,@ifact_name,@audit_data OUTPUT
      if (@loper='D') or  update(def_fact_val_id)  exec audit_data 'FACTOR','def_fact_val_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_fact_val_id,@idef_fact_val_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_catg_id)  exec audit_data 'FACTOR','fact_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_catg_id,@ifact_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FACTOR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FACTOR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifact_id,@ifact_seq_num,@ifact_type,@ifact_name,@idef_fact_val_id,@ifact_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @dfact_id,@dfact_seq_num,@dfact_type,@dfact_name,@ddef_fact_val_id,@dfact_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FACTVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FACTVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_FACTVAL

PRMAUD_FACTVAL
create trigger PRMAUD_FACTVAL
on FACTVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifact_val_id varchar(255),@ifact_id varchar(255),@ifact_value varchar(255),@ifact_value_descr varchar(255)

  declare @dfact_val_id varchar(255),@dfact_id varchar(255),@dfact_value varchar(255),@dfact_value_descr varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fact_val_id) and
			not update(fact_id) and
			not update(fact_value) and
			not update(fact_value_descr) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FACTVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTVAL',fact_val_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTVAL', fact_val_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fact_val_id,fact_id,fact_value,fact_value_descr
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fact_val_id,fact_id,fact_value,fact_value_descr
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifact_val_id,@ifact_id,@ifact_value,@ifact_value_descr, @idelete_session_id
  else
    fetch deleted_c into @dfact_val_id,@dfact_id,@dfact_value,@dfact_value_descr, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfact_val_id;
				

    end else begin
    	set @pk1 = @ifact_val_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfact_val_id,@dfact_id,@dfact_value,@dfact_value_descr, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fact_val_id)  exec audit_data 'FACTVAL','fact_val_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_val_id,@ifact_val_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_id)  exec audit_data 'FACTVAL','fact_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_id,@ifact_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_value)  exec audit_data 'FACTVAL','fact_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_value,@ifact_value,@audit_data OUTPUT
      if (@loper='D') or  update(fact_value_descr)  exec audit_data 'FACTVAL','fact_value_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_value_descr,@ifact_value_descr,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FACTVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FACTVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifact_val_id,@ifact_id,@ifact_value,@ifact_value_descr, @idelete_session_id;
    else
     fetch deleted_c into @dfact_val_id,@dfact_id,@dfact_value,@dfact_value_descr, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FILTPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FILTPROP' AND xtype = 'TR')
    DROP trigger PRMAUD_FILTPROP

PRMAUD_FILTPROP
create trigger PRMAUD_FILTPROP
on FILTPROP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifilter_id varchar(255),@itable_name varchar(255),@ifilter_type varchar(255),@ifilter_name varchar(255),@iuser_id varchar(255)

  declare @dfilter_id varchar(255),@dtable_name varchar(255),@dfilter_type varchar(255),@dfilter_name varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(filter_id) and
			not update(table_name) and
			not update(filter_type) and
			not update(filter_name) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FILTPROP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FILTPROP',filter_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FILTPROP', filter_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select filter_id,table_name,filter_type,filter_name,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select filter_id,table_name,filter_type,filter_name,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifilter_id,@itable_name,@ifilter_type,@ifilter_name,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dfilter_id,@dtable_name,@dfilter_type,@dfilter_name,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfilter_id;
				

    end else begin
    	set @pk1 = @ifilter_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfilter_id,@dtable_name,@dfilter_type,@dfilter_name,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(filter_id)  exec audit_data 'FILTPROP','filter_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfilter_id,@ifilter_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'FILTPROP','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(filter_type)  exec audit_data 'FILTPROP','filter_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfilter_type,@ifilter_type,@audit_data OUTPUT
      if (@loper='D') or  update(filter_name)  exec audit_data 'FILTPROP','filter_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfilter_name,@ifilter_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'FILTPROP','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FILTPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FILTPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifilter_id,@itable_name,@ifilter_type,@ifilter_name,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dfilter_id,@dtable_name,@dfilter_type,@dfilter_name,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_LINKWBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_LINKWBS' AND xtype = 'TR')
    DROP trigger PRMAUD_LINKWBS

PRMAUD_LINKWBS
create trigger PRMAUD_LINKWBS
on LINKWBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ilinkwbs_id varchar(255),@ibase_wbs_id varchar(255),@ibase_template_id varchar(255),@iplugin_template_id varchar(255),@iplugin_wbs_id varchar(255)

  declare @dlinkwbs_id varchar(255),@dbase_wbs_id varchar(255),@dbase_template_id varchar(255),@dplugin_template_id varchar(255),@dplugin_wbs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(linkwbs_id) and
			not update(base_wbs_id) and
			not update(base_template_id) and
			not update(plugin_template_id) and
			not update(plugin_wbs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'LINKWBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'LINKWBS',linkwbs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'LINKWBS', linkwbs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select linkwbs_id,base_wbs_id,base_template_id,plugin_template_id,plugin_wbs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select linkwbs_id,base_wbs_id,base_template_id,plugin_template_id,plugin_wbs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ilinkwbs_id,@ibase_wbs_id,@ibase_template_id,@iplugin_template_id,@iplugin_wbs_id, @idelete_session_id
  else
    fetch deleted_c into @dlinkwbs_id,@dbase_wbs_id,@dbase_template_id,@dplugin_template_id,@dplugin_wbs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dlinkwbs_id;
				

    end else begin
    	set @pk1 = @ilinkwbs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dlinkwbs_id,@dbase_wbs_id,@dbase_template_id,@dplugin_template_id,@dplugin_wbs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(linkwbs_id)  exec audit_data 'LINKWBS','linkwbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlinkwbs_id,@ilinkwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(base_wbs_id)  exec audit_data 'LINKWBS','base_wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_wbs_id,@ibase_wbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(base_template_id)  exec audit_data 'LINKWBS','base_template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_template_id,@ibase_template_id,@audit_data OUTPUT
      if (@loper='D') or  update(plugin_template_id)  exec audit_data 'LINKWBS','plugin_template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dplugin_template_id,@iplugin_template_id,@audit_data OUTPUT
      if (@loper='D') or  update(plugin_wbs_id)  exec audit_data 'LINKWBS','plugin_wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dplugin_wbs_id,@iplugin_wbs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'LINKWBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'LINKWBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ilinkwbs_id,@ibase_wbs_id,@ibase_template_id,@iplugin_template_id,@iplugin_wbs_id, @idelete_session_id;
    else
     fetch deleted_c into @dlinkwbs_id,@dbase_wbs_id,@dbase_template_id,@dplugin_template_id,@dplugin_wbs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_MEMOTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_MEMOTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_MEMOTYPE

PRMAUD_MEMOTYPE
create trigger PRMAUD_MEMOTYPE
on MEMOTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @imemo_type_id varchar(255),@iseq_num varchar(255),@itmpl_flag varchar(255),@iwbs_flag varchar(255),@itask_flag varchar(255),@imemo_type varchar(255)

  declare @dmemo_type_id varchar(255),@dseq_num varchar(255),@dtmpl_flag varchar(255),@dwbs_flag varchar(255),@dtask_flag varchar(255),@dmemo_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(memo_type_id) and
			not update(seq_num) and
			not update(tmpl_flag) and
			not update(wbs_flag) and
			not update(task_flag) and
			not update(memo_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'MEMOTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'MEMOTYPE',memo_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'MEMOTYPE', memo_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select memo_type_id,seq_num,tmpl_flag,wbs_flag,task_flag,memo_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select memo_type_id,seq_num,tmpl_flag,wbs_flag,task_flag,memo_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @imemo_type_id,@iseq_num,@itmpl_flag,@iwbs_flag,@itask_flag,@imemo_type, @idelete_session_id
  else
    fetch deleted_c into @dmemo_type_id,@dseq_num,@dtmpl_flag,@dwbs_flag,@dtask_flag,@dmemo_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dmemo_type_id;
				

    end else begin
    	set @pk1 = @imemo_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dmemo_type_id,@dseq_num,@dtmpl_flag,@dwbs_flag,@dtask_flag,@dmemo_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(memo_type_id)  exec audit_data 'MEMOTYPE','memo_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type_id,@imemo_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'MEMOTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_flag)  exec audit_data 'MEMOTYPE','tmpl_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_flag,@itmpl_flag,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_flag)  exec audit_data 'MEMOTYPE','wbs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_flag,@iwbs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(task_flag)  exec audit_data 'MEMOTYPE','task_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_flag,@itask_flag,@audit_data OUTPUT
      if (@loper='D') or  update(memo_type)  exec audit_data 'MEMOTYPE','memo_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type,@imemo_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'MEMOTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'MEMOTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @imemo_type_id,@iseq_num,@itmpl_flag,@iwbs_flag,@itask_flag,@imemo_type, @idelete_session_id;
    else
     fetch deleted_c into @dmemo_type_id,@dseq_num,@dtmpl_flag,@dwbs_flag,@dtask_flag,@dmemo_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_OBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_OBS' AND xtype = 'TR')
    DROP trigger PRMAUD_OBS

PRMAUD_OBS
create trigger PRMAUD_OBS
on OBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iobs_id varchar(255),@iseq_num varchar(255),@iobs_name varchar(255),@iparent_obs_id varchar(255)

  declare @dobs_id varchar(255),@dseq_num varchar(255),@dobs_name varchar(255),@dparent_obs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(obs_id) and
			not update(seq_num) and
			not update(obs_name) and
			not update(parent_obs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'OBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'OBS',obs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'OBS', obs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select obs_id,seq_num,obs_name,parent_obs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select obs_id,seq_num,obs_name,parent_obs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iobs_id,@iseq_num,@iobs_name,@iparent_obs_id, @idelete_session_id
  else
    fetch deleted_c into @dobs_id,@dseq_num,@dobs_name,@dparent_obs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dobs_id;
				

    end else begin
    	set @pk1 = @iobs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dobs_id,@dseq_num,@dobs_name,@dparent_obs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(obs_id)  exec audit_data 'OBS','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'OBS','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(obs_name)  exec audit_data 'OBS','obs_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_name,@iobs_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_obs_id)  exec audit_data 'OBS','parent_obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_obs_id,@iparent_obs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'OBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'OBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iobs_id,@iseq_num,@iobs_name,@iparent_obs_id, @idelete_session_id;
    else
     fetch deleted_c into @dobs_id,@dseq_num,@dobs_name,@dparent_obs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PHASE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PHASE' AND xtype = 'TR')
    DROP trigger PRMAUD_PHASE

PRMAUD_PHASE
create trigger PRMAUD_PHASE
on PHASE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iphase_id varchar(255),@iseq_num varchar(255),@iphase_name varchar(255)

  declare @dphase_id varchar(255),@dseq_num varchar(255),@dphase_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(phase_id) and
			not update(seq_num) and
			not update(phase_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PHASE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PHASE',phase_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PHASE', phase_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select phase_id,seq_num,phase_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select phase_id,seq_num,phase_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iphase_id,@iseq_num,@iphase_name, @idelete_session_id
  else
    fetch deleted_c into @dphase_id,@dseq_num,@dphase_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dphase_id;
				

    end else begin
    	set @pk1 = @iphase_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dphase_id,@dseq_num,@dphase_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(phase_id)  exec audit_data 'PHASE','phase_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_id,@iphase_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PHASE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(phase_name)  exec audit_data 'PHASE','phase_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_name,@iphase_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PHASE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PHASE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iphase_id,@iseq_num,@iphase_name, @idelete_session_id;
    else
     fetch deleted_c into @dphase_id,@dseq_num,@dphase_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_POBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_POBS' AND xtype = 'TR')
    DROP trigger PRMAUD_POBS

PRMAUD_POBS
create trigger PRMAUD_POBS
on POBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ipobs_id varchar(255),@iseq_num varchar(255),@ipobs_name varchar(255),@ipobs_parent_id varchar(255),@ipobs_descr varchar(255),@ipobs_manager varchar(255)

  declare @dpobs_id varchar(255),@dseq_num varchar(255),@dpobs_name varchar(255),@dpobs_parent_id varchar(255),@dpobs_descr varchar(255),@dpobs_manager varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(pobs_id) and
			not update(seq_num) and
			not update(pobs_name) and
			not update(pobs_parent_id) and
			not update(pobs_descr) and
			not update(pobs_manager) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'POBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'POBS',pobs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'POBS', pobs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select pobs_id,seq_num,pobs_name,pobs_parent_id,pobs_descr,pobs_manager
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select pobs_id,seq_num,pobs_name,pobs_parent_id,pobs_descr,pobs_manager
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ipobs_id,@iseq_num,@ipobs_name,@ipobs_parent_id,@ipobs_descr,@ipobs_manager, @idelete_session_id
  else
    fetch deleted_c into @dpobs_id,@dseq_num,@dpobs_name,@dpobs_parent_id,@dpobs_descr,@dpobs_manager, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dpobs_id;
				

    end else begin
    	set @pk1 = @ipobs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dpobs_id,@dseq_num,@dpobs_name,@dpobs_parent_id,@dpobs_descr,@dpobs_manager, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(pobs_id)  exec audit_data 'POBS','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'POBS','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_name)  exec audit_data 'POBS','pobs_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_name,@ipobs_name,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_parent_id)  exec audit_data 'POBS','pobs_parent_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_parent_id,@ipobs_parent_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_descr)  exec audit_data 'POBS','pobs_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_descr,@ipobs_descr,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_manager)  exec audit_data 'POBS','pobs_manager',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_manager,@ipobs_manager,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'POBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'POBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ipobs_id,@iseq_num,@ipobs_name,@ipobs_parent_id,@ipobs_descr,@ipobs_manager, @idelete_session_id;
    else
     fetch deleted_c into @dpobs_id,@dseq_num,@dpobs_name,@dpobs_parent_id,@dpobs_descr,@dpobs_manager, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PREFER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PREFER' AND xtype = 'TR')
    DROP trigger PRMAUD_PREFER

PRMAUD_PREFER
create trigger PRMAUD_PREFER
on PREFER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iprefer_id varchar(255),@imax_wbs_level_cnt varchar(255),@imax_rsrc_level_cnt varchar(255),@imax_obs_level_cnt varchar(255),@iwbs_short_len varchar(255),@irsrc_short_len varchar(255),@itask_code_len varchar(255),@irole_short_len varchar(255),@imax_actv_level_cnt varchar(255),@imax_tcat_level_cnt varchar(255),@imax_rcat_level_cnt varchar(255),@imax_role_level_cnt varchar(255),@iday_hr_cnt varchar(255),@iweek_hr_cnt varchar(255),@iyear_hr_cnt varchar(255),@imonth_hr_cnt varchar(255),@iname_sep_char varchar(255),@iyear_char varchar(255),@imonth_char varchar(255),@iweek_char varchar(255),@iday_char varchar(255),@ihour_char varchar(255),@iminute_char varchar(255),@idef_complete_pct_type varchar(255),@idefault_duration_type varchar(255),@idatabase_version varchar(255),@idb_name varchar(255),@iphase_label varchar(255),@irpt_header_1 varchar(255),@irpt_header_2 varchar(255),@irpt_header_3 varchar(255),@irpt_footer_1 varchar(255),@irpt_footer_2 varchar(255),@irpt_footer_3 varchar(255),@irpt_user_1 varchar(255),@irpt_user_2 varchar(255),@irpt_user_3 varchar(255),@icurr_id varchar(255),@idef_task_type varchar(255)

  declare @dprefer_id varchar(255),@dmax_wbs_level_cnt varchar(255),@dmax_rsrc_level_cnt varchar(255),@dmax_obs_level_cnt varchar(255),@dwbs_short_len varchar(255),@drsrc_short_len varchar(255),@dtask_code_len varchar(255),@drole_short_len varchar(255),@dmax_actv_level_cnt varchar(255),@dmax_tcat_level_cnt varchar(255),@dmax_rcat_level_cnt varchar(255),@dmax_role_level_cnt varchar(255),@dday_hr_cnt varchar(255),@dweek_hr_cnt varchar(255),@dyear_hr_cnt varchar(255),@dmonth_hr_cnt varchar(255),@dname_sep_char varchar(255),@dyear_char varchar(255),@dmonth_char varchar(255),@dweek_char varchar(255),@dday_char varchar(255),@dhour_char varchar(255),@dminute_char varchar(255),@ddef_complete_pct_type varchar(255),@ddefault_duration_type varchar(255),@ddatabase_version varchar(255),@ddb_name varchar(255),@dphase_label varchar(255),@drpt_header_1 varchar(255),@drpt_header_2 varchar(255),@drpt_header_3 varchar(255),@drpt_footer_1 varchar(255),@drpt_footer_2 varchar(255),@drpt_footer_3 varchar(255),@drpt_user_1 varchar(255),@drpt_user_2 varchar(255),@drpt_user_3 varchar(255),@dcurr_id varchar(255),@ddef_task_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(prefer_id) and
			not update(max_wbs_level_cnt) and
			not update(max_rsrc_level_cnt) and
			not update(max_obs_level_cnt) and
			not update(wbs_short_len) and
			not update(rsrc_short_len) and
			not update(task_code_len) and
			not update(role_short_len) and
			not update(max_actv_level_cnt) and
			not update(max_tcat_level_cnt) and
			not update(max_rcat_level_cnt) and
			not update(max_role_level_cnt) and
			not update(day_hr_cnt) and
			not update(week_hr_cnt) and
			not update(year_hr_cnt) and
			not update(month_hr_cnt) and
			not update(name_sep_char) and
			not update(year_char) and
			not update(month_char) and
			not update(week_char) and
			not update(day_char) and
			not update(hour_char) and
			not update(minute_char) and
			not update(def_complete_pct_type) and
			not update(default_duration_type) and
			not update(database_version) and
			not update(db_name) and
			not update(phase_label) and
			not update(rpt_header_1) and
			not update(rpt_header_2) and
			not update(rpt_header_3) and
			not update(rpt_footer_1) and
			not update(rpt_footer_2) and
			not update(rpt_footer_3) and
			not update(rpt_user_1) and
			not update(rpt_user_2) and
			not update(rpt_user_3) and
			not update(curr_id) and
			not update(def_task_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PREFER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PREFER',prefer_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PREFER', prefer_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select prefer_id,max_wbs_level_cnt,max_rsrc_level_cnt,max_obs_level_cnt,wbs_short_len,rsrc_short_len,task_code_len,role_short_len,max_actv_level_cnt,max_tcat_level_cnt,max_rcat_level_cnt,max_role_level_cnt,day_hr_cnt,week_hr_cnt,year_hr_cnt,month_hr_cnt,name_sep_char,year_char,month_char,week_char,day_char,hour_char,minute_char,def_complete_pct_type,default_duration_type,database_version,db_name,phase_label,rpt_header_1,rpt_header_2,rpt_header_3,rpt_footer_1,rpt_footer_2,rpt_footer_3,rpt_user_1,rpt_user_2,rpt_user_3,curr_id,def_task_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select prefer_id,max_wbs_level_cnt,max_rsrc_level_cnt,max_obs_level_cnt,wbs_short_len,rsrc_short_len,task_code_len,role_short_len,max_actv_level_cnt,max_tcat_level_cnt,max_rcat_level_cnt,max_role_level_cnt,day_hr_cnt,week_hr_cnt,year_hr_cnt,month_hr_cnt,name_sep_char,year_char,month_char,week_char,day_char,hour_char,minute_char,def_complete_pct_type,default_duration_type,database_version,db_name,phase_label,rpt_header_1,rpt_header_2,rpt_header_3,rpt_footer_1,rpt_footer_2,rpt_footer_3,rpt_user_1,rpt_user_2,rpt_user_3,curr_id,def_task_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iprefer_id,@imax_wbs_level_cnt,@imax_rsrc_level_cnt,@imax_obs_level_cnt,@iwbs_short_len,@irsrc_short_len,@itask_code_len,@irole_short_len,@imax_actv_level_cnt,@imax_tcat_level_cnt,@imax_rcat_level_cnt,@imax_role_level_cnt,@iday_hr_cnt,@iweek_hr_cnt,@iyear_hr_cnt,@imonth_hr_cnt,@iname_sep_char,@iyear_char,@imonth_char,@iweek_char,@iday_char,@ihour_char,@iminute_char,@idef_complete_pct_type,@idefault_duration_type,@idatabase_version,@idb_name,@iphase_label,@irpt_header_1,@irpt_header_2,@irpt_header_3,@irpt_footer_1,@irpt_footer_2,@irpt_footer_3,@irpt_user_1,@irpt_user_2,@irpt_user_3,@icurr_id,@idef_task_type, @idelete_session_id
  else
    fetch deleted_c into @dprefer_id,@dmax_wbs_level_cnt,@dmax_rsrc_level_cnt,@dmax_obs_level_cnt,@dwbs_short_len,@drsrc_short_len,@dtask_code_len,@drole_short_len,@dmax_actv_level_cnt,@dmax_tcat_level_cnt,@dmax_rcat_level_cnt,@dmax_role_level_cnt,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt,@dname_sep_char,@dyear_char,@dmonth_char,@dweek_char,@dday_char,@dhour_char,@dminute_char,@ddef_complete_pct_type,@ddefault_duration_type,@ddatabase_version,@ddb_name,@dphase_label,@drpt_header_1,@drpt_header_2,@drpt_header_3,@drpt_footer_1,@drpt_footer_2,@drpt_footer_3,@drpt_user_1,@drpt_user_2,@drpt_user_3,@dcurr_id,@ddef_task_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dprefer_id;
				

    end else begin
    	set @pk1 = @iprefer_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dprefer_id,@dmax_wbs_level_cnt,@dmax_rsrc_level_cnt,@dmax_obs_level_cnt,@dwbs_short_len,@drsrc_short_len,@dtask_code_len,@drole_short_len,@dmax_actv_level_cnt,@dmax_tcat_level_cnt,@dmax_rcat_level_cnt,@dmax_role_level_cnt,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt,@dname_sep_char,@dyear_char,@dmonth_char,@dweek_char,@dday_char,@dhour_char,@dminute_char,@ddef_complete_pct_type,@ddefault_duration_type,@ddatabase_version,@ddb_name,@dphase_label,@drpt_header_1,@drpt_header_2,@drpt_header_3,@drpt_footer_1,@drpt_footer_2,@drpt_footer_3,@drpt_user_1,@drpt_user_2,@drpt_user_3,@dcurr_id,@ddef_task_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(prefer_id)  exec audit_data 'PREFER','prefer_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprefer_id,@iprefer_id,@audit_data OUTPUT
      if (@loper='D') or  update(max_wbs_level_cnt)  exec audit_data 'PREFER','max_wbs_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_wbs_level_cnt,@imax_wbs_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_rsrc_level_cnt)  exec audit_data 'PREFER','max_rsrc_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_rsrc_level_cnt,@imax_rsrc_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_obs_level_cnt)  exec audit_data 'PREFER','max_obs_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_obs_level_cnt,@imax_obs_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_short_len)  exec audit_data 'PREFER','wbs_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_short_len,@iwbs_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_short_len)  exec audit_data 'PREFER','rsrc_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_short_len,@irsrc_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_len)  exec audit_data 'PREFER','task_code_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_len,@itask_code_len,@audit_data OUTPUT
      if (@loper='D') or  update(role_short_len)  exec audit_data 'PREFER','role_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_short_len,@irole_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(max_actv_level_cnt)  exec audit_data 'PREFER','max_actv_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_actv_level_cnt,@imax_actv_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_tcat_level_cnt)  exec audit_data 'PREFER','max_tcat_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_tcat_level_cnt,@imax_tcat_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_rcat_level_cnt)  exec audit_data 'PREFER','max_rcat_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_rcat_level_cnt,@imax_rcat_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_role_level_cnt)  exec audit_data 'PREFER','max_role_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_role_level_cnt,@imax_role_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(day_hr_cnt)  exec audit_data 'PREFER','day_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dday_hr_cnt,@iday_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(week_hr_cnt)  exec audit_data 'PREFER','week_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_hr_cnt,@iweek_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(year_hr_cnt)  exec audit_data 'PREFER','year_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dyear_hr_cnt,@iyear_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(month_hr_cnt)  exec audit_data 'PREFER','month_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmonth_hr_cnt,@imonth_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(name_sep_char)  exec audit_data 'PREFER','name_sep_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dname_sep_char,@iname_sep_char,@audit_data OUTPUT
      if (@loper='D') or  update(year_char)  exec audit_data 'PREFER','year_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dyear_char,@iyear_char,@audit_data OUTPUT
      if (@loper='D') or  update(month_char)  exec audit_data 'PREFER','month_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmonth_char,@imonth_char,@audit_data OUTPUT
      if (@loper='D') or  update(week_char)  exec audit_data 'PREFER','week_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_char,@iweek_char,@audit_data OUTPUT
      if (@loper='D') or  update(day_char)  exec audit_data 'PREFER','day_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dday_char,@iday_char,@audit_data OUTPUT
      if (@loper='D') or  update(hour_char)  exec audit_data 'PREFER','hour_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhour_char,@ihour_char,@audit_data OUTPUT
      if (@loper='D') or  update(minute_char)  exec audit_data 'PREFER','minute_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dminute_char,@iminute_char,@audit_data OUTPUT
      if (@loper='D') or  update(def_complete_pct_type)  exec audit_data 'PREFER','def_complete_pct_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_complete_pct_type,@idef_complete_pct_type,@audit_data OUTPUT
      if (@loper='D') or  update(default_duration_type)  exec audit_data 'PREFER','default_duration_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_duration_type,@idefault_duration_type,@audit_data OUTPUT
      if (@loper='D') or  update(database_version)  exec audit_data 'PREFER','database_version',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddatabase_version,@idatabase_version,@audit_data OUTPUT
      if (@loper='D') or  update(db_name)  exec audit_data 'PREFER','db_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddb_name,@idb_name,@audit_data OUTPUT
      if (@loper='D') or  update(phase_label)  exec audit_data 'PREFER','phase_label',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_label,@iphase_label,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_header_1)  exec audit_data 'PREFER','rpt_header_1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_header_1,@irpt_header_1,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_header_2)  exec audit_data 'PREFER','rpt_header_2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_header_2,@irpt_header_2,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_header_3)  exec audit_data 'PREFER','rpt_header_3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_header_3,@irpt_header_3,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_footer_1)  exec audit_data 'PREFER','rpt_footer_1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_footer_1,@irpt_footer_1,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_footer_2)  exec audit_data 'PREFER','rpt_footer_2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_footer_2,@irpt_footer_2,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_footer_3)  exec audit_data 'PREFER','rpt_footer_3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_footer_3,@irpt_footer_3,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_user_1)  exec audit_data 'PREFER','rpt_user_1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_user_1,@irpt_user_1,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_user_2)  exec audit_data 'PREFER','rpt_user_2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_user_2,@irpt_user_2,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_user_3)  exec audit_data 'PREFER','rpt_user_3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_user_3,@irpt_user_3,@audit_data OUTPUT
      if (@loper='D') or  update(curr_id)  exec audit_data 'PREFER','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(def_task_type)  exec audit_data 'PREFER','def_task_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_task_type,@idef_task_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PREFER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PREFER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iprefer_id,@imax_wbs_level_cnt,@imax_rsrc_level_cnt,@imax_obs_level_cnt,@iwbs_short_len,@irsrc_short_len,@itask_code_len,@irole_short_len,@imax_actv_level_cnt,@imax_tcat_level_cnt,@imax_rcat_level_cnt,@imax_role_level_cnt,@iday_hr_cnt,@iweek_hr_cnt,@iyear_hr_cnt,@imonth_hr_cnt,@iname_sep_char,@iyear_char,@imonth_char,@iweek_char,@iday_char,@ihour_char,@iminute_char,@idef_complete_pct_type,@idefault_duration_type,@idatabase_version,@idb_name,@iphase_label,@irpt_header_1,@irpt_header_2,@irpt_header_3,@irpt_footer_1,@irpt_footer_2,@irpt_footer_3,@irpt_user_1,@irpt_user_2,@irpt_user_3,@icurr_id,@idef_task_type, @idelete_session_id;
    else
     fetch deleted_c into @dprefer_id,@dmax_wbs_level_cnt,@dmax_rsrc_level_cnt,@dmax_obs_level_cnt,@dwbs_short_len,@drsrc_short_len,@dtask_code_len,@drole_short_len,@dmax_actv_level_cnt,@dmax_tcat_level_cnt,@dmax_rcat_level_cnt,@dmax_role_level_cnt,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt,@dname_sep_char,@dyear_char,@dmonth_char,@dweek_char,@dday_char,@dhour_char,@dminute_char,@ddef_complete_pct_type,@ddefault_duration_type,@ddatabase_version,@ddb_name,@dphase_label,@drpt_header_1,@drpt_header_2,@drpt_header_3,@drpt_footer_1,@drpt_footer_2,@drpt_footer_3,@drpt_user_1,@drpt_user_2,@drpt_user_3,@dcurr_id,@ddef_task_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROCGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROCGROUP' AND xtype = 'TR')
    DROP trigger PRMAUD_PROCGROUP

PRMAUD_PROCGROUP
create trigger PRMAUD_PROCGROUP
on PROCGROUP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproc_group_id varchar(255),@iseq_num varchar(255),@iproc_group_name varchar(255)

  declare @dproc_group_id varchar(255),@dseq_num varchar(255),@dproc_group_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proc_group_id) and
			not update(seq_num) and
			not update(proc_group_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROCGROUP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCGROUP',proc_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCGROUP', proc_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proc_group_id,seq_num,proc_group_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proc_group_id,seq_num,proc_group_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproc_group_id,@iseq_num,@iproc_group_name, @idelete_session_id
  else
    fetch deleted_c into @dproc_group_id,@dseq_num,@dproc_group_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproc_group_id;
				

    end else begin
    	set @pk1 = @iproc_group_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproc_group_id,@dseq_num,@dproc_group_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proc_group_id)  exec audit_data 'PROCGROUP','proc_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_group_id,@iproc_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PROCGROUP','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proc_group_name)  exec audit_data 'PROCGROUP','proc_group_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_group_name,@iproc_group_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROCGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROCGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproc_group_id,@iseq_num,@iproc_group_name, @idelete_session_id;
    else
     fetch deleted_c into @dproc_group_id,@dseq_num,@dproc_group_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROCITEM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROCITEM' AND xtype = 'TR')
    DROP trigger PRMAUD_PROCITEM

PRMAUD_PROCITEM
create trigger PRMAUD_PROCITEM
on PROCITEM
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproc_item_id varchar(255),@iproc_group_id varchar(255),@iseq_num varchar(255),@iproc_name varchar(255),@iproc_wt varchar(255)

  declare @dproc_item_id varchar(255),@dproc_group_id varchar(255),@dseq_num varchar(255),@dproc_name varchar(255),@dproc_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proc_item_id) and
			not update(proc_group_id) and
			not update(seq_num) and
			not update(proc_name) and
			not update(proc_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROCITEM', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCITEM',proc_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCITEM', proc_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proc_item_id,proc_group_id,seq_num,proc_name,proc_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proc_item_id,proc_group_id,seq_num,proc_name,proc_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproc_item_id,@iproc_group_id,@iseq_num,@iproc_name,@iproc_wt, @idelete_session_id
  else
    fetch deleted_c into @dproc_item_id,@dproc_group_id,@dseq_num,@dproc_name,@dproc_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproc_item_id;
				

    end else begin
    	set @pk1 = @iproc_item_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproc_item_id,@dproc_group_id,@dseq_num,@dproc_name,@dproc_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proc_item_id)  exec audit_data 'PROCITEM','proc_item_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_item_id,@iproc_item_id,@audit_data OUTPUT
      if (@loper='D') or  update(proc_group_id)  exec audit_data 'PROCITEM','proc_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_group_id,@iproc_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PROCITEM','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proc_name)  exec audit_data 'PROCITEM','proc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_name,@iproc_name,@audit_data OUTPUT
      if (@loper='D') or  update(proc_wt)  exec audit_data 'PROCITEM','proc_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_wt,@iproc_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROCITEM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROCITEM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproc_item_id,@iproc_group_id,@iseq_num,@iproc_name,@iproc_wt, @idelete_session_id;
    else
     fetch deleted_c into @dproc_item_id,@dproc_group_id,@dseq_num,@dproc_name,@dproc_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROFILE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROFILE' AND xtype = 'TR')
    DROP trigger PRMAUD_PROFILE

PRMAUD_PROFILE
create trigger PRMAUD_PROFILE
on PROFILE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iprof_id varchar(255),@idefault_flag varchar(255),@isuperuser_flag varchar(255),@iscope_type varchar(255),@iprof_name varchar(255)

  declare @dprof_id varchar(255),@ddefault_flag varchar(255),@dsuperuser_flag varchar(255),@dscope_type varchar(255),@dprof_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(prof_id) and
			not update(default_flag) and
			not update(superuser_flag) and
			not update(scope_type) and
			not update(prof_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROFILE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFILE',prof_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFILE', prof_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select prof_id,default_flag,superuser_flag,scope_type,prof_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select prof_id,default_flag,superuser_flag,scope_type,prof_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iprof_id,@idefault_flag,@isuperuser_flag,@iscope_type,@iprof_name, @idelete_session_id
  else
    fetch deleted_c into @dprof_id,@ddefault_flag,@dsuperuser_flag,@dscope_type,@dprof_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dprof_id;
				

    end else begin
    	set @pk1 = @iprof_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dprof_id,@ddefault_flag,@dsuperuser_flag,@dscope_type,@dprof_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(prof_id)  exec audit_data 'PROFILE','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(default_flag)  exec audit_data 'PROFILE','default_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_flag,@idefault_flag,@audit_data OUTPUT
      if (@loper='D') or  update(superuser_flag)  exec audit_data 'PROFILE','superuser_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuperuser_flag,@isuperuser_flag,@audit_data OUTPUT
      if (@loper='D') or  update(scope_type)  exec audit_data 'PROFILE','scope_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscope_type,@iscope_type,@audit_data OUTPUT
      if (@loper='D') or  update(prof_name)  exec audit_data 'PROFILE','prof_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_name,@iprof_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROFILE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROFILE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iprof_id,@idefault_flag,@isuperuser_flag,@iscope_type,@iprof_name, @idelete_session_id;
    else
     fetch deleted_c into @dprof_id,@ddefault_flag,@dsuperuser_flag,@dscope_type,@dprof_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROFPRIV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROFPRIV' AND xtype = 'TR')
    DROP trigger PRMAUD_PROFPRIV

PRMAUD_PROFPRIV
create trigger PRMAUD_PROFPRIV
on PROFPRIV
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iprof_id varchar(255),@ipriv_num varchar(255),@iallow_flag varchar(255)

  declare @dprof_id varchar(255),@dpriv_num varchar(255),@dallow_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(prof_id) and
			not update(priv_num) and
			not update(allow_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROFPRIV', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFPRIV',prof_id,priv_num,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFPRIV', prof_id,priv_num,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select prof_id,priv_num,allow_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select prof_id,priv_num,allow_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iprof_id,@ipriv_num,@iallow_flag, @idelete_session_id
  else
    fetch deleted_c into @dprof_id,@dpriv_num,@dallow_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dprof_id;
				
set @pk2 = @dpriv_num;
				

    end else begin
    	set @pk1 = @iprof_id;
				
set @pk2 = @ipriv_num;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dprof_id,@dpriv_num,@dallow_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(prof_id)  exec audit_data 'PROFPRIV','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(priv_num)  exec audit_data 'PROFPRIV','priv_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriv_num,@ipriv_num,@audit_data OUTPUT
      if (@loper='D') or  update(allow_flag)  exec audit_data 'PROFPRIV','allow_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dallow_flag,@iallow_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROFPRIV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROFPRIV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iprof_id,@ipriv_num,@iallow_flag, @idelete_session_id;
    else
     fetch deleted_c into @dprof_id,@dpriv_num,@dallow_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_QUALITY
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_QUALITY' AND xtype = 'TR')
    DROP trigger PRMAUD_QUALITY

PRMAUD_QUALITY
create trigger PRMAUD_QUALITY
on QUALITY
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iqual_id varchar(255),@iqual_seq_num varchar(255),@ireq_flag varchar(255),@iqual_name varchar(255)

  declare @dqual_id varchar(255),@dqual_seq_num varchar(255),@dreq_flag varchar(255),@dqual_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(qual_id) and
			not update(qual_seq_num) and
			not update(req_flag) and
			not update(qual_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'QUALITY', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'QUALITY',qual_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'QUALITY', qual_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select qual_id,qual_seq_num,req_flag,qual_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select qual_id,qual_seq_num,req_flag,qual_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iqual_id,@iqual_seq_num,@ireq_flag,@iqual_name, @idelete_session_id
  else
    fetch deleted_c into @dqual_id,@dqual_seq_num,@dreq_flag,@dqual_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dqual_id;
				

    end else begin
    	set @pk1 = @iqual_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dqual_id,@dqual_seq_num,@dreq_flag,@dqual_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(qual_id)  exec audit_data 'QUALITY','qual_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqual_id,@iqual_id,@audit_data OUTPUT
      if (@loper='D') or  update(qual_seq_num)  exec audit_data 'QUALITY','qual_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqual_seq_num,@iqual_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(req_flag)  exec audit_data 'QUALITY','req_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreq_flag,@ireq_flag,@audit_data OUTPUT
      if (@loper='D') or  update(qual_name)  exec audit_data 'QUALITY','qual_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqual_name,@iqual_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'QUALITY', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'QUALITY', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iqual_id,@iqual_seq_num,@ireq_flag,@iqual_name, @idelete_session_id;
    else
     fetch deleted_c into @dqual_id,@dqual_seq_num,@dreq_flag,@dqual_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_QUERYLIB
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_QUERYLIB' AND xtype = 'TR')
    DROP trigger PRMAUD_QUERYLIB

PRMAUD_QUERYLIB
create trigger PRMAUD_QUERYLIB
on QUERYLIB
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iquery_lib_id varchar(255),@iapp_name varchar(255),@icore_flag varchar(255),@imatch_sql varchar(4000),@ihints varchar(4000),@ireplacement_sql varchar(4000)

  declare @dquery_lib_id varchar(255),@dapp_name varchar(255),@dcore_flag varchar(255),@dmatch_sql varchar(4000),@dhints varchar(4000),@dreplacement_sql varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(query_lib_id) and
			not update(app_name) and
			not update(core_flag) and
			not update(match_sql) and
			not update(hints) and
			not update(replacement_sql) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'QUERYLIB', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'QUERYLIB',query_lib_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'QUERYLIB', query_lib_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select query_lib_id,app_name,core_flag,match_sql,hints,replacement_sql
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select query_lib_id,app_name,core_flag,match_sql,hints,replacement_sql
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iquery_lib_id,@iapp_name,@icore_flag,@imatch_sql,@ihints,@ireplacement_sql, @idelete_session_id
  else
    fetch deleted_c into @dquery_lib_id,@dapp_name,@dcore_flag,@dmatch_sql,@dhints,@dreplacement_sql, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dquery_lib_id;
				

    end else begin
    	set @pk1 = @iquery_lib_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dquery_lib_id,@dapp_name,@dcore_flag,@dmatch_sql,@dhints,@dreplacement_sql, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(query_lib_id)  exec audit_data 'QUERYLIB','query_lib_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dquery_lib_id,@iquery_lib_id,@audit_data OUTPUT
      if (@loper='D') or  update(app_name)  exec audit_data 'QUERYLIB','app_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_name,@iapp_name,@audit_data OUTPUT
      if (@loper='D') or  update(core_flag)  exec audit_data 'QUERYLIB','core_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcore_flag,@icore_flag,@audit_data OUTPUT
      if (@loper='D') or  update(match_sql)  exec audit_data 'QUERYLIB','match_sql',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmatch_sql,@imatch_sql,@audit_data OUTPUT
      if (@loper='D') or  update(hints)  exec audit_data 'QUERYLIB','hints',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhints,@ihints,@audit_data OUTPUT
      if (@loper='D') or  update(replacement_sql)  exec audit_data 'QUERYLIB','replacement_sql',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreplacement_sql,@ireplacement_sql,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'QUERYLIB', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'QUERYLIB', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iquery_lib_id,@iapp_name,@icore_flag,@imatch_sql,@ihints,@ireplacement_sql, @idelete_session_id;
    else
     fetch deleted_c into @dquery_lib_id,@dapp_name,@dcore_flag,@dmatch_sql,@dhints,@dreplacement_sql, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RCATTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_RCATTYPE

PRMAUD_RCATTYPE
create trigger PRMAUD_RCATTYPE
on RCATTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_catg_type_id varchar(255),@iseq_num varchar(255),@irsrc_catg_short_len varchar(255),@irsrc_catg_type varchar(255)

  declare @drsrc_catg_type_id varchar(255),@dseq_num varchar(255),@drsrc_catg_short_len varchar(255),@drsrc_catg_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_catg_type_id) and
			not update(seq_num) and
			not update(rsrc_catg_short_len) and
			not update(rsrc_catg_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RCATTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATTYPE',rsrc_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATTYPE', rsrc_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_catg_type_id,seq_num,rsrc_catg_short_len,rsrc_catg_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_catg_type_id,seq_num,rsrc_catg_short_len,rsrc_catg_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_len,@irsrc_catg_type, @idelete_session_id
  else
    fetch deleted_c into @drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_len,@drsrc_catg_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_catg_type_id;
				

    end else begin
    	set @pk1 = @irsrc_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_len,@drsrc_catg_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_catg_type_id)  exec audit_data 'RCATTYPE','rsrc_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type_id,@irsrc_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RCATTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_short_len)  exec audit_data 'RCATTYPE','rsrc_catg_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_short_len,@irsrc_catg_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_type)  exec audit_data 'RCATTYPE','rsrc_catg_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type,@irsrc_catg_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_len,@irsrc_catg_type, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_len,@drsrc_catg_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RCATVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_RCATVAL

PRMAUD_RCATVAL
create trigger PRMAUD_RCATVAL
on RCATVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_catg_id varchar(255),@irsrc_catg_type_id varchar(255),@iseq_num varchar(255),@irsrc_catg_short_name varchar(255),@iparent_rsrc_catg_id varchar(255),@irsrc_catg_name varchar(255)

  declare @drsrc_catg_id varchar(255),@drsrc_catg_type_id varchar(255),@dseq_num varchar(255),@drsrc_catg_short_name varchar(255),@dparent_rsrc_catg_id varchar(255),@drsrc_catg_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_catg_id) and
			not update(rsrc_catg_type_id) and
			not update(seq_num) and
			not update(rsrc_catg_short_name) and
			not update(parent_rsrc_catg_id) and
			not update(rsrc_catg_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RCATVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATVAL',rsrc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATVAL', rsrc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_catg_id,rsrc_catg_type_id,seq_num,rsrc_catg_short_name,parent_rsrc_catg_id,rsrc_catg_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_catg_id,rsrc_catg_type_id,seq_num,rsrc_catg_short_name,parent_rsrc_catg_id,rsrc_catg_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_catg_id,@irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_name,@iparent_rsrc_catg_id,@irsrc_catg_name, @idelete_session_id
  else
    fetch deleted_c into @drsrc_catg_id,@drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_name,@dparent_rsrc_catg_id,@drsrc_catg_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_catg_id;
				

    end else begin
    	set @pk1 = @irsrc_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_catg_id,@drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_name,@dparent_rsrc_catg_id,@drsrc_catg_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_catg_id)  exec audit_data 'RCATVAL','rsrc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_id,@irsrc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_type_id)  exec audit_data 'RCATVAL','rsrc_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type_id,@irsrc_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RCATVAL','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_short_name)  exec audit_data 'RCATVAL','rsrc_catg_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_short_name,@irsrc_catg_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_rsrc_catg_id)  exec audit_data 'RCATVAL','parent_rsrc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_rsrc_catg_id,@iparent_rsrc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_name)  exec audit_data 'RCATVAL','rsrc_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_name,@irsrc_catg_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_catg_id,@irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_name,@iparent_rsrc_catg_id,@irsrc_catg_name, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_catg_id,@drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_name,@dparent_rsrc_catg_id,@drsrc_catg_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RISKCTRL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RISKCTRL' AND xtype = 'TR')
    DROP trigger PRMAUD_RISKCTRL

PRMAUD_RISKCTRL
create trigger PRMAUD_RISKCTRL
on RISKCTRL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irisk_id varchar(255),@itemplate_id varchar(255)

  declare @drisk_id varchar(255),@dtemplate_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(risk_id) and
			not update(template_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RISKCTRL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKCTRL',risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKCTRL', risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select risk_id,template_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select risk_id,template_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irisk_id,@itemplate_id, @idelete_session_id
  else
    fetch deleted_c into @drisk_id,@dtemplate_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drisk_id;
				

    end else begin
    	set @pk1 = @irisk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drisk_id,@dtemplate_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(risk_id)  exec audit_data 'RISKCTRL','risk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_id,@irisk_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'RISKCTRL','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RISKCTRL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RISKCTRL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irisk_id,@itemplate_id, @idelete_session_id;
    else
     fetch deleted_c into @drisk_id,@dtemplate_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RISKTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RISKTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_RISKTYPE

PRMAUD_RISKTYPE
create trigger PRMAUD_RISKTYPE
on RISKTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irisk_type_id varchar(255),@iseq_num varchar(255),@irisk_type varchar(255)

  declare @drisk_type_id varchar(255),@dseq_num varchar(255),@drisk_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(risk_type_id) and
			not update(seq_num) and
			not update(risk_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RISKTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKTYPE',risk_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKTYPE', risk_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select risk_type_id,seq_num,risk_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select risk_type_id,seq_num,risk_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irisk_type_id,@iseq_num,@irisk_type, @idelete_session_id
  else
    fetch deleted_c into @drisk_type_id,@dseq_num,@drisk_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drisk_type_id;
				

    end else begin
    	set @pk1 = @irisk_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drisk_type_id,@dseq_num,@drisk_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(risk_type_id)  exec audit_data 'RISKTYPE','risk_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_type_id,@irisk_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RISKTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(risk_type)  exec audit_data 'RISKTYPE','risk_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_type,@irisk_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RISKTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RISKTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irisk_type_id,@iseq_num,@irisk_type, @idelete_session_id;
    else
     fetch deleted_c into @drisk_type_id,@dseq_num,@drisk_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ROLES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ROLES' AND xtype = 'TR')
    DROP trigger PRMAUD_ROLES

PRMAUD_ROLES
create trigger PRMAUD_ROLES
on ROLES
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irole_id varchar(255),@irole_short_name varchar(255),@irole_name varchar(255),@iseq_num varchar(255),@iparent_role_id varchar(255),@ipobs_id varchar(255)

  declare @drole_id varchar(255),@drole_short_name varchar(255),@drole_name varchar(255),@dseq_num varchar(255),@dparent_role_id varchar(255),@dpobs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(role_id) and
			not update(role_short_name) and
			not update(role_name) and
			not update(seq_num) and
			not update(parent_role_id) and
			not update(pobs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ROLES', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLES',role_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLES', role_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select role_id,role_short_name,role_name,seq_num,parent_role_id,pobs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select role_id,role_short_name,role_name,seq_num,parent_role_id,pobs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irole_id,@irole_short_name,@irole_name,@iseq_num,@iparent_role_id,@ipobs_id, @idelete_session_id
  else
    fetch deleted_c into @drole_id,@drole_short_name,@drole_name,@dseq_num,@dparent_role_id,@dpobs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drole_id;
				

    end else begin
    	set @pk1 = @irole_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drole_id,@drole_short_name,@drole_name,@dseq_num,@dparent_role_id,@dpobs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(role_id)  exec audit_data 'ROLES','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_short_name)  exec audit_data 'ROLES','role_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_short_name,@irole_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(role_name)  exec audit_data 'ROLES','role_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_name,@irole_name,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'ROLES','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(parent_role_id)  exec audit_data 'ROLES','parent_role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_role_id,@iparent_role_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'ROLES','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ROLES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ROLES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irole_id,@irole_short_name,@irole_name,@iseq_num,@iparent_role_id,@ipobs_id, @idelete_session_id;
    else
     fetch deleted_c into @drole_id,@drole_short_name,@drole_name,@dseq_num,@dparent_role_id,@dpobs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RPT' AND xtype = 'TR')
    DROP trigger PRMAUD_RPT

PRMAUD_RPT
create trigger PRMAUD_RPT
on RPT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_id varchar(255),@irpt_type varchar(255),@irpt_name varchar(255),@irpt_group_id varchar(255),@irpt_state varchar(255),@ilast_run_date varchar(255)

  declare @drpt_id varchar(255),@drpt_type varchar(255),@drpt_name varchar(255),@drpt_group_id varchar(255),@drpt_state varchar(255),@dlast_run_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_id) and
			not update(rpt_type) and
			not update(rpt_name) and
			not update(rpt_group_id) and
			not update(rpt_state) and
			not update(last_run_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RPT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPT',rpt_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPT', rpt_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_id,rpt_type,rpt_name,rpt_group_id,rpt_state,last_run_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_id,rpt_type,rpt_name,rpt_group_id,rpt_state,last_run_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_id,@irpt_type,@irpt_name,@irpt_group_id,@irpt_state,@ilast_run_date, @idelete_session_id
  else
    fetch deleted_c into @drpt_id,@drpt_type,@drpt_name,@drpt_group_id,@drpt_state,@dlast_run_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_id;
				

    end else begin
    	set @pk1 = @irpt_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_id,@drpt_type,@drpt_name,@drpt_group_id,@drpt_state,@dlast_run_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_id)  exec audit_data 'RPT','rpt_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_id,@irpt_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_type)  exec audit_data 'RPT','rpt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_type,@irpt_type,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_name)  exec audit_data 'RPT','rpt_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_name,@irpt_name,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_group_id)  exec audit_data 'RPT','rpt_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_id,@irpt_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_state)  exec audit_data 'RPT','rpt_state',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_state,@irpt_state,@audit_data OUTPUT
      if (@loper='D') or  update(last_run_date)  exec audit_data 'RPT','last_run_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_run_date,@ilast_run_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_id,@irpt_type,@irpt_name,@irpt_group_id,@irpt_state,@ilast_run_date, @idelete_session_id;
    else
     fetch deleted_c into @drpt_id,@drpt_type,@drpt_name,@drpt_group_id,@drpt_state,@dlast_run_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RPTGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RPTGROUP' AND xtype = 'TR')
    DROP trigger PRMAUD_RPTGROUP

PRMAUD_RPTGROUP
create trigger PRMAUD_RPTGROUP
on RPTGROUP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_group_id varchar(255),@irpt_group_seq_num varchar(255),@irpt_group_name varchar(255),@iparent_group_id varchar(255)

  declare @drpt_group_id varchar(255),@drpt_group_seq_num varchar(255),@drpt_group_name varchar(255),@dparent_group_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_group_id) and
			not update(rpt_group_seq_num) and
			not update(rpt_group_name) and
			not update(parent_group_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RPTGROUP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTGROUP',rpt_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTGROUP', rpt_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_group_id,rpt_group_seq_num,rpt_group_name,parent_group_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_group_id,rpt_group_seq_num,rpt_group_name,parent_group_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_group_id,@irpt_group_seq_num,@irpt_group_name,@iparent_group_id, @idelete_session_id
  else
    fetch deleted_c into @drpt_group_id,@drpt_group_seq_num,@drpt_group_name,@dparent_group_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_group_id;
				

    end else begin
    	set @pk1 = @irpt_group_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_group_id,@drpt_group_seq_num,@drpt_group_name,@dparent_group_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_group_id)  exec audit_data 'RPTGROUP','rpt_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_id,@irpt_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_group_seq_num)  exec audit_data 'RPTGROUP','rpt_group_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_seq_num,@irpt_group_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_group_name)  exec audit_data 'RPTGROUP','rpt_group_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_name,@irpt_group_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_group_id)  exec audit_data 'RPTGROUP','parent_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_group_id,@iparent_group_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RPTGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RPTGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_group_id,@irpt_group_seq_num,@irpt_group_name,@iparent_group_id, @idelete_session_id;
    else
     fetch deleted_c into @drpt_group_id,@drpt_group_seq_num,@drpt_group_name,@dparent_group_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRC' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRC

PRMAUD_RSRC
create trigger PRMAUD_RSRC
on RSRC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@irsrc_seq_num varchar(255),@irsrc_type varchar(255),@iot_flag varchar(255),@irsrc_short_name varchar(255),@irsrc_name varchar(255),@iparent_rsrc_id varchar(255),@irole_id varchar(255),@ipobs_id varchar(255),@imax_qty_per_hr varchar(255),@iot_factor varchar(255),@idef_qty_per_hr varchar(255),@icost_per_qty varchar(255),@iguid varchar(255),@icost_qty_type varchar(255),@ioffice_phone varchar(255),@iemployee_code varchar(255),@irsrc_title_name varchar(255),@iemail_addr varchar(255),@icurr_id varchar(255),@iunit_id varchar(255),@idef_cost_qty_link_flag varchar(255)

  declare @drsrc_id varchar(255),@drsrc_seq_num varchar(255),@drsrc_type varchar(255),@dot_flag varchar(255),@drsrc_short_name varchar(255),@drsrc_name varchar(255),@dparent_rsrc_id varchar(255),@drole_id varchar(255),@dpobs_id varchar(255),@dmax_qty_per_hr varchar(255),@dot_factor varchar(255),@ddef_qty_per_hr varchar(255),@dcost_per_qty varchar(255),@dguid varchar(255),@dcost_qty_type varchar(255),@doffice_phone varchar(255),@demployee_code varchar(255),@drsrc_title_name varchar(255),@demail_addr varchar(255),@dcurr_id varchar(255),@dunit_id varchar(255),@ddef_cost_qty_link_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(rsrc_seq_num) and
			not update(rsrc_type) and
			not update(ot_flag) and
			not update(rsrc_short_name) and
			not update(rsrc_name) and
			not update(parent_rsrc_id) and
			not update(role_id) and
			not update(pobs_id) and
			not update(max_qty_per_hr) and
			not update(ot_factor) and
			not update(def_qty_per_hr) and
			not update(cost_per_qty) and
			not update(guid) and
			not update(cost_qty_type) and
			not update(office_phone) and
			not update(employee_code) and
			not update(rsrc_title_name) and
			not update(email_addr) and
			not update(curr_id) and
			not update(unit_id) and
			not update(def_cost_qty_link_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRC',rsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRC', rsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,rsrc_seq_num,rsrc_type,ot_flag,rsrc_short_name,rsrc_name,parent_rsrc_id,role_id,pobs_id,max_qty_per_hr,ot_factor,def_qty_per_hr,cost_per_qty,guid,cost_qty_type,office_phone,employee_code,rsrc_title_name,email_addr,curr_id,unit_id,def_cost_qty_link_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,rsrc_seq_num,rsrc_type,ot_flag,rsrc_short_name,rsrc_name,parent_rsrc_id,role_id,pobs_id,max_qty_per_hr,ot_factor,def_qty_per_hr,cost_per_qty,guid,cost_qty_type,office_phone,employee_code,rsrc_title_name,email_addr,curr_id,unit_id,def_cost_qty_link_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@irsrc_seq_num,@irsrc_type,@iot_flag,@irsrc_short_name,@irsrc_name,@iparent_rsrc_id,@irole_id,@ipobs_id,@imax_qty_per_hr,@iot_factor,@idef_qty_per_hr,@icost_per_qty,@iguid,@icost_qty_type,@ioffice_phone,@iemployee_code,@irsrc_title_name,@iemail_addr,@icurr_id,@iunit_id,@idef_cost_qty_link_flag, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@drsrc_seq_num,@drsrc_type,@dot_flag,@drsrc_short_name,@drsrc_name,@dparent_rsrc_id,@drole_id,@dpobs_id,@dmax_qty_per_hr,@dot_factor,@ddef_qty_per_hr,@dcost_per_qty,@dguid,@dcost_qty_type,@doffice_phone,@demployee_code,@drsrc_title_name,@demail_addr,@dcurr_id,@dunit_id,@ddef_cost_qty_link_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				

    end else begin
    	set @pk1 = @irsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@drsrc_seq_num,@drsrc_type,@dot_flag,@drsrc_short_name,@drsrc_name,@dparent_rsrc_id,@drole_id,@dpobs_id,@dmax_qty_per_hr,@dot_factor,@ddef_qty_per_hr,@dcost_per_qty,@dguid,@dcost_qty_type,@doffice_phone,@demployee_code,@drsrc_title_name,@demail_addr,@dcurr_id,@dunit_id,@ddef_cost_qty_link_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRC','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_seq_num)  exec audit_data 'RSRC','rsrc_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_seq_num,@irsrc_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_type)  exec audit_data 'RSRC','rsrc_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_type,@irsrc_type,@audit_data OUTPUT
      if (@loper='D') or  update(ot_flag)  exec audit_data 'RSRC','ot_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dot_flag,@iot_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_short_name)  exec audit_data 'RSRC','rsrc_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_short_name,@irsrc_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_name)  exec audit_data 'RSRC','rsrc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_name,@irsrc_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_rsrc_id)  exec audit_data 'RSRC','parent_rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_rsrc_id,@iparent_rsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'RSRC','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'RSRC','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(max_qty_per_hr)  exec audit_data 'RSRC','max_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_qty_per_hr,@imax_qty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(ot_factor)  exec audit_data 'RSRC','ot_factor',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dot_factor,@iot_factor,@audit_data OUTPUT
      if (@loper='D') or  update(def_qty_per_hr)  exec audit_data 'RSRC','def_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_qty_per_hr,@idef_qty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty)  exec audit_data 'RSRC','cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty,@icost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'RSRC','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(cost_qty_type)  exec audit_data 'RSRC','cost_qty_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_qty_type,@icost_qty_type,@audit_data OUTPUT
      if (@loper='D') or  update(office_phone)  exec audit_data 'RSRC','office_phone',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@doffice_phone,@ioffice_phone,@audit_data OUTPUT
      if (@loper='D') or  update(employee_code)  exec audit_data 'RSRC','employee_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demployee_code,@iemployee_code,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_title_name)  exec audit_data 'RSRC','rsrc_title_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_title_name,@irsrc_title_name,@audit_data OUTPUT
      if (@loper='D') or  update(email_addr)  exec audit_data 'RSRC','email_addr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_addr,@iemail_addr,@audit_data OUTPUT
      if (@loper='D') or  update(curr_id)  exec audit_data 'RSRC','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(unit_id)  exec audit_data 'RSRC','unit_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_id,@iunit_id,@audit_data OUTPUT
      if (@loper='D') or  update(def_cost_qty_link_flag)  exec audit_data 'RSRC','def_cost_qty_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_cost_qty_link_flag,@idef_cost_qty_link_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@irsrc_seq_num,@irsrc_type,@iot_flag,@irsrc_short_name,@irsrc_name,@iparent_rsrc_id,@irole_id,@ipobs_id,@imax_qty_per_hr,@iot_factor,@idef_qty_per_hr,@icost_per_qty,@iguid,@icost_qty_type,@ioffice_phone,@iemployee_code,@irsrc_title_name,@iemail_addr,@icurr_id,@iunit_id,@idef_cost_qty_link_flag, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@drsrc_seq_num,@drsrc_type,@dot_flag,@drsrc_short_name,@drsrc_name,@dparent_rsrc_id,@drole_id,@dpobs_id,@dmax_qty_per_hr,@dot_factor,@ddef_qty_per_hr,@dcost_per_qty,@dguid,@dcost_qty_type,@doffice_phone,@demployee_code,@drsrc_title_name,@demail_addr,@dcurr_id,@dunit_id,@ddef_cost_qty_link_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCRCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCRCAT' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCRCAT

PRMAUD_RSRCRCAT
create trigger PRMAUD_RSRCRCAT
on RSRCRCAT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@irsrc_catg_type_id varchar(255),@irsrc_catg_id varchar(255)

  declare @drsrc_id varchar(255),@drsrc_catg_type_id varchar(255),@drsrc_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(rsrc_catg_type_id) and
			not update(rsrc_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCRCAT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCRCAT',rsrc_id,rsrc_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCRCAT', rsrc_id,rsrc_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,rsrc_catg_type_id,rsrc_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,rsrc_catg_type_id,rsrc_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@irsrc_catg_type_id,@irsrc_catg_id, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@drsrc_catg_type_id,@drsrc_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				
set @pk2 = @drsrc_catg_type_id;
				

    end else begin
    	set @pk1 = @irsrc_id;
				
set @pk2 = @irsrc_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@drsrc_catg_type_id,@drsrc_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCRCAT','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_type_id)  exec audit_data 'RSRCRCAT','rsrc_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type_id,@irsrc_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_id)  exec audit_data 'RSRCRCAT','rsrc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_id,@irsrc_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCRCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCRCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@irsrc_catg_type_id,@irsrc_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@drsrc_catg_type_id,@drsrc_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCROLE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCROLE' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCROLE

PRMAUD_RSRCROLE
create trigger PRMAUD_RSRCROLE
on RSRCROLE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@irole_id varchar(255),@iskill_level varchar(255)

  declare @drsrc_id varchar(255),@drole_id varchar(255),@dskill_level varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(role_id) and
			not update(skill_level) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCROLE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCROLE',rsrc_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCROLE', rsrc_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,role_id,skill_level
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,role_id,skill_level
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@irole_id,@iskill_level, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@drole_id,@dskill_level, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				
set @pk2 = @drole_id;
				

    end else begin
    	set @pk1 = @irsrc_id;
				
set @pk2 = @irole_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@drole_id,@dskill_level, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCROLE','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'RSRCROLE','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(skill_level)  exec audit_data 'RSRCROLE','skill_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dskill_level,@iskill_level,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCROLE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCROLE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@irole_id,@iskill_level, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@drole_id,@dskill_level, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASK' AND xtype = 'TR')
    DROP trigger PRMAUD_TASK

PRMAUD_TASK
create trigger PRMAUD_TASK
on TASK
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@itask_type varchar(255),@icomplete_pct_type varchar(255),@iduration_type varchar(255),@itask_name varchar(255),@itemplate_id varchar(255),@iguid varchar(255)

  declare @dtask_id varchar(255),@dtask_type varchar(255),@dcomplete_pct_type varchar(255),@dduration_type varchar(255),@dtask_name varchar(255),@dtemplate_id varchar(255),@dguid varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(task_type) and
			not update(complete_pct_type) and
			not update(duration_type) and
			not update(task_name) and
			not update(template_id) and
			not update(guid) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASK', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASK',task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASK', task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,task_type,complete_pct_type,duration_type,task_name,template_id,guid
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,task_type,complete_pct_type,duration_type,task_name,template_id,guid
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@itask_type,@icomplete_pct_type,@iduration_type,@itask_name,@itemplate_id,@iguid, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dtask_type,@dcomplete_pct_type,@dduration_type,@dtask_name,@dtemplate_id,@dguid, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				

    end else begin
    	set @pk1 = @itask_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dtask_type,@dcomplete_pct_type,@dduration_type,@dtask_name,@dtemplate_id,@dguid, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASK','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_type)  exec audit_data 'TASK','task_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_type,@itask_type,@audit_data OUTPUT
      if (@loper='D') or  update(complete_pct_type)  exec audit_data 'TASK','complete_pct_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_pct_type,@icomplete_pct_type,@audit_data OUTPUT
      if (@loper='D') or  update(duration_type)  exec audit_data 'TASK','duration_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dduration_type,@iduration_type,@audit_data OUTPUT
      if (@loper='D') or  update(task_name)  exec audit_data 'TASK','task_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_name,@itask_name,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TASK','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'TASK','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@itask_type,@icomplete_pct_type,@iduration_type,@itask_name,@itemplate_id,@iguid, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dtask_type,@dcomplete_pct_type,@dduration_type,@dtask_name,@dtemplate_id,@dguid, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKACTV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKACTV' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKACTV

PRMAUD_TASKACTV
create trigger PRMAUD_TASKACTV
on TASKACTV
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskuse_id varchar(255),@iactv_code_type_id varchar(255),@iactv_code_id varchar(255),@itemplate_id varchar(255)

  declare @dtaskuse_id varchar(255),@dactv_code_type_id varchar(255),@dactv_code_id varchar(255),@dtemplate_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskuse_id) and
			not update(actv_code_type_id) and
			not update(actv_code_id) and
			not update(template_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKACTV', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKACTV',taskuse_id,actv_code_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKACTV', taskuse_id,actv_code_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskuse_id,actv_code_type_id,actv_code_id,template_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskuse_id,actv_code_type_id,actv_code_id,template_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskuse_id,@iactv_code_type_id,@iactv_code_id,@itemplate_id, @idelete_session_id
  else
    fetch deleted_c into @dtaskuse_id,@dactv_code_type_id,@dactv_code_id,@dtemplate_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskuse_id;
				
set @pk2 = @dactv_code_type_id;
				

    end else begin
    	set @pk1 = @itaskuse_id;
				
set @pk2 = @iactv_code_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskuse_id,@dactv_code_type_id,@dactv_code_id,@dtemplate_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskuse_id)  exec audit_data 'TASKACTV','taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_id,@itaskuse_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type_id)  exec audit_data 'TASKACTV','actv_code_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_id,@iactv_code_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_id)  exec audit_data 'TASKACTV','actv_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_id,@iactv_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TASKACTV','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKACTV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKACTV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskuse_id,@iactv_code_type_id,@iactv_code_id,@itemplate_id, @idelete_session_id;
    else
     fetch deleted_c into @dtaskuse_id,@dactv_code_type_id,@dactv_code_id,@dtemplate_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKDOC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKDOC' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKDOC

PRMAUD_TASKDOC
create trigger PRMAUD_TASKDOC
on TASKDOC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskdoc_id varchar(255),@idoc_id varchar(255),@iwbs_id varchar(255),@itemplate_id varchar(255),@iwp_flag varchar(255),@itaskuse_id varchar(255)

  declare @dtaskdoc_id varchar(255),@ddoc_id varchar(255),@dwbs_id varchar(255),@dtemplate_id varchar(255),@dwp_flag varchar(255),@dtaskuse_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskdoc_id) and
			not update(doc_id) and
			not update(wbs_id) and
			not update(template_id) and
			not update(wp_flag) and
			not update(taskuse_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKDOC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKDOC',taskdoc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKDOC', taskdoc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskdoc_id,doc_id,wbs_id,template_id,wp_flag,taskuse_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskdoc_id,doc_id,wbs_id,template_id,wp_flag,taskuse_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskdoc_id,@idoc_id,@iwbs_id,@itemplate_id,@iwp_flag,@itaskuse_id, @idelete_session_id
  else
    fetch deleted_c into @dtaskdoc_id,@ddoc_id,@dwbs_id,@dtemplate_id,@dwp_flag,@dtaskuse_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskdoc_id;
				

    end else begin
    	set @pk1 = @itaskdoc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskdoc_id,@ddoc_id,@dwbs_id,@dtemplate_id,@dwp_flag,@dtaskuse_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskdoc_id)  exec audit_data 'TASKDOC','taskdoc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskdoc_id,@itaskdoc_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_id)  exec audit_data 'TASKDOC','doc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_id,@idoc_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TASKDOC','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TASKDOC','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(wp_flag)  exec audit_data 'TASKDOC','wp_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwp_flag,@iwp_flag,@audit_data OUTPUT
      if (@loper='D') or  update(taskuse_id)  exec audit_data 'TASKDOC','taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_id,@itaskuse_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKDOC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKDOC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskdoc_id,@idoc_id,@iwbs_id,@itemplate_id,@iwp_flag,@itaskuse_id, @idelete_session_id;
    else
     fetch deleted_c into @dtaskdoc_id,@ddoc_id,@dwbs_id,@dtemplate_id,@dwp_flag,@dtaskuse_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKMEMO' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKMEMO

PRMAUD_TASKMEMO
create trigger PRMAUD_TASKMEMO
on TASKMEMO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @imemo_id varchar(255),@itask_id varchar(255),@imemo_type_id varchar(255)

  declare @dmemo_id varchar(255),@dtask_id varchar(255),@dmemo_type_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(memo_id) and
			not update(task_id) and
			not update(memo_type_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKMEMO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKMEMO',memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKMEMO', memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select memo_id,task_id,memo_type_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select memo_id,task_id,memo_type_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @imemo_id,@itask_id,@imemo_type_id, @idelete_session_id
  else
    fetch deleted_c into @dmemo_id,@dtask_id,@dmemo_type_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dmemo_id;
				

    end else begin
    	set @pk1 = @imemo_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dmemo_id,@dtask_id,@dmemo_type_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(memo_id)  exec audit_data 'TASKMEMO','memo_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_id,@imemo_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKMEMO','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(memo_type_id)  exec audit_data 'TASKMEMO','memo_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type_id,@imemo_type_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @imemo_id,@itask_id,@imemo_type_id, @idelete_session_id;
    else
     fetch deleted_c into @dmemo_id,@dtask_id,@dmemo_type_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKPRED
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKPRED' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKPRED

PRMAUD_TASKPRED
create trigger PRMAUD_TASKPRED
on TASKPRED
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskuse_pred_id varchar(255),@itaskuse_id varchar(255),@ipred_taskuse_id varchar(255),@itemplate_id varchar(255),@ipred_template_id varchar(255),@ipred_type varchar(255),@ilag_hr_cnt varchar(255)

  declare @dtaskuse_pred_id varchar(255),@dtaskuse_id varchar(255),@dpred_taskuse_id varchar(255),@dtemplate_id varchar(255),@dpred_template_id varchar(255),@dpred_type varchar(255),@dlag_hr_cnt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskuse_pred_id) and
			not update(taskuse_id) and
			not update(pred_taskuse_id) and
			not update(template_id) and
			not update(pred_template_id) and
			not update(pred_type) and
			not update(lag_hr_cnt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKPRED', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPRED',taskuse_pred_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPRED', taskuse_pred_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskuse_pred_id,taskuse_id,pred_taskuse_id,template_id,pred_template_id,pred_type,lag_hr_cnt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskuse_pred_id,taskuse_id,pred_taskuse_id,template_id,pred_template_id,pred_type,lag_hr_cnt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskuse_pred_id,@itaskuse_id,@ipred_taskuse_id,@itemplate_id,@ipred_template_id,@ipred_type,@ilag_hr_cnt, @idelete_session_id
  else
    fetch deleted_c into @dtaskuse_pred_id,@dtaskuse_id,@dpred_taskuse_id,@dtemplate_id,@dpred_template_id,@dpred_type,@dlag_hr_cnt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskuse_pred_id;
				

    end else begin
    	set @pk1 = @itaskuse_pred_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskuse_pred_id,@dtaskuse_id,@dpred_taskuse_id,@dtemplate_id,@dpred_template_id,@dpred_type,@dlag_hr_cnt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskuse_pred_id)  exec audit_data 'TASKPRED','taskuse_pred_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_pred_id,@itaskuse_pred_id,@audit_data OUTPUT
      if (@loper='D') or  update(taskuse_id)  exec audit_data 'TASKPRED','taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_id,@itaskuse_id,@audit_data OUTPUT
      if (@loper='D') or  update(pred_taskuse_id)  exec audit_data 'TASKPRED','pred_taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpred_taskuse_id,@ipred_taskuse_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TASKPRED','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(pred_template_id)  exec audit_data 'TASKPRED','pred_template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpred_template_id,@ipred_template_id,@audit_data OUTPUT
      if (@loper='D') or  update(pred_type)  exec audit_data 'TASKPRED','pred_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpred_type,@ipred_type,@audit_data OUTPUT
      if (@loper='D') or  update(lag_hr_cnt)  exec audit_data 'TASKPRED','lag_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlag_hr_cnt,@ilag_hr_cnt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKPRED', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKPRED', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskuse_pred_id,@itaskuse_id,@ipred_taskuse_id,@itemplate_id,@ipred_template_id,@ipred_type,@ilag_hr_cnt, @idelete_session_id;
    else
     fetch deleted_c into @dtaskuse_pred_id,@dtaskuse_id,@dpred_taskuse_id,@dtemplate_id,@dpred_template_id,@dpred_type,@dlag_hr_cnt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKPROC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKPROC' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKPROC

PRMAUD_TASKPROC
create trigger PRMAUD_TASKPROC
on TASKPROC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproc_id varchar(255),@itask_id varchar(255),@iseq_num varchar(255),@iproc_name varchar(255),@iproc_wt varchar(255)

  declare @dproc_id varchar(255),@dtask_id varchar(255),@dseq_num varchar(255),@dproc_name varchar(255),@dproc_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proc_id) and
			not update(task_id) and
			not update(seq_num) and
			not update(proc_name) and
			not update(proc_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKPROC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPROC',proc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPROC', proc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proc_id,task_id,seq_num,proc_name,proc_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proc_id,task_id,seq_num,proc_name,proc_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproc_id,@itask_id,@iseq_num,@iproc_name,@iproc_wt, @idelete_session_id
  else
    fetch deleted_c into @dproc_id,@dtask_id,@dseq_num,@dproc_name,@dproc_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproc_id;
				

    end else begin
    	set @pk1 = @iproc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproc_id,@dtask_id,@dseq_num,@dproc_name,@dproc_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proc_id)  exec audit_data 'TASKPROC','proc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_id,@iproc_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKPROC','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'TASKPROC','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proc_name)  exec audit_data 'TASKPROC','proc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_name,@iproc_name,@audit_data OUTPUT
      if (@loper='D') or  update(proc_wt)  exec audit_data 'TASKPROC','proc_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_wt,@iproc_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKPROC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKPROC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproc_id,@itask_id,@iseq_num,@iproc_name,@iproc_wt, @idelete_session_id;
    else
     fetch deleted_c into @dproc_id,@dtask_id,@dseq_num,@dproc_name,@dproc_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKQUAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKQUAL' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKQUAL

PRMAUD_TASKQUAL
create trigger PRMAUD_TASKQUAL
on TASKQUAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iqual_id varchar(255)

  declare @dtask_id varchar(255),@dqual_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(qual_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKQUAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKQUAL',task_id,qual_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKQUAL', task_id,qual_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,qual_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,qual_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iqual_id, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dqual_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				
set @pk2 = @dqual_id;
				

    end else begin
    	set @pk1 = @itask_id;
				
set @pk2 = @iqual_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dqual_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKQUAL','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(qual_id)  exec audit_data 'TASKQUAL','qual_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqual_id,@iqual_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKQUAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKQUAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iqual_id, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dqual_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKRSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKRSRC' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKRSRC

PRMAUD_TASKRSRC
create trigger PRMAUD_TASKRSRC
on TASKRSRC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskrsrc_id varchar(255),@itaskuse_id varchar(255),@itemplate_id varchar(255),@irsrc_type varchar(255),@irole_id varchar(255),@irsrc_id varchar(255),@ipobs_id varchar(255),@iskill_level varchar(255),@iqty_per_hr varchar(255),@ilow_qty varchar(255),@ihigh_qty varchar(255),@icost_qty_link_flag varchar(255),@ilag_drtn_hr_cnt varchar(255),@ilow_cost varchar(255),@ihigh_cost varchar(255)

  declare @dtaskrsrc_id varchar(255),@dtaskuse_id varchar(255),@dtemplate_id varchar(255),@drsrc_type varchar(255),@drole_id varchar(255),@drsrc_id varchar(255),@dpobs_id varchar(255),@dskill_level varchar(255),@dqty_per_hr varchar(255),@dlow_qty varchar(255),@dhigh_qty varchar(255),@dcost_qty_link_flag varchar(255),@dlag_drtn_hr_cnt varchar(255),@dlow_cost varchar(255),@dhigh_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskrsrc_id) and
			not update(taskuse_id) and
			not update(template_id) and
			not update(rsrc_type) and
			not update(role_id) and
			not update(rsrc_id) and
			not update(pobs_id) and
			not update(skill_level) and
			not update(qty_per_hr) and
			not update(low_qty) and
			not update(high_qty) and
			not update(cost_qty_link_flag) and
			not update(lag_drtn_hr_cnt) and
			not update(low_cost) and
			not update(high_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKRSRC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKRSRC',taskrsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKRSRC', taskrsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskrsrc_id,taskuse_id,template_id,rsrc_type,role_id,rsrc_id,pobs_id,skill_level,qty_per_hr,low_qty,high_qty,cost_qty_link_flag,lag_drtn_hr_cnt,low_cost,high_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskrsrc_id,taskuse_id,template_id,rsrc_type,role_id,rsrc_id,pobs_id,skill_level,qty_per_hr,low_qty,high_qty,cost_qty_link_flag,lag_drtn_hr_cnt,low_cost,high_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskrsrc_id,@itaskuse_id,@itemplate_id,@irsrc_type,@irole_id,@irsrc_id,@ipobs_id,@iskill_level,@iqty_per_hr,@ilow_qty,@ihigh_qty,@icost_qty_link_flag,@ilag_drtn_hr_cnt,@ilow_cost,@ihigh_cost, @idelete_session_id
  else
    fetch deleted_c into @dtaskrsrc_id,@dtaskuse_id,@dtemplate_id,@drsrc_type,@drole_id,@drsrc_id,@dpobs_id,@dskill_level,@dqty_per_hr,@dlow_qty,@dhigh_qty,@dcost_qty_link_flag,@dlag_drtn_hr_cnt,@dlow_cost,@dhigh_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskrsrc_id;
				

    end else begin
    	set @pk1 = @itaskrsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskrsrc_id,@dtaskuse_id,@dtemplate_id,@drsrc_type,@drole_id,@drsrc_id,@dpobs_id,@dskill_level,@dqty_per_hr,@dlow_qty,@dhigh_qty,@dcost_qty_link_flag,@dlag_drtn_hr_cnt,@dlow_cost,@dhigh_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskrsrc_id)  exec audit_data 'TASKRSRC','taskrsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskrsrc_id,@itaskrsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(taskuse_id)  exec audit_data 'TASKRSRC','taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_id,@itaskuse_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TASKRSRC','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_type)  exec audit_data 'TASKRSRC','rsrc_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_type,@irsrc_type,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'TASKRSRC','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'TASKRSRC','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'TASKRSRC','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(skill_level)  exec audit_data 'TASKRSRC','skill_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dskill_level,@iskill_level,@audit_data OUTPUT
      if (@loper='D') or  update(qty_per_hr)  exec audit_data 'TASKRSRC','qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqty_per_hr,@iqty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(low_qty)  exec audit_data 'TASKRSRC','low_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_qty,@ilow_qty,@audit_data OUTPUT
      if (@loper='D') or  update(high_qty)  exec audit_data 'TASKRSRC','high_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_qty,@ihigh_qty,@audit_data OUTPUT
      if (@loper='D') or  update(cost_qty_link_flag)  exec audit_data 'TASKRSRC','cost_qty_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_qty_link_flag,@icost_qty_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(lag_drtn_hr_cnt)  exec audit_data 'TASKRSRC','lag_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlag_drtn_hr_cnt,@ilag_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(low_cost)  exec audit_data 'TASKRSRC','low_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_cost,@ilow_cost,@audit_data OUTPUT
      if (@loper='D') or  update(high_cost)  exec audit_data 'TASKRSRC','high_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_cost,@ihigh_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKRSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKRSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskrsrc_id,@itaskuse_id,@itemplate_id,@irsrc_type,@irole_id,@irsrc_id,@ipobs_id,@iskill_level,@iqty_per_hr,@ilow_qty,@ihigh_qty,@icost_qty_link_flag,@ilag_drtn_hr_cnt,@ilow_cost,@ihigh_cost, @idelete_session_id;
    else
     fetch deleted_c into @dtaskrsrc_id,@dtaskuse_id,@dtemplate_id,@drsrc_type,@drole_id,@drsrc_id,@dpobs_id,@dskill_level,@dqty_per_hr,@dlow_qty,@dhigh_qty,@dcost_qty_link_flag,@dlag_drtn_hr_cnt,@dlow_cost,@dhigh_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKUSE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKUSE' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKUSE

PRMAUD_TASKUSE
create trigger PRMAUD_TASKUSE
on TASKUSE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskuse_id varchar(255),@itask_id varchar(255),@itemplate_id varchar(255),@iwbs_id varchar(255),@iest_wt varchar(255),@itask_code varchar(255),@ilow_work_qty varchar(255),@ihigh_work_qty varchar(255),@ilow_equip_qty varchar(255),@ihigh_equip_qty varchar(255),@ilow_drtn_hr_cnt varchar(255),@ihigh_drtn_hr_cnt varchar(255),@iguid varchar(255)

  declare @dtaskuse_id varchar(255),@dtask_id varchar(255),@dtemplate_id varchar(255),@dwbs_id varchar(255),@dest_wt varchar(255),@dtask_code varchar(255),@dlow_work_qty varchar(255),@dhigh_work_qty varchar(255),@dlow_equip_qty varchar(255),@dhigh_equip_qty varchar(255),@dlow_drtn_hr_cnt varchar(255),@dhigh_drtn_hr_cnt varchar(255),@dguid varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskuse_id) and
			not update(task_id) and
			not update(template_id) and
			not update(wbs_id) and
			not update(est_wt) and
			not update(task_code) and
			not update(low_work_qty) and
			not update(high_work_qty) and
			not update(low_equip_qty) and
			not update(high_equip_qty) and
			not update(low_drtn_hr_cnt) and
			not update(high_drtn_hr_cnt) and
			not update(guid) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKUSE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKUSE',taskuse_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKUSE', taskuse_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskuse_id,task_id,template_id,wbs_id,est_wt,task_code,low_work_qty,high_work_qty,low_equip_qty,high_equip_qty,low_drtn_hr_cnt,high_drtn_hr_cnt,guid
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskuse_id,task_id,template_id,wbs_id,est_wt,task_code,low_work_qty,high_work_qty,low_equip_qty,high_equip_qty,low_drtn_hr_cnt,high_drtn_hr_cnt,guid
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskuse_id,@itask_id,@itemplate_id,@iwbs_id,@iest_wt,@itask_code,@ilow_work_qty,@ihigh_work_qty,@ilow_equip_qty,@ihigh_equip_qty,@ilow_drtn_hr_cnt,@ihigh_drtn_hr_cnt,@iguid, @idelete_session_id
  else
    fetch deleted_c into @dtaskuse_id,@dtask_id,@dtemplate_id,@dwbs_id,@dest_wt,@dtask_code,@dlow_work_qty,@dhigh_work_qty,@dlow_equip_qty,@dhigh_equip_qty,@dlow_drtn_hr_cnt,@dhigh_drtn_hr_cnt,@dguid, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskuse_id;
				

    end else begin
    	set @pk1 = @itaskuse_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskuse_id,@dtask_id,@dtemplate_id,@dwbs_id,@dest_wt,@dtask_code,@dlow_work_qty,@dhigh_work_qty,@dlow_equip_qty,@dhigh_equip_qty,@dlow_drtn_hr_cnt,@dhigh_drtn_hr_cnt,@dguid, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskuse_id)  exec audit_data 'TASKUSE','taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_id,@itaskuse_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKUSE','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TASKUSE','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TASKUSE','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(est_wt)  exec audit_data 'TASKUSE','est_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_wt,@iest_wt,@audit_data OUTPUT
      if (@loper='D') or  update(task_code)  exec audit_data 'TASKUSE','task_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code,@itask_code,@audit_data OUTPUT
      if (@loper='D') or  update(low_work_qty)  exec audit_data 'TASKUSE','low_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_work_qty,@ilow_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(high_work_qty)  exec audit_data 'TASKUSE','high_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_work_qty,@ihigh_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(low_equip_qty)  exec audit_data 'TASKUSE','low_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_equip_qty,@ilow_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(high_equip_qty)  exec audit_data 'TASKUSE','high_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_equip_qty,@ihigh_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(low_drtn_hr_cnt)  exec audit_data 'TASKUSE','low_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_drtn_hr_cnt,@ilow_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(high_drtn_hr_cnt)  exec audit_data 'TASKUSE','high_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_drtn_hr_cnt,@ihigh_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'TASKUSE','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKUSE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKUSE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskuse_id,@itask_id,@itemplate_id,@iwbs_id,@iest_wt,@itask_code,@ilow_work_qty,@ihigh_work_qty,@ilow_equip_qty,@ihigh_equip_qty,@ilow_drtn_hr_cnt,@ihigh_drtn_hr_cnt,@iguid, @idelete_session_id;
    else
     fetch deleted_c into @dtaskuse_id,@dtask_id,@dtemplate_id,@dwbs_id,@dest_wt,@dtask_code,@dlow_work_qty,@dhigh_work_qty,@dlow_equip_qty,@dhigh_equip_qty,@dlow_drtn_hr_cnt,@dhigh_drtn_hr_cnt,@dguid, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TCATTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_TCATTYPE

PRMAUD_TCATTYPE
create trigger PRMAUD_TCATTYPE
on TCATTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itmpl_catg_type_id varchar(255),@iseq_num varchar(255),@itmpl_catg_short_len varchar(255),@itmpl_catg_type varchar(255)

  declare @dtmpl_catg_type_id varchar(255),@dseq_num varchar(255),@dtmpl_catg_short_len varchar(255),@dtmpl_catg_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(tmpl_catg_type_id) and
			not update(seq_num) and
			not update(tmpl_catg_short_len) and
			not update(tmpl_catg_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TCATTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TCATTYPE',tmpl_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TCATTYPE', tmpl_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select tmpl_catg_type_id,seq_num,tmpl_catg_short_len,tmpl_catg_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select tmpl_catg_type_id,seq_num,tmpl_catg_short_len,tmpl_catg_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itmpl_catg_type_id,@iseq_num,@itmpl_catg_short_len,@itmpl_catg_type, @idelete_session_id
  else
    fetch deleted_c into @dtmpl_catg_type_id,@dseq_num,@dtmpl_catg_short_len,@dtmpl_catg_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtmpl_catg_type_id;
				

    end else begin
    	set @pk1 = @itmpl_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtmpl_catg_type_id,@dseq_num,@dtmpl_catg_short_len,@dtmpl_catg_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(tmpl_catg_type_id)  exec audit_data 'TCATTYPE','tmpl_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_type_id,@itmpl_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'TCATTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_short_len)  exec audit_data 'TCATTYPE','tmpl_catg_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_short_len,@itmpl_catg_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_type)  exec audit_data 'TCATTYPE','tmpl_catg_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_type,@itmpl_catg_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itmpl_catg_type_id,@iseq_num,@itmpl_catg_short_len,@itmpl_catg_type, @idelete_session_id;
    else
     fetch deleted_c into @dtmpl_catg_type_id,@dseq_num,@dtmpl_catg_short_len,@dtmpl_catg_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TCATVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_TCATVAL

PRMAUD_TCATVAL
create trigger PRMAUD_TCATVAL
on TCATVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itmpl_catg_id varchar(255),@itmpl_catg_type_id varchar(255),@iseq_num varchar(255),@itmpl_catg_short_name varchar(255),@iparent_tmpl_catg_id varchar(255),@itmpl_catg_name varchar(255)

  declare @dtmpl_catg_id varchar(255),@dtmpl_catg_type_id varchar(255),@dseq_num varchar(255),@dtmpl_catg_short_name varchar(255),@dparent_tmpl_catg_id varchar(255),@dtmpl_catg_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(tmpl_catg_id) and
			not update(tmpl_catg_type_id) and
			not update(seq_num) and
			not update(tmpl_catg_short_name) and
			not update(parent_tmpl_catg_id) and
			not update(tmpl_catg_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TCATVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TCATVAL',tmpl_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TCATVAL', tmpl_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select tmpl_catg_id,tmpl_catg_type_id,seq_num,tmpl_catg_short_name,parent_tmpl_catg_id,tmpl_catg_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select tmpl_catg_id,tmpl_catg_type_id,seq_num,tmpl_catg_short_name,parent_tmpl_catg_id,tmpl_catg_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itmpl_catg_id,@itmpl_catg_type_id,@iseq_num,@itmpl_catg_short_name,@iparent_tmpl_catg_id,@itmpl_catg_name, @idelete_session_id
  else
    fetch deleted_c into @dtmpl_catg_id,@dtmpl_catg_type_id,@dseq_num,@dtmpl_catg_short_name,@dparent_tmpl_catg_id,@dtmpl_catg_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtmpl_catg_id;
				

    end else begin
    	set @pk1 = @itmpl_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtmpl_catg_id,@dtmpl_catg_type_id,@dseq_num,@dtmpl_catg_short_name,@dparent_tmpl_catg_id,@dtmpl_catg_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(tmpl_catg_id)  exec audit_data 'TCATVAL','tmpl_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_id,@itmpl_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_type_id)  exec audit_data 'TCATVAL','tmpl_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_type_id,@itmpl_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'TCATVAL','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_short_name)  exec audit_data 'TCATVAL','tmpl_catg_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_short_name,@itmpl_catg_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_tmpl_catg_id)  exec audit_data 'TCATVAL','parent_tmpl_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_tmpl_catg_id,@iparent_tmpl_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_name)  exec audit_data 'TCATVAL','tmpl_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_name,@itmpl_catg_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itmpl_catg_id,@itmpl_catg_type_id,@iseq_num,@itmpl_catg_short_name,@iparent_tmpl_catg_id,@itmpl_catg_name, @idelete_session_id;
    else
     fetch deleted_c into @dtmpl_catg_id,@dtmpl_catg_type_id,@dseq_num,@dtmpl_catg_short_name,@dparent_tmpl_catg_id,@dtmpl_catg_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TEMPLATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TEMPLATE' AND xtype = 'TR')
    DROP trigger PRMAUD_TEMPLATE

PRMAUD_TEMPLATE
create trigger PRMAUD_TEMPLATE
on TEMPLATE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itemplate_id varchar(255),@iadd_date varchar(255),@icheckout_flag varchar(255),@itemplate_type varchar(255),@istatus_code varchar(255),@itemplate_name varchar(255),@itask_cnt varchar(255),@itask_code_base varchar(255),@itask_code_step varchar(255),@ilow_work_qty varchar(255),@ihigh_work_qty varchar(255),@ilow_equip_qty varchar(255),@ihigh_equip_qty varchar(255),@ilow_work_cost varchar(255),@ihigh_work_cost varchar(255),@ilow_equip_cost varchar(255),@ihigh_equip_cost varchar(255),@ilow_expense_cost varchar(255),@ihigh_expense_cost varchar(255),@idef_cost_per_qty varchar(255),@itask_code_prefix varchar(255),@iguid varchar(255),@idef_qty_type varchar(255),@iadd_by_name varchar(255),@ilow_mat_cost varchar(255),@ihigh_mat_cost varchar(255)

  declare @dtemplate_id varchar(255),@dadd_date varchar(255),@dcheckout_flag varchar(255),@dtemplate_type varchar(255),@dstatus_code varchar(255),@dtemplate_name varchar(255),@dtask_cnt varchar(255),@dtask_code_base varchar(255),@dtask_code_step varchar(255),@dlow_work_qty varchar(255),@dhigh_work_qty varchar(255),@dlow_equip_qty varchar(255),@dhigh_equip_qty varchar(255),@dlow_work_cost varchar(255),@dhigh_work_cost varchar(255),@dlow_equip_cost varchar(255),@dhigh_equip_cost varchar(255),@dlow_expense_cost varchar(255),@dhigh_expense_cost varchar(255),@ddef_cost_per_qty varchar(255),@dtask_code_prefix varchar(255),@dguid varchar(255),@ddef_qty_type varchar(255),@dadd_by_name varchar(255),@dlow_mat_cost varchar(255),@dhigh_mat_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(template_id) and
			not update(add_date) and
			not update(checkout_flag) and
			not update(template_type) and
			not update(status_code) and
			not update(template_name) and
			not update(task_cnt) and
			not update(task_code_base) and
			not update(task_code_step) and
			not update(low_work_qty) and
			not update(high_work_qty) and
			not update(low_equip_qty) and
			not update(high_equip_qty) and
			not update(low_work_cost) and
			not update(high_work_cost) and
			not update(low_equip_cost) and
			not update(high_equip_cost) and
			not update(low_expense_cost) and
			not update(high_expense_cost) and
			not update(def_cost_per_qty) and
			not update(task_code_prefix) and
			not update(guid) and
			not update(def_qty_type) and
			not update(add_by_name) and
			not update(low_mat_cost) and
			not update(high_mat_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TEMPLATE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TEMPLATE',template_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TEMPLATE', template_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select template_id,add_date,checkout_flag,template_type,status_code,template_name,task_cnt,task_code_base,task_code_step,low_work_qty,high_work_qty,low_equip_qty,high_equip_qty,low_work_cost,high_work_cost,low_equip_cost,high_equip_cost,low_expense_cost,high_expense_cost,def_cost_per_qty,task_code_prefix,guid,def_qty_type,add_by_name,low_mat_cost,high_mat_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select template_id,add_date,checkout_flag,template_type,status_code,template_name,task_cnt,task_code_base,task_code_step,low_work_qty,high_work_qty,low_equip_qty,high_equip_qty,low_work_cost,high_work_cost,low_equip_cost,high_equip_cost,low_expense_cost,high_expense_cost,def_cost_per_qty,task_code_prefix,guid,def_qty_type,add_by_name,low_mat_cost,high_mat_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itemplate_id,@iadd_date,@icheckout_flag,@itemplate_type,@istatus_code,@itemplate_name,@itask_cnt,@itask_code_base,@itask_code_step,@ilow_work_qty,@ihigh_work_qty,@ilow_equip_qty,@ihigh_equip_qty,@ilow_work_cost,@ihigh_work_cost,@ilow_equip_cost,@ihigh_equip_cost,@ilow_expense_cost,@ihigh_expense_cost,@idef_cost_per_qty,@itask_code_prefix,@iguid,@idef_qty_type,@iadd_by_name,@ilow_mat_cost,@ihigh_mat_cost, @idelete_session_id
  else
    fetch deleted_c into @dtemplate_id,@dadd_date,@dcheckout_flag,@dtemplate_type,@dstatus_code,@dtemplate_name,@dtask_cnt,@dtask_code_base,@dtask_code_step,@dlow_work_qty,@dhigh_work_qty,@dlow_equip_qty,@dhigh_equip_qty,@dlow_work_cost,@dhigh_work_cost,@dlow_equip_cost,@dhigh_equip_cost,@dlow_expense_cost,@dhigh_expense_cost,@ddef_cost_per_qty,@dtask_code_prefix,@dguid,@ddef_qty_type,@dadd_by_name,@dlow_mat_cost,@dhigh_mat_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtemplate_id;
				

    end else begin
    	set @pk1 = @itemplate_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtemplate_id,@dadd_date,@dcheckout_flag,@dtemplate_type,@dstatus_code,@dtemplate_name,@dtask_cnt,@dtask_code_base,@dtask_code_step,@dlow_work_qty,@dhigh_work_qty,@dlow_equip_qty,@dhigh_equip_qty,@dlow_work_cost,@dhigh_work_cost,@dlow_equip_cost,@dhigh_equip_cost,@dlow_expense_cost,@dhigh_expense_cost,@ddef_cost_per_qty,@dtask_code_prefix,@dguid,@ddef_qty_type,@dadd_by_name,@dlow_mat_cost,@dhigh_mat_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(template_id)  exec audit_data 'TEMPLATE','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(add_date)  exec audit_data 'TEMPLATE','add_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_date,@iadd_date,@audit_data OUTPUT
      if (@loper='D') or  update(checkout_flag)  exec audit_data 'TEMPLATE','checkout_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcheckout_flag,@icheckout_flag,@audit_data OUTPUT
      if (@loper='D') or  update(template_type)  exec audit_data 'TEMPLATE','template_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_type,@itemplate_type,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'TEMPLATE','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(template_name)  exec audit_data 'TEMPLATE','template_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_name,@itemplate_name,@audit_data OUTPUT
      if (@loper='D') or  update(task_cnt)  exec audit_data 'TEMPLATE','task_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_cnt,@itask_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_base)  exec audit_data 'TEMPLATE','task_code_base',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_base,@itask_code_base,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_step)  exec audit_data 'TEMPLATE','task_code_step',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_step,@itask_code_step,@audit_data OUTPUT
      if (@loper='D') or  update(low_work_qty)  exec audit_data 'TEMPLATE','low_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_work_qty,@ilow_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(high_work_qty)  exec audit_data 'TEMPLATE','high_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_work_qty,@ihigh_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(low_equip_qty)  exec audit_data 'TEMPLATE','low_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_equip_qty,@ilow_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(high_equip_qty)  exec audit_data 'TEMPLATE','high_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_equip_qty,@ihigh_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(low_work_cost)  exec audit_data 'TEMPLATE','low_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_work_cost,@ilow_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(high_work_cost)  exec audit_data 'TEMPLATE','high_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_work_cost,@ihigh_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(low_equip_cost)  exec audit_data 'TEMPLATE','low_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_equip_cost,@ilow_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(high_equip_cost)  exec audit_data 'TEMPLATE','high_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_equip_cost,@ihigh_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(low_expense_cost)  exec audit_data 'TEMPLATE','low_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_expense_cost,@ilow_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(high_expense_cost)  exec audit_data 'TEMPLATE','high_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_expense_cost,@ihigh_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(def_cost_per_qty)  exec audit_data 'TEMPLATE','def_cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_cost_per_qty,@idef_cost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_prefix)  exec audit_data 'TEMPLATE','task_code_prefix',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_prefix,@itask_code_prefix,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'TEMPLATE','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(def_qty_type)  exec audit_data 'TEMPLATE','def_qty_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_qty_type,@idef_qty_type,@audit_data OUTPUT
      if (@loper='D') or  update(add_by_name)  exec audit_data 'TEMPLATE','add_by_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_by_name,@iadd_by_name,@audit_data OUTPUT
      if (@loper='D') or  update(low_mat_cost)  exec audit_data 'TEMPLATE','low_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_mat_cost,@ilow_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(high_mat_cost)  exec audit_data 'TEMPLATE','high_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_mat_cost,@ihigh_mat_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TEMPLATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TEMPLATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itemplate_id,@iadd_date,@icheckout_flag,@itemplate_type,@istatus_code,@itemplate_name,@itask_cnt,@itask_code_base,@itask_code_step,@ilow_work_qty,@ihigh_work_qty,@ilow_equip_qty,@ihigh_equip_qty,@ilow_work_cost,@ihigh_work_cost,@ilow_equip_cost,@ihigh_equip_cost,@ilow_expense_cost,@ihigh_expense_cost,@idef_cost_per_qty,@itask_code_prefix,@iguid,@idef_qty_type,@iadd_by_name,@ilow_mat_cost,@ihigh_mat_cost, @idelete_session_id;
    else
     fetch deleted_c into @dtemplate_id,@dadd_date,@dcheckout_flag,@dtemplate_type,@dstatus_code,@dtemplate_name,@dtask_cnt,@dtask_code_base,@dtask_code_step,@dlow_work_qty,@dhigh_work_qty,@dlow_equip_qty,@dhigh_equip_qty,@dlow_work_cost,@dhigh_work_cost,@dlow_equip_cost,@dhigh_equip_cost,@dlow_expense_cost,@dhigh_expense_cost,@ddef_cost_per_qty,@dtask_code_prefix,@dguid,@ddef_qty_type,@dadd_by_name,@dlow_mat_cost,@dhigh_mat_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TMPLCOST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TMPLCOST' AND xtype = 'TR')
    DROP trigger PRMAUD_TMPLCOST

PRMAUD_TMPLCOST
create trigger PRMAUD_TMPLCOST
on TMPLCOST
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icost_item_id varchar(255),@itaskuse_id varchar(255),@itemplate_id varchar(255),@icost_load_type varchar(255),@icost_type_id varchar(255),@ipobs_id varchar(255),@ilow_cost varchar(255),@ihigh_cost varchar(255),@ivendor_name varchar(255),@icost_name varchar(255),@iqty_name varchar(255)

  declare @dcost_item_id varchar(255),@dtaskuse_id varchar(255),@dtemplate_id varchar(255),@dcost_load_type varchar(255),@dcost_type_id varchar(255),@dpobs_id varchar(255),@dlow_cost varchar(255),@dhigh_cost varchar(255),@dvendor_name varchar(255),@dcost_name varchar(255),@dqty_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(cost_item_id) and
			not update(taskuse_id) and
			not update(template_id) and
			not update(cost_load_type) and
			not update(cost_type_id) and
			not update(pobs_id) and
			not update(low_cost) and
			not update(high_cost) and
			not update(vendor_name) and
			not update(cost_name) and
			not update(qty_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TMPLCOST', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLCOST',cost_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLCOST', cost_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select cost_item_id,taskuse_id,template_id,cost_load_type,cost_type_id,pobs_id,low_cost,high_cost,vendor_name,cost_name,qty_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select cost_item_id,taskuse_id,template_id,cost_load_type,cost_type_id,pobs_id,low_cost,high_cost,vendor_name,cost_name,qty_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icost_item_id,@itaskuse_id,@itemplate_id,@icost_load_type,@icost_type_id,@ipobs_id,@ilow_cost,@ihigh_cost,@ivendor_name,@icost_name,@iqty_name, @idelete_session_id
  else
    fetch deleted_c into @dcost_item_id,@dtaskuse_id,@dtemplate_id,@dcost_load_type,@dcost_type_id,@dpobs_id,@dlow_cost,@dhigh_cost,@dvendor_name,@dcost_name,@dqty_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcost_item_id;
				

    end else begin
    	set @pk1 = @icost_item_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcost_item_id,@dtaskuse_id,@dtemplate_id,@dcost_load_type,@dcost_type_id,@dpobs_id,@dlow_cost,@dhigh_cost,@dvendor_name,@dcost_name,@dqty_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(cost_item_id)  exec audit_data 'TMPLCOST','cost_item_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_item_id,@icost_item_id,@audit_data OUTPUT
      if (@loper='D') or  update(taskuse_id)  exec audit_data 'TMPLCOST','taskuse_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskuse_id,@itaskuse_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TMPLCOST','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(cost_load_type)  exec audit_data 'TMPLCOST','cost_load_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_load_type,@icost_load_type,@audit_data OUTPUT
      if (@loper='D') or  update(cost_type_id)  exec audit_data 'TMPLCOST','cost_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_type_id,@icost_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'TMPLCOST','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(low_cost)  exec audit_data 'TMPLCOST','low_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlow_cost,@ilow_cost,@audit_data OUTPUT
      if (@loper='D') or  update(high_cost)  exec audit_data 'TMPLCOST','high_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhigh_cost,@ihigh_cost,@audit_data OUTPUT
      if (@loper='D') or  update(vendor_name)  exec audit_data 'TMPLCOST','vendor_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dvendor_name,@ivendor_name,@audit_data OUTPUT
      if (@loper='D') or  update(cost_name)  exec audit_data 'TMPLCOST','cost_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_name,@icost_name,@audit_data OUTPUT
      if (@loper='D') or  update(qty_name)  exec audit_data 'TMPLCOST','qty_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqty_name,@iqty_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TMPLCOST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TMPLCOST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icost_item_id,@itaskuse_id,@itemplate_id,@icost_load_type,@icost_type_id,@ipobs_id,@ilow_cost,@ihigh_cost,@ivendor_name,@icost_name,@iqty_name, @idelete_session_id;
    else
     fetch deleted_c into @dcost_item_id,@dtaskuse_id,@dtemplate_id,@dcost_load_type,@dcost_type_id,@dpobs_id,@dlow_cost,@dhigh_cost,@dvendor_name,@dcost_name,@dqty_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TMPLRISK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TMPLRISK' AND xtype = 'TR')
    DROP trigger PRMAUD_TMPLRISK

PRMAUD_TMPLRISK
create trigger PRMAUD_TMPLRISK
on TMPLRISK
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irisk_id varchar(255),@itemplate_id varchar(255),@iwbs_id varchar(255),@ipriority_type varchar(255),@irisk_name varchar(255),@irisk_type_id varchar(255),@iprbly_pct varchar(255),@iimpact_work_qty varchar(255),@iimpact_equip_qty varchar(255),@iimpact_expense_cost varchar(255)

  declare @drisk_id varchar(255),@dtemplate_id varchar(255),@dwbs_id varchar(255),@dpriority_type varchar(255),@drisk_name varchar(255),@drisk_type_id varchar(255),@dprbly_pct varchar(255),@dimpact_work_qty varchar(255),@dimpact_equip_qty varchar(255),@dimpact_expense_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(risk_id) and
			not update(template_id) and
			not update(wbs_id) and
			not update(priority_type) and
			not update(risk_name) and
			not update(risk_type_id) and
			not update(prbly_pct) and
			not update(impact_work_qty) and
			not update(impact_equip_qty) and
			not update(impact_expense_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TMPLRISK', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLRISK',risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLRISK', risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select risk_id,template_id,wbs_id,priority_type,risk_name,risk_type_id,prbly_pct,impact_work_qty,impact_equip_qty,impact_expense_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select risk_id,template_id,wbs_id,priority_type,risk_name,risk_type_id,prbly_pct,impact_work_qty,impact_equip_qty,impact_expense_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irisk_id,@itemplate_id,@iwbs_id,@ipriority_type,@irisk_name,@irisk_type_id,@iprbly_pct,@iimpact_work_qty,@iimpact_equip_qty,@iimpact_expense_cost, @idelete_session_id
  else
    fetch deleted_c into @drisk_id,@dtemplate_id,@dwbs_id,@dpriority_type,@drisk_name,@drisk_type_id,@dprbly_pct,@dimpact_work_qty,@dimpact_equip_qty,@dimpact_expense_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drisk_id;
				

    end else begin
    	set @pk1 = @irisk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drisk_id,@dtemplate_id,@dwbs_id,@dpriority_type,@drisk_name,@drisk_type_id,@dprbly_pct,@dimpact_work_qty,@dimpact_equip_qty,@dimpact_expense_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(risk_id)  exec audit_data 'TMPLRISK','risk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_id,@irisk_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TMPLRISK','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TMPLRISK','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(priority_type)  exec audit_data 'TMPLRISK','priority_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriority_type,@ipriority_type,@audit_data OUTPUT
      if (@loper='D') or  update(risk_name)  exec audit_data 'TMPLRISK','risk_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_name,@irisk_name,@audit_data OUTPUT
      if (@loper='D') or  update(risk_type_id)  exec audit_data 'TMPLRISK','risk_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_type_id,@irisk_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(prbly_pct)  exec audit_data 'TMPLRISK','prbly_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprbly_pct,@iprbly_pct,@audit_data OUTPUT
      if (@loper='D') or  update(impact_work_qty)  exec audit_data 'TMPLRISK','impact_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_work_qty,@iimpact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(impact_equip_qty)  exec audit_data 'TMPLRISK','impact_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_equip_qty,@iimpact_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(impact_expense_cost)  exec audit_data 'TMPLRISK','impact_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_expense_cost,@iimpact_expense_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TMPLRISK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TMPLRISK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irisk_id,@itemplate_id,@iwbs_id,@ipriority_type,@irisk_name,@irisk_type_id,@iprbly_pct,@iimpact_work_qty,@iimpact_equip_qty,@iimpact_expense_cost, @idelete_session_id;
    else
     fetch deleted_c into @drisk_id,@dtemplate_id,@dwbs_id,@dpriority_type,@drisk_name,@drisk_type_id,@dprbly_pct,@dimpact_work_qty,@dimpact_equip_qty,@dimpact_expense_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TMPLTCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TMPLTCAT' AND xtype = 'TR')
    DROP trigger PRMAUD_TMPLTCAT

PRMAUD_TMPLTCAT
create trigger PRMAUD_TMPLTCAT
on TMPLTCAT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itemplate_id varchar(255),@itmpl_catg_type_id varchar(255),@itmpl_catg_id varchar(255)

  declare @dtemplate_id varchar(255),@dtmpl_catg_type_id varchar(255),@dtmpl_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(template_id) and
			not update(tmpl_catg_type_id) and
			not update(tmpl_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TMPLTCAT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLTCAT',template_id,tmpl_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLTCAT', template_id,tmpl_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select template_id,tmpl_catg_type_id,tmpl_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select template_id,tmpl_catg_type_id,tmpl_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itemplate_id,@itmpl_catg_type_id,@itmpl_catg_id, @idelete_session_id
  else
    fetch deleted_c into @dtemplate_id,@dtmpl_catg_type_id,@dtmpl_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtemplate_id;
				
set @pk2 = @dtmpl_catg_type_id;
				

    end else begin
    	set @pk1 = @itemplate_id;
				
set @pk2 = @itmpl_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtemplate_id,@dtmpl_catg_type_id,@dtmpl_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(template_id)  exec audit_data 'TMPLTCAT','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_type_id)  exec audit_data 'TMPLTCAT','tmpl_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_type_id,@itmpl_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_catg_id)  exec audit_data 'TMPLTCAT','tmpl_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_catg_id,@itmpl_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TMPLTCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TMPLTCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itemplate_id,@itmpl_catg_type_id,@itmpl_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @dtemplate_id,@dtmpl_catg_type_id,@dtmpl_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TMPLWBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TMPLWBS' AND xtype = 'TR')
    DROP trigger PRMAUD_TMPLWBS

PRMAUD_TMPLWBS
create trigger PRMAUD_TMPLWBS
on TMPLWBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_id varchar(255),@itemplate_id varchar(255),@iseq_num varchar(255),@iest_wt varchar(255),@iwbs_short_name varchar(255),@iwbs_name varchar(255),@iphase_id varchar(255),@iobs_id varchar(255),@iparent_wbs_id varchar(255),@ifact_catg_id varchar(255),@iguid varchar(255)

  declare @dwbs_id varchar(255),@dtemplate_id varchar(255),@dseq_num varchar(255),@dest_wt varchar(255),@dwbs_short_name varchar(255),@dwbs_name varchar(255),@dphase_id varchar(255),@dobs_id varchar(255),@dparent_wbs_id varchar(255),@dfact_catg_id varchar(255),@dguid varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_id) and
			not update(template_id) and
			not update(seq_num) and
			not update(est_wt) and
			not update(wbs_short_name) and
			not update(wbs_name) and
			not update(phase_id) and
			not update(obs_id) and
			not update(parent_wbs_id) and
			not update(fact_catg_id) and
			not update(guid) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TMPLWBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLWBS',wbs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLWBS', wbs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_id,template_id,seq_num,est_wt,wbs_short_name,wbs_name,phase_id,obs_id,parent_wbs_id,fact_catg_id,guid
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_id,template_id,seq_num,est_wt,wbs_short_name,wbs_name,phase_id,obs_id,parent_wbs_id,fact_catg_id,guid
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_id,@itemplate_id,@iseq_num,@iest_wt,@iwbs_short_name,@iwbs_name,@iphase_id,@iobs_id,@iparent_wbs_id,@ifact_catg_id,@iguid, @idelete_session_id
  else
    fetch deleted_c into @dwbs_id,@dtemplate_id,@dseq_num,@dest_wt,@dwbs_short_name,@dwbs_name,@dphase_id,@dobs_id,@dparent_wbs_id,@dfact_catg_id,@dguid, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_id;
				

    end else begin
    	set @pk1 = @iwbs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_id,@dtemplate_id,@dseq_num,@dest_wt,@dwbs_short_name,@dwbs_name,@dphase_id,@dobs_id,@dparent_wbs_id,@dfact_catg_id,@dguid, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TMPLWBS','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'TMPLWBS','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'TMPLWBS','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(est_wt)  exec audit_data 'TMPLWBS','est_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_wt,@iest_wt,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_short_name)  exec audit_data 'TMPLWBS','wbs_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_short_name,@iwbs_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_name)  exec audit_data 'TMPLWBS','wbs_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_name,@iwbs_name,@audit_data OUTPUT
      if (@loper='D') or  update(phase_id)  exec audit_data 'TMPLWBS','phase_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_id,@iphase_id,@audit_data OUTPUT
      if (@loper='D') or  update(obs_id)  exec audit_data 'TMPLWBS','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(parent_wbs_id)  exec audit_data 'TMPLWBS','parent_wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_wbs_id,@iparent_wbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_catg_id)  exec audit_data 'TMPLWBS','fact_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_catg_id,@ifact_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'TMPLWBS','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TMPLWBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TMPLWBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_id,@itemplate_id,@iseq_num,@iest_wt,@iwbs_short_name,@iwbs_name,@iphase_id,@iobs_id,@iparent_wbs_id,@ifact_catg_id,@iguid, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_id,@dtemplate_id,@dseq_num,@dest_wt,@dwbs_short_name,@dwbs_name,@dphase_id,@dobs_id,@dparent_wbs_id,@dfact_catg_id,@dguid, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UDFCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UDFCODE' AND xtype = 'TR')
    DROP trigger PRMAUD_UDFCODE

PRMAUD_UDFCODE
create trigger PRMAUD_UDFCODE
on UDFCODE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iudf_code_id varchar(255),@iudf_type_id varchar(255),@iseq_num varchar(255),@ishort_name varchar(255),@iudf_code_name varchar(255),@iparent_udf_code_id varchar(255)

  declare @dudf_code_id varchar(255),@dudf_type_id varchar(255),@dseq_num varchar(255),@dshort_name varchar(255),@dudf_code_name varchar(255),@dparent_udf_code_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(udf_code_id) and
			not update(udf_type_id) and
			not update(seq_num) and
			not update(short_name) and
			not update(udf_code_name) and
			not update(parent_udf_code_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UDFCODE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFCODE',udf_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFCODE', udf_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select udf_code_id,udf_type_id,seq_num,short_name,udf_code_name,parent_udf_code_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select udf_code_id,udf_type_id,seq_num,short_name,udf_code_name,parent_udf_code_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iudf_code_id,@iudf_type_id,@iseq_num,@ishort_name,@iudf_code_name,@iparent_udf_code_id, @idelete_session_id
  else
    fetch deleted_c into @dudf_code_id,@dudf_type_id,@dseq_num,@dshort_name,@dudf_code_name,@dparent_udf_code_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dudf_code_id;
				

    end else begin
    	set @pk1 = @iudf_code_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dudf_code_id,@dudf_type_id,@dseq_num,@dshort_name,@dudf_code_name,@dparent_udf_code_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(udf_code_id)  exec audit_data 'UDFCODE','udf_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_id,@iudf_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(udf_type_id)  exec audit_data 'UDFCODE','udf_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_id,@iudf_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'UDFCODE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(short_name)  exec audit_data 'UDFCODE','short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshort_name,@ishort_name,@audit_data OUTPUT
      if (@loper='D') or  update(udf_code_name)  exec audit_data 'UDFCODE','udf_code_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_name,@iudf_code_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_udf_code_id)  exec audit_data 'UDFCODE','parent_udf_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_udf_code_id,@iparent_udf_code_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UDFCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UDFCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iudf_code_id,@iudf_type_id,@iseq_num,@ishort_name,@iudf_code_name,@iparent_udf_code_id, @idelete_session_id;
    else
     fetch deleted_c into @dudf_code_id,@dudf_type_id,@dseq_num,@dshort_name,@dudf_code_name,@dparent_udf_code_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UDFTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UDFTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_UDFTYPE

PRMAUD_UDFTYPE
create trigger PRMAUD_UDFTYPE
on UDFTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iudf_type_id varchar(255),@itable_name varchar(255),@iudf_type_name varchar(255),@iudf_type_label varchar(255),@ilogical_data_type varchar(255),@isuper_flag varchar(255),@iudf_code_short_len varchar(255)

  declare @dudf_type_id varchar(255),@dtable_name varchar(255),@dudf_type_name varchar(255),@dudf_type_label varchar(255),@dlogical_data_type varchar(255),@dsuper_flag varchar(255),@dudf_code_short_len varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(udf_type_id) and
			not update(table_name) and
			not update(udf_type_name) and
			not update(udf_type_label) and
			not update(logical_data_type) and
			not update(super_flag) and
			not update(udf_code_short_len) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UDFTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFTYPE',udf_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFTYPE', udf_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select udf_type_id,table_name,udf_type_name,udf_type_label,logical_data_type,super_flag,udf_code_short_len
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select udf_type_id,table_name,udf_type_name,udf_type_label,logical_data_type,super_flag,udf_code_short_len
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iudf_type_id,@itable_name,@iudf_type_name,@iudf_type_label,@ilogical_data_type,@isuper_flag,@iudf_code_short_len, @idelete_session_id
  else
    fetch deleted_c into @dudf_type_id,@dtable_name,@dudf_type_name,@dudf_type_label,@dlogical_data_type,@dsuper_flag,@dudf_code_short_len, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dudf_type_id;
				

    end else begin
    	set @pk1 = @iudf_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dudf_type_id,@dtable_name,@dudf_type_name,@dudf_type_label,@dlogical_data_type,@dsuper_flag,@dudf_code_short_len, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(udf_type_id)  exec audit_data 'UDFTYPE','udf_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_id,@iudf_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'UDFTYPE','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(udf_type_name)  exec audit_data 'UDFTYPE','udf_type_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_name,@iudf_type_name,@audit_data OUTPUT
      if (@loper='D') or  update(udf_type_label)  exec audit_data 'UDFTYPE','udf_type_label',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_label,@iudf_type_label,@audit_data OUTPUT
      if (@loper='D') or  update(logical_data_type)  exec audit_data 'UDFTYPE','logical_data_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlogical_data_type,@ilogical_data_type,@audit_data OUTPUT
      if (@loper='D') or  update(super_flag)  exec audit_data 'UDFTYPE','super_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuper_flag,@isuper_flag,@audit_data OUTPUT
      if (@loper='D') or  update(udf_code_short_len)  exec audit_data 'UDFTYPE','udf_code_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_short_len,@iudf_code_short_len,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UDFTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UDFTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iudf_type_id,@itable_name,@iudf_type_name,@iudf_type_label,@ilogical_data_type,@isuper_flag,@iudf_code_short_len, @idelete_session_id;
    else
     fetch deleted_c into @dudf_type_id,@dtable_name,@dudf_type_name,@dudf_type_label,@dlogical_data_type,@dsuper_flag,@dudf_code_short_len, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UDFVALUE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UDFVALUE' AND xtype = 'TR')
    DROP trigger PRMAUD_UDFVALUE

PRMAUD_UDFVALUE
create trigger PRMAUD_UDFVALUE
on UDFVALUE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iudf_type_id varchar(255),@ifk_id varchar(255),@itemplate_id varchar(255),@iudf_date varchar(255),@iudf_text varchar(255),@iudf_number varchar(255),@iudf_code_id varchar(255)

  declare @dudf_type_id varchar(255),@dfk_id varchar(255),@dtemplate_id varchar(255),@dudf_date varchar(255),@dudf_text varchar(255),@dudf_number varchar(255),@dudf_code_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(udf_type_id) and
			not update(fk_id) and
			not update(template_id) and
			not update(udf_date) and
			not update(udf_text) and
			not update(udf_number) and
			not update(udf_code_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UDFVALUE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFVALUE',udf_type_id,fk_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFVALUE', udf_type_id,fk_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select udf_type_id,fk_id,template_id,udf_date,udf_text,udf_number,udf_code_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select udf_type_id,fk_id,template_id,udf_date,udf_text,udf_number,udf_code_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iudf_type_id,@ifk_id,@itemplate_id,@iudf_date,@iudf_text,@iudf_number,@iudf_code_id, @idelete_session_id
  else
    fetch deleted_c into @dudf_type_id,@dfk_id,@dtemplate_id,@dudf_date,@dudf_text,@dudf_number,@dudf_code_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dudf_type_id;
				
set @pk2 = @dfk_id;
				

    end else begin
    	set @pk1 = @iudf_type_id;
				
set @pk2 = @ifk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dudf_type_id,@dfk_id,@dtemplate_id,@dudf_date,@dudf_text,@dudf_number,@dudf_code_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(udf_type_id)  exec audit_data 'UDFVALUE','udf_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_id,@iudf_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'UDFVALUE','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'UDFVALUE','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(udf_date)  exec audit_data 'UDFVALUE','udf_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_date,@iudf_date,@audit_data OUTPUT
      if (@loper='D') or  update(udf_text)  exec audit_data 'UDFVALUE','udf_text',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_text,@iudf_text,@audit_data OUTPUT
      if (@loper='D') or  update(udf_number)  exec audit_data 'UDFVALUE','udf_number',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_number,@iudf_number,@audit_data OUTPUT
      if (@loper='D') or  update(udf_code_id)  exec audit_data 'UDFVALUE','udf_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_id,@iudf_code_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UDFVALUE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UDFVALUE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iudf_type_id,@ifk_id,@itemplate_id,@iudf_date,@iudf_text,@iudf_number,@iudf_code_id, @idelete_session_id;
    else
     fetch deleted_c into @dudf_type_id,@dfk_id,@dtemplate_id,@dudf_date,@dudf_text,@dudf_number,@dudf_code_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UMEASURE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UMEASURE' AND xtype = 'TR')
    DROP trigger PRMAUD_UMEASURE

PRMAUD_UMEASURE
create trigger PRMAUD_UMEASURE
on UMEASURE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iunit_id varchar(255),@iseq_num varchar(255),@iunit_name varchar(255),@iunit_abbrev varchar(255)

  declare @dunit_id varchar(255),@dseq_num varchar(255),@dunit_name varchar(255),@dunit_abbrev varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(unit_id) and
			not update(seq_num) and
			not update(unit_name) and
			not update(unit_abbrev) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UMEASURE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UMEASURE',unit_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UMEASURE', unit_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select unit_id,seq_num,unit_name,unit_abbrev
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select unit_id,seq_num,unit_name,unit_abbrev
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iunit_id,@iseq_num,@iunit_name,@iunit_abbrev, @idelete_session_id
  else
    fetch deleted_c into @dunit_id,@dseq_num,@dunit_name,@dunit_abbrev, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dunit_id;
				

    end else begin
    	set @pk1 = @iunit_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dunit_id,@dseq_num,@dunit_name,@dunit_abbrev, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(unit_id)  exec audit_data 'UMEASURE','unit_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_id,@iunit_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'UMEASURE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(unit_name)  exec audit_data 'UMEASURE','unit_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_name,@iunit_name,@audit_data OUTPUT
      if (@loper='D') or  update(unit_abbrev)  exec audit_data 'UMEASURE','unit_abbrev',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_abbrev,@iunit_abbrev,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UMEASURE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UMEASURE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iunit_id,@iseq_num,@iunit_name,@iunit_abbrev, @idelete_session_id;
    else
     fetch deleted_c into @dunit_id,@dseq_num,@dunit_name,@dunit_abbrev, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERCOL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERCOL' AND xtype = 'TR')
    DROP trigger PRMAUD_USERCOL

PRMAUD_USERCOL
create trigger PRMAUD_USERCOL
on USERCOL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_col_id varchar(255),@itable_name varchar(255),@ilogical_data_type varchar(255),@iuser_col_name varchar(255),@iuser_col_label varchar(255)

  declare @duser_col_id varchar(255),@dtable_name varchar(255),@dlogical_data_type varchar(255),@duser_col_name varchar(255),@duser_col_label varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_col_id) and
			not update(table_name) and
			not update(logical_data_type) and
			not update(user_col_name) and
			not update(user_col_label) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERCOL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERCOL',user_col_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERCOL', user_col_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_col_id,table_name,logical_data_type,user_col_name,user_col_label
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_col_id,table_name,logical_data_type,user_col_name,user_col_label
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_col_id,@itable_name,@ilogical_data_type,@iuser_col_name,@iuser_col_label, @idelete_session_id
  else
    fetch deleted_c into @duser_col_id,@dtable_name,@dlogical_data_type,@duser_col_name,@duser_col_label, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_col_id;
				

    end else begin
    	set @pk1 = @iuser_col_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_col_id,@dtable_name,@dlogical_data_type,@duser_col_name,@duser_col_label, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_col_id)  exec audit_data 'USERCOL','user_col_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_col_id,@iuser_col_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'USERCOL','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(logical_data_type)  exec audit_data 'USERCOL','logical_data_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlogical_data_type,@ilogical_data_type,@audit_data OUTPUT
      if (@loper='D') or  update(user_col_name)  exec audit_data 'USERCOL','user_col_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_col_name,@iuser_col_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_col_label)  exec audit_data 'USERCOL','user_col_label',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_col_label,@iuser_col_label,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERCOL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERCOL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_col_id,@itable_name,@ilogical_data_type,@iuser_col_name,@iuser_col_label, @idelete_session_id;
    else
     fetch deleted_c into @duser_col_id,@dtable_name,@dlogical_data_type,@duser_col_name,@duser_col_label, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERDATA
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERDATA' AND xtype = 'TR')
    DROP trigger PRMAUD_USERDATA

PRMAUD_USERDATA
create trigger PRMAUD_USERDATA
on USERDATA
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_data_id varchar(255),@iuser_id varchar(255),@itopic_name varchar(255)

  declare @duser_data_id varchar(255),@duser_id varchar(255),@dtopic_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_data_id) and
			not update(user_id) and
			not update(topic_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERDATA', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERDATA',user_data_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERDATA', user_data_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_data_id,user_id,topic_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_data_id,user_id,topic_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_data_id,@iuser_id,@itopic_name, @idelete_session_id
  else
    fetch deleted_c into @duser_data_id,@duser_id,@dtopic_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_data_id;
				

    end else begin
    	set @pk1 = @iuser_data_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_data_id,@duser_id,@dtopic_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_data_id)  exec audit_data 'USERDATA','user_data_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_data_id,@iuser_data_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'USERDATA','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(topic_name)  exec audit_data 'USERDATA','topic_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtopic_name,@itopic_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERDATA', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERDATA', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_data_id,@iuser_id,@itopic_name, @idelete_session_id;
    else
     fetch deleted_c into @duser_data_id,@duser_id,@dtopic_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERENG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERENG' AND xtype = 'TR')
    DROP trigger PRMAUD_USERENG

PRMAUD_USERENG
create trigger PRMAUD_USERENG
on USERENG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_eng_id varchar(255),@iuser_id varchar(255),@inamed_user_flag varchar(255),@idb_engine_type varchar(255)

  declare @duser_eng_id varchar(255),@duser_id varchar(255),@dnamed_user_flag varchar(255),@ddb_engine_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_eng_id) and
			not update(user_id) and
			not update(named_user_flag) and
			not update(db_engine_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERENG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERENG',user_eng_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERENG', user_eng_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_eng_id,user_id,named_user_flag,db_engine_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_eng_id,user_id,named_user_flag,db_engine_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_eng_id,@iuser_id,@inamed_user_flag,@idb_engine_type, @idelete_session_id
  else
    fetch deleted_c into @duser_eng_id,@duser_id,@dnamed_user_flag,@ddb_engine_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_eng_id;
				

    end else begin
    	set @pk1 = @iuser_eng_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_eng_id,@duser_id,@dnamed_user_flag,@ddb_engine_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_eng_id)  exec audit_data 'USERENG','user_eng_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_eng_id,@iuser_eng_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'USERENG','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(named_user_flag)  exec audit_data 'USERENG','named_user_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnamed_user_flag,@inamed_user_flag,@audit_data OUTPUT
      if (@loper='D') or  update(db_engine_type)  exec audit_data 'USERENG','db_engine_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddb_engine_type,@idb_engine_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERENG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERENG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_eng_id,@iuser_id,@inamed_user_flag,@idb_engine_type, @idelete_session_id;
    else
     fetch deleted_c into @duser_eng_id,@duser_id,@dnamed_user_flag,@ddb_engine_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERS' AND xtype = 'TR')
    DROP trigger PRMAUD_USERS

PRMAUD_USERS
create trigger PRMAUD_USERS
on USERS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_id varchar(255),@iuser_name varchar(255),@iview_id varchar(255),@iprof_id varchar(255),@iguid varchar(255),@iactual_name varchar(255),@ipasswd varchar(255),@icurr_id varchar(255)

  declare @duser_id varchar(255),@duser_name varchar(255),@dview_id varchar(255),@dprof_id varchar(255),@dguid varchar(255),@dactual_name varchar(255),@dpasswd varchar(255),@dcurr_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_id) and
			not update(user_name) and
			not update(view_id) and
			not update(prof_id) and
			not update(guid) and
			not update(actual_name) and
			not update(passwd) and
			not update(curr_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERS',user_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERS', user_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_id,user_name,view_id,prof_id,guid,actual_name,passwd,curr_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_id,user_name,view_id,prof_id,guid,actual_name,passwd,curr_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_id,@iuser_name,@iview_id,@iprof_id,@iguid,@iactual_name,@ipasswd,@icurr_id, @idelete_session_id
  else
    fetch deleted_c into @duser_id,@duser_name,@dview_id,@dprof_id,@dguid,@dactual_name,@dpasswd,@dcurr_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_id;
				

    end else begin
    	set @pk1 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_id,@duser_name,@dview_id,@dprof_id,@dguid,@dactual_name,@dpasswd,@dcurr_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_id)  exec audit_data 'USERS','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_name)  exec audit_data 'USERS','user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_name,@iuser_name,@audit_data OUTPUT
      if (@loper='D') or  update(view_id)  exec audit_data 'USERS','view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_id,@iview_id,@audit_data OUTPUT
      if (@loper='D') or  update(prof_id)  exec audit_data 'USERS','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'USERS','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(actual_name)  exec audit_data 'USERS','actual_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactual_name,@iactual_name,@audit_data OUTPUT
      if (@loper='D') or  update(passwd)  exec audit_data 'USERS','passwd',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpasswd,@ipasswd,@audit_data OUTPUT
      if (@loper='D') or  update(curr_id)  exec audit_data 'USERS','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_id,@iuser_name,@iview_id,@iprof_id,@iguid,@iactual_name,@ipasswd,@icurr_id, @idelete_session_id;
    else
     fetch deleted_c into @duser_id,@duser_name,@dview_id,@dprof_id,@dguid,@dactual_name,@dpasswd,@dcurr_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERTMPL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERTMPL' AND xtype = 'TR')
    DROP trigger PRMAUD_USERTMPL

PRMAUD_USERTMPL
create trigger PRMAUD_USERTMPL
on USERTMPL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_id varchar(255),@itemplate_id varchar(255),@iprof_id varchar(255),@iview_id varchar(255)

  declare @duser_id varchar(255),@dtemplate_id varchar(255),@dprof_id varchar(255),@dview_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_id) and
			not update(template_id) and
			not update(prof_id) and
			not update(view_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERTMPL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERTMPL',user_id,template_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERTMPL', user_id,template_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_id,template_id,prof_id,view_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_id,template_id,prof_id,view_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_id,@itemplate_id,@iprof_id,@iview_id, @idelete_session_id
  else
    fetch deleted_c into @duser_id,@dtemplate_id,@dprof_id,@dview_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_id;
				
set @pk2 = @dtemplate_id;
				

    end else begin
    	set @pk1 = @iuser_id;
				
set @pk2 = @itemplate_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_id,@dtemplate_id,@dprof_id,@dview_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_id)  exec audit_data 'USERTMPL','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'USERTMPL','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(prof_id)  exec audit_data 'USERTMPL','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_id)  exec audit_data 'USERTMPL','view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_id,@iview_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERTMPL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERTMPL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_id,@itemplate_id,@iprof_id,@iview_id, @idelete_session_id;
    else
     fetch deleted_c into @duser_id,@dtemplate_id,@dprof_id,@dview_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_VIEWPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_VIEWPROP' AND xtype = 'TR')
    DROP trigger PRMAUD_VIEWPROP

PRMAUD_VIEWPROP
create trigger PRMAUD_VIEWPROP
on VIEWPROP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iview_id varchar(255),@iview_name varchar(255),@iuser_id varchar(255),@iview_type varchar(255)

  declare @dview_id varchar(255),@dview_name varchar(255),@duser_id varchar(255),@dview_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(view_id) and
			not update(view_name) and
			not update(user_id) and
			not update(view_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'VIEWPROP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VIEWPROP',view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VIEWPROP', view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select view_id,view_name,user_id,view_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select view_id,view_name,user_id,view_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iview_id,@iview_name,@iuser_id,@iview_type, @idelete_session_id
  else
    fetch deleted_c into @dview_id,@dview_name,@duser_id,@dview_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dview_id;
				

    end else begin
    	set @pk1 = @iview_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dview_id,@dview_name,@duser_id,@dview_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(view_id)  exec audit_data 'VIEWPROP','view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_id,@iview_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_name)  exec audit_data 'VIEWPROP','view_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_name,@iview_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'VIEWPROP','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_type)  exec audit_data 'VIEWPROP','view_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_type,@iview_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'VIEWPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'VIEWPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iview_id,@iview_name,@iuser_id,@iview_type, @idelete_session_id;
    else
     fetch deleted_c into @dview_id,@dview_name,@duser_id,@dview_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSMEMO' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSMEMO

PRMAUD_WBSMEMO
create trigger PRMAUD_WBSMEMO
on WBSMEMO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_memo_id varchar(255),@itemplate_id varchar(255),@iwbs_id varchar(255),@imemo_type_id varchar(255)

  declare @dwbs_memo_id varchar(255),@dtemplate_id varchar(255),@dwbs_id varchar(255),@dmemo_type_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_memo_id) and
			not update(template_id) and
			not update(wbs_id) and
			not update(memo_type_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSMEMO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSMEMO',wbs_memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSMEMO', wbs_memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_memo_id,template_id,wbs_id,memo_type_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_memo_id,template_id,wbs_id,memo_type_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_memo_id,@itemplate_id,@iwbs_id,@imemo_type_id, @idelete_session_id
  else
    fetch deleted_c into @dwbs_memo_id,@dtemplate_id,@dwbs_id,@dmemo_type_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_memo_id;
				

    end else begin
    	set @pk1 = @iwbs_memo_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_memo_id,@dtemplate_id,@dwbs_id,@dmemo_type_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_memo_id)  exec audit_data 'WBSMEMO','wbs_memo_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_memo_id,@iwbs_memo_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'WBSMEMO','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'WBSMEMO','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(memo_type_id)  exec audit_data 'WBSMEMO','memo_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type_id,@imemo_type_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_memo_id,@itemplate_id,@iwbs_id,@imemo_type_id, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_memo_id,@dtemplate_id,@dwbs_id,@dmemo_type_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSSTEP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSSTEP' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSSTEP

PRMAUD_WBSSTEP
create trigger PRMAUD_WBSSTEP
on WBSSTEP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_step_id varchar(255),@itemplate_id varchar(255),@iwbs_id varchar(255),@iseq_num varchar(255),@istep_name varchar(255),@istep_wt varchar(255)

  declare @dwbs_step_id varchar(255),@dtemplate_id varchar(255),@dwbs_id varchar(255),@dseq_num varchar(255),@dstep_name varchar(255),@dstep_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_step_id) and
			not update(template_id) and
			not update(wbs_id) and
			not update(seq_num) and
			not update(step_name) and
			not update(step_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSSTEP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSSTEP',wbs_step_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSSTEP', wbs_step_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_step_id,template_id,wbs_id,seq_num,step_name,step_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_step_id,template_id,wbs_id,seq_num,step_name,step_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_step_id,@itemplate_id,@iwbs_id,@iseq_num,@istep_name,@istep_wt, @idelete_session_id
  else
    fetch deleted_c into @dwbs_step_id,@dtemplate_id,@dwbs_id,@dseq_num,@dstep_name,@dstep_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_step_id;
				

    end else begin
    	set @pk1 = @iwbs_step_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_step_id,@dtemplate_id,@dwbs_id,@dseq_num,@dstep_name,@dstep_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_step_id)  exec audit_data 'WBSSTEP','wbs_step_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_step_id,@iwbs_step_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_id)  exec audit_data 'WBSSTEP','template_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_id,@itemplate_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'WBSSTEP','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'WBSSTEP','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(step_name)  exec audit_data 'WBSSTEP','step_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstep_name,@istep_name,@audit_data OUTPUT
      if (@loper='D') or  update(step_wt)  exec audit_data 'WBSSTEP','step_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstep_wt,@istep_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSSTEP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSSTEP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_step_id,@itemplate_id,@iwbs_id,@iseq_num,@istep_name,@istep_wt, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_step_id,@dtemplate_id,@dwbs_id,@dseq_num,@dstep_name,@dstep_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

RT_ACTVCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ACTVCODE' AND xtype = 'TR')
    DROP trigger RT_ACTVCODE

RT_ACTVCODE
create trigger RT_ACTVCODE
on ACTVCODE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ACTVCODE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ACTVCODE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ACTVCODE.create_date end
from inserted 
where ACTVCODE.actv_code_id = inserted.actv_code_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACTVCODE',actv_code_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select actv_code_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ACTVCODE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ACTVCODE_DEL
create trigger RT_ACTVCODE_DEL
on ACTVCODE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACTVCODE',actv_code_id,null,null,null
      from deleted
  	
END

RT_ACTVTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ACTVTYPE' AND xtype = 'TR')
    DROP trigger RT_ACTVTYPE

RT_ACTVTYPE
create trigger RT_ACTVTYPE
on ACTVTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ACTVTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ACTVTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ACTVTYPE.create_date end
from inserted 
where ACTVTYPE.actv_code_type_id = inserted.actv_code_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACTVTYPE',actv_code_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select actv_code_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ACTVTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ACTVTYPE_DEL
create trigger RT_ACTVTYPE_DEL
on ACTVTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACTVTYPE',actv_code_type_id,null,null,null
      from deleted
  	
END

RT_ADMIN_CONFIG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ADMIN_CONFIG' AND xtype = 'TR')
    DROP trigger RT_ADMIN_CONFIG

RT_ADMIN_CONFIG
create trigger RT_ADMIN_CONFIG
on ADMIN_CONFIG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ADMIN_CONFIG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ADMIN_CONFIG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ADMIN_CONFIG.create_date end
from inserted 
where ADMIN_CONFIG.config_name = inserted.config_name
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ADMIN_CONFIG',config_name,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select config_name,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ADMIN_CONFIG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ADMIN_CONFIG_DEL
create trigger RT_ADMIN_CONFIG_DEL
on ADMIN_CONFIG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ADMIN_CONFIG',config_name,null,null,null
      from deleted
  	
END

RT_COSTTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_COSTTYPE' AND xtype = 'TR')
    DROP trigger RT_COSTTYPE

RT_COSTTYPE
create trigger RT_COSTTYPE
on COSTTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update COSTTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else COSTTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else COSTTYPE.create_date end
from inserted 
where COSTTYPE.cost_type_id = inserted.cost_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'COSTTYPE',cost_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select cost_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'COSTTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_COSTTYPE_DEL
create trigger RT_COSTTYPE_DEL
on COSTTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'COSTTYPE',cost_type_id,null,null,null
      from deleted
  	
END

RT_CURRTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_CURRTYPE' AND xtype = 'TR')
    DROP trigger RT_CURRTYPE

RT_CURRTYPE
create trigger RT_CURRTYPE
on CURRTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update CURRTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else CURRTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else CURRTYPE.create_date end
from inserted 
where CURRTYPE.curr_id = inserted.curr_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'CURRTYPE',curr_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select curr_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'CURRTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_CURRTYPE_DEL
create trigger RT_CURRTYPE_DEL
on CURRTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'CURRTYPE',curr_id,null,null,null
      from deleted
  	
END

RT_DOCCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DOCCATG' AND xtype = 'TR')
    DROP trigger RT_DOCCATG

RT_DOCCATG
create trigger RT_DOCCATG
on DOCCATG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DOCCATG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DOCCATG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DOCCATG.create_date end
from inserted 
where DOCCATG.doc_catg_id = inserted.doc_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCCATG',doc_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select doc_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DOCCATG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DOCCATG_DEL
create trigger RT_DOCCATG_DEL
on DOCCATG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCCATG',doc_catg_id,null,null,null
      from deleted
  	
END

RT_DOCUMENT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DOCUMENT' AND xtype = 'TR')
    DROP trigger RT_DOCUMENT

RT_DOCUMENT
create trigger RT_DOCUMENT
on DOCUMENT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DOCUMENT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DOCUMENT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DOCUMENT.create_date end
from inserted 
where DOCUMENT.doc_id = inserted.doc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCUMENT',doc_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select doc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DOCUMENT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DOCUMENT_DEL
create trigger RT_DOCUMENT_DEL
on DOCUMENT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCUMENT',doc_id,null,null,null
      from deleted
  	
END

RT_FACTCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FACTCATG' AND xtype = 'TR')
    DROP trigger RT_FACTCATG

RT_FACTCATG
create trigger RT_FACTCATG
on FACTCATG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FACTCATG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FACTCATG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FACTCATG.create_date end
from inserted 
where FACTCATG.fact_catg_id = inserted.fact_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTCATG',fact_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fact_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FACTCATG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FACTCATG_DEL
create trigger RT_FACTCATG_DEL
on FACTCATG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTCATG',fact_catg_id,null,null,null
      from deleted
  	
END

RT_FACTOR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FACTOR' AND xtype = 'TR')
    DROP trigger RT_FACTOR

RT_FACTOR
create trigger RT_FACTOR
on FACTOR
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FACTOR
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FACTOR.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FACTOR.create_date end
from inserted 
where FACTOR.fact_id = inserted.fact_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTOR',fact_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fact_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FACTOR'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FACTOR_DEL
create trigger RT_FACTOR_DEL
on FACTOR
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTOR',fact_id,null,null,null
      from deleted
  	
END

RT_FACTVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FACTVAL' AND xtype = 'TR')
    DROP trigger RT_FACTVAL

RT_FACTVAL
create trigger RT_FACTVAL
on FACTVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FACTVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FACTVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FACTVAL.create_date end
from inserted 
where FACTVAL.fact_val_id = inserted.fact_val_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTVAL',fact_val_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fact_val_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FACTVAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FACTVAL_DEL
create trigger RT_FACTVAL_DEL
on FACTVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTVAL',fact_val_id,null,null,null
      from deleted
  	
END

RT_FILTPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FILTPROP' AND xtype = 'TR')
    DROP trigger RT_FILTPROP

RT_FILTPROP
create trigger RT_FILTPROP
on FILTPROP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FILTPROP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FILTPROP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FILTPROP.create_date end
from inserted 
where FILTPROP.filter_id = inserted.filter_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FILTPROP',filter_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select filter_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FILTPROP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FILTPROP_DEL
create trigger RT_FILTPROP_DEL
on FILTPROP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FILTPROP',filter_id,null,null,null
      from deleted
  	
END

RT_LINKWBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_LINKWBS' AND xtype = 'TR')
    DROP trigger RT_LINKWBS

RT_LINKWBS
create trigger RT_LINKWBS
on LINKWBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update LINKWBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else LINKWBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else LINKWBS.create_date end
from inserted 
where LINKWBS.linkwbs_id = inserted.linkwbs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'LINKWBS',linkwbs_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select linkwbs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'LINKWBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_LINKWBS_DEL
create trigger RT_LINKWBS_DEL
on LINKWBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'LINKWBS',linkwbs_id,null,null,null
      from deleted
  	
END

RT_MEMOTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_MEMOTYPE' AND xtype = 'TR')
    DROP trigger RT_MEMOTYPE

RT_MEMOTYPE
create trigger RT_MEMOTYPE
on MEMOTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update MEMOTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else MEMOTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else MEMOTYPE.create_date end
from inserted 
where MEMOTYPE.memo_type_id = inserted.memo_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'MEMOTYPE',memo_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select memo_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'MEMOTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_MEMOTYPE_DEL
create trigger RT_MEMOTYPE_DEL
on MEMOTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'MEMOTYPE',memo_type_id,null,null,null
      from deleted
  	
END

RT_OBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_OBS' AND xtype = 'TR')
    DROP trigger RT_OBS

RT_OBS
create trigger RT_OBS
on OBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update OBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else OBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else OBS.create_date end
from inserted 
where OBS.obs_id = inserted.obs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'OBS',obs_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select obs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'OBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_OBS_DEL
create trigger RT_OBS_DEL
on OBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'OBS',obs_id,null,null,null
      from deleted
  	
END

RT_PHASE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PHASE' AND xtype = 'TR')
    DROP trigger RT_PHASE

RT_PHASE
create trigger RT_PHASE
on PHASE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PHASE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PHASE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PHASE.create_date end
from inserted 
where PHASE.phase_id = inserted.phase_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PHASE',phase_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select phase_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PHASE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PHASE_DEL
create trigger RT_PHASE_DEL
on PHASE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PHASE',phase_id,null,null,null
      from deleted
  	
END

RT_POBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_POBS' AND xtype = 'TR')
    DROP trigger RT_POBS

RT_POBS
create trigger RT_POBS
on POBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update POBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else POBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else POBS.create_date end
from inserted 
where POBS.pobs_id = inserted.pobs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'POBS',pobs_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select pobs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'POBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_POBS_DEL
create trigger RT_POBS_DEL
on POBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'POBS',pobs_id,null,null,null
      from deleted
  	
END

RT_PREFER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PREFER' AND xtype = 'TR')
    DROP trigger RT_PREFER

RT_PREFER
create trigger RT_PREFER
on PREFER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PREFER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PREFER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PREFER.create_date end
from inserted 
where PREFER.prefer_id = inserted.prefer_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PREFER',prefer_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select prefer_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PREFER'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PREFER_DEL
create trigger RT_PREFER_DEL
on PREFER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PREFER',prefer_id,null,null,null
      from deleted
  	
END

RT_PROCGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROCGROUP' AND xtype = 'TR')
    DROP trigger RT_PROCGROUP

RT_PROCGROUP
create trigger RT_PROCGROUP
on PROCGROUP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROCGROUP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROCGROUP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROCGROUP.create_date end
from inserted 
where PROCGROUP.proc_group_id = inserted.proc_group_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCGROUP',proc_group_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proc_group_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROCGROUP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROCGROUP_DEL
create trigger RT_PROCGROUP_DEL
on PROCGROUP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCGROUP',proc_group_id,null,null,null
      from deleted
  	
END

RT_PROCITEM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROCITEM' AND xtype = 'TR')
    DROP trigger RT_PROCITEM

RT_PROCITEM
create trigger RT_PROCITEM
on PROCITEM
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROCITEM
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROCITEM.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROCITEM.create_date end
from inserted 
where PROCITEM.proc_item_id = inserted.proc_item_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCITEM',proc_item_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proc_item_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROCITEM'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROCITEM_DEL
create trigger RT_PROCITEM_DEL
on PROCITEM
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCITEM',proc_item_id,null,null,null
      from deleted
  	
END

RT_PROFILE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROFILE' AND xtype = 'TR')
    DROP trigger RT_PROFILE

RT_PROFILE
create trigger RT_PROFILE
on PROFILE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROFILE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROFILE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROFILE.create_date end
from inserted 
where PROFILE.prof_id = inserted.prof_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFILE',prof_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select prof_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROFILE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROFILE_DEL
create trigger RT_PROFILE_DEL
on PROFILE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFILE',prof_id,null,null,null
      from deleted
  	
END

RT_PROFPRIV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROFPRIV' AND xtype = 'TR')
    DROP trigger RT_PROFPRIV

RT_PROFPRIV
create trigger RT_PROFPRIV
on PROFPRIV
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROFPRIV
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROFPRIV.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROFPRIV.create_date end
from inserted 
where PROFPRIV.prof_id = inserted.prof_id
and PROFPRIV.priv_num = inserted.priv_num
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select prof_id,priv_num,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PROFPRIV'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFPRIV',prof_id,priv_num,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select prof_id,priv_num,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROFPRIV'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROFPRIV_DEL
create trigger RT_PROFPRIV_DEL
on PROFPRIV
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFPRIV',prof_id,priv_num,null,null
      from deleted
  	
END

RT_QUALITY
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_QUALITY' AND xtype = 'TR')
    DROP trigger RT_QUALITY

RT_QUALITY
create trigger RT_QUALITY
on QUALITY
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update QUALITY
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else QUALITY.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else QUALITY.create_date end
from inserted 
where QUALITY.qual_id = inserted.qual_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'QUALITY',qual_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select qual_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'QUALITY'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_QUALITY_DEL
create trigger RT_QUALITY_DEL
on QUALITY
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'QUALITY',qual_id,null,null,null
      from deleted
  	
END

RT_QUERYLIB
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_QUERYLIB' AND xtype = 'TR')
    DROP trigger RT_QUERYLIB

RT_QUERYLIB
create trigger RT_QUERYLIB
on QUERYLIB
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update QUERYLIB
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else QUERYLIB.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else QUERYLIB.create_date end
from inserted 
where QUERYLIB.query_lib_id = inserted.query_lib_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'QUERYLIB',query_lib_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select query_lib_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'QUERYLIB'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_QUERYLIB_DEL
create trigger RT_QUERYLIB_DEL
on QUERYLIB
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'QUERYLIB',query_lib_id,null,null,null
      from deleted
  	
END

RT_RCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RCATTYPE' AND xtype = 'TR')
    DROP trigger RT_RCATTYPE

RT_RCATTYPE
create trigger RT_RCATTYPE
on RCATTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RCATTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RCATTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RCATTYPE.create_date end
from inserted 
where RCATTYPE.rsrc_catg_type_id = inserted.rsrc_catg_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATTYPE',rsrc_catg_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_catg_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RCATTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RCATTYPE_DEL
create trigger RT_RCATTYPE_DEL
on RCATTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATTYPE',rsrc_catg_type_id,null,null,null
      from deleted
  	
END

RT_RCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RCATVAL' AND xtype = 'TR')
    DROP trigger RT_RCATVAL

RT_RCATVAL
create trigger RT_RCATVAL
on RCATVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RCATVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RCATVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RCATVAL.create_date end
from inserted 
where RCATVAL.rsrc_catg_id = inserted.rsrc_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATVAL',rsrc_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RCATVAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RCATVAL_DEL
create trigger RT_RCATVAL_DEL
on RCATVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATVAL',rsrc_catg_id,null,null,null
      from deleted
  	
END

RT_RISKCTRL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RISKCTRL' AND xtype = 'TR')
    DROP trigger RT_RISKCTRL

RT_RISKCTRL
create trigger RT_RISKCTRL
on RISKCTRL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RISKCTRL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RISKCTRL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RISKCTRL.create_date end
from inserted 
where RISKCTRL.risk_id = inserted.risk_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'RISKCTRL',risk_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select risk_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RISKCTRL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RISKCTRL_DEL
create trigger RT_RISKCTRL_DEL
on RISKCTRL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'RISKCTRL',risk_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_RISKTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RISKTYPE' AND xtype = 'TR')
    DROP trigger RT_RISKTYPE

RT_RISKTYPE
create trigger RT_RISKTYPE
on RISKTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RISKTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RISKTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RISKTYPE.create_date end
from inserted 
where RISKTYPE.risk_type_id = inserted.risk_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RISKTYPE',risk_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select risk_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RISKTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RISKTYPE_DEL
create trigger RT_RISKTYPE_DEL
on RISKTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RISKTYPE',risk_type_id,null,null,null
      from deleted
  	
END

RT_ROLES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ROLES' AND xtype = 'TR')
    DROP trigger RT_ROLES

RT_ROLES
create trigger RT_ROLES
on ROLES
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ROLES
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ROLES.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ROLES.create_date end
from inserted 
where ROLES.role_id = inserted.role_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLES',role_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select role_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ROLES'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ROLES_DEL
create trigger RT_ROLES_DEL
on ROLES
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLES',role_id,null,null,null
      from deleted
  	
END

RT_RPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RPT' AND xtype = 'TR')
    DROP trigger RT_RPT

RT_RPT
create trigger RT_RPT
on RPT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RPT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RPT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RPT.create_date end
from inserted 
where RPT.rpt_id = inserted.rpt_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPT',rpt_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RPT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RPT_DEL
create trigger RT_RPT_DEL
on RPT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPT',rpt_id,null,null,null
      from deleted
  	
END

RT_RPTGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RPTGROUP' AND xtype = 'TR')
    DROP trigger RT_RPTGROUP

RT_RPTGROUP
create trigger RT_RPTGROUP
on RPTGROUP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RPTGROUP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RPTGROUP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RPTGROUP.create_date end
from inserted 
where RPTGROUP.rpt_group_id = inserted.rpt_group_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPTGROUP',rpt_group_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_group_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RPTGROUP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RPTGROUP_DEL
create trigger RT_RPTGROUP_DEL
on RPTGROUP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPTGROUP',rpt_group_id,null,null,null
      from deleted
  	
END

RT_RSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRC' AND xtype = 'TR')
    DROP trigger RT_RSRC

RT_RSRC
create trigger RT_RSRC
on RSRC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRC.create_date end
from inserted 
where RSRC.rsrc_id = inserted.rsrc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRC',rsrc_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRC_DEL
create trigger RT_RSRC_DEL
on RSRC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRC',rsrc_id,null,null,null
      from deleted
  	
END

RT_RSRCRCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCRCAT' AND xtype = 'TR')
    DROP trigger RT_RSRCRCAT

RT_RSRCRCAT
create trigger RT_RSRCRCAT
on RSRCRCAT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCRCAT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCRCAT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCRCAT.create_date end
from inserted 
where RSRCRCAT.rsrc_id = inserted.rsrc_id
and RSRCRCAT.rsrc_catg_type_id = inserted.rsrc_catg_type_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rsrc_id,rsrc_catg_type_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCRCAT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCRCAT',rsrc_id,rsrc_catg_type_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,rsrc_catg_type_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCRCAT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCRCAT_DEL
create trigger RT_RSRCRCAT_DEL
on RSRCRCAT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCRCAT',rsrc_id,rsrc_catg_type_id,null,null
      from deleted
  	
END

RT_RSRCROLE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCROLE' AND xtype = 'TR')
    DROP trigger RT_RSRCROLE

RT_RSRCROLE
create trigger RT_RSRCROLE
on RSRCROLE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCROLE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCROLE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCROLE.create_date end
from inserted 
where RSRCROLE.rsrc_id = inserted.rsrc_id
and RSRCROLE.role_id = inserted.role_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rsrc_id,role_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCROLE'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCROLE',rsrc_id,role_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,role_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCROLE'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCROLE_DEL
create trigger RT_RSRCROLE_DEL
on RSRCROLE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCROLE',rsrc_id,role_id,null,null
      from deleted
  	
END

RT_SETTINGS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SETTINGS' AND xtype = 'TR')
    DROP trigger RT_SETTINGS

RT_SETTINGS
create trigger RT_SETTINGS
on SETTINGS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SETTINGS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SETTINGS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SETTINGS.create_date end
from inserted 
where SETTINGS.namespace = inserted.namespace
and SETTINGS.setting_name = inserted.setting_name
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select namespace,setting_name,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'SETTINGS'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SETTINGS',namespace,setting_name,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select namespace,setting_name,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SETTINGS'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SETTINGS_DEL
create trigger RT_SETTINGS_DEL
on SETTINGS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SETTINGS',namespace,setting_name,null,null
      from deleted
  	
END

RT_TASK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASK' AND xtype = 'TR')
    DROP trigger RT_TASK

RT_TASK
create trigger RT_TASK
on TASK
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASK
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASK.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASK.create_date end
from inserted 
where TASK.task_id = inserted.task_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASK',task_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASK'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASK_DEL
create trigger RT_TASK_DEL
on TASK
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASK',task_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TASKACTV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKACTV' AND xtype = 'TR')
    DROP trigger RT_TASKACTV

RT_TASKACTV
create trigger RT_TASKACTV
on TASKACTV
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKACTV
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKACTV.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKACTV.create_date end
from inserted 
where TASKACTV.taskuse_id = inserted.taskuse_id
and TASKACTV.actv_code_type_id = inserted.actv_code_type_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select taskuse_id,actv_code_type_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TASKACTV'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKACTV',taskuse_id,actv_code_type_id,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskuse_id,actv_code_type_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKACTV'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKACTV_DEL
create trigger RT_TASKACTV_DEL
on TASKACTV
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKACTV',taskuse_id,actv_code_type_id,null,null
  	,template_id
      from deleted
  	
END

RT_TASKDOC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKDOC' AND xtype = 'TR')
    DROP trigger RT_TASKDOC

RT_TASKDOC
create trigger RT_TASKDOC
on TASKDOC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKDOC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKDOC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKDOC.create_date end
from inserted 
where TASKDOC.taskdoc_id = inserted.taskdoc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKDOC',taskdoc_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskdoc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKDOC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKDOC_DEL
create trigger RT_TASKDOC_DEL
on TASKDOC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKDOC',taskdoc_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TASKMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKMEMO' AND xtype = 'TR')
    DROP trigger RT_TASKMEMO

RT_TASKMEMO
create trigger RT_TASKMEMO
on TASKMEMO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKMEMO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKMEMO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKMEMO.create_date end
from inserted 
where TASKMEMO.memo_id = inserted.memo_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TASKMEMO',memo_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select memo_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKMEMO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKMEMO_DEL
create trigger RT_TASKMEMO_DEL
on TASKMEMO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TASKMEMO',memo_id,null,null,null
      from deleted
  	
END

RT_TASKPRED
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKPRED' AND xtype = 'TR')
    DROP trigger RT_TASKPRED

RT_TASKPRED
create trigger RT_TASKPRED
on TASKPRED
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKPRED
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKPRED.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKPRED.create_date end
from inserted 
where TASKPRED.taskuse_pred_id = inserted.taskuse_pred_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKPRED',taskuse_pred_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKPRED',taskuse_pred_id,null,null,null
  	,pred_template_id
      from inserted
      where pred_template_id != template_id
      and delete_session_id is not null
  	
  	
    declare ins cursor  for select taskuse_pred_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKPRED'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKPRED_DEL
create trigger RT_TASKPRED_DEL
on TASKPRED
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKPRED',taskuse_pred_id,null,null,null
  	,template_id
      from deleted
  	
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKPRED',taskuse_pred_id,null,null,null
  	,pred_template_id
      from deleted
      where pred_template_id != template_id
END

RT_TASKPROC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKPROC' AND xtype = 'TR')
    DROP trigger RT_TASKPROC

RT_TASKPROC
create trigger RT_TASKPROC
on TASKPROC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKPROC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKPROC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKPROC.create_date end
from inserted 
where TASKPROC.proc_id = inserted.proc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TASKPROC',proc_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKPROC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKPROC_DEL
create trigger RT_TASKPROC_DEL
on TASKPROC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TASKPROC',proc_id,null,null,null
      from deleted
  	
END

RT_TASKQUAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKQUAL' AND xtype = 'TR')
    DROP trigger RT_TASKQUAL

RT_TASKQUAL
create trigger RT_TASKQUAL
on TASKQUAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKQUAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKQUAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKQUAL.create_date end
from inserted 
where TASKQUAL.task_id = inserted.task_id
and TASKQUAL.qual_id = inserted.qual_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select task_id,qual_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TASKQUAL'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TASKQUAL',task_id,qual_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,qual_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKQUAL'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKQUAL_DEL
create trigger RT_TASKQUAL_DEL
on TASKQUAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TASKQUAL',task_id,qual_id,null,null
      from deleted
  	
END

RT_TASKRSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKRSRC' AND xtype = 'TR')
    DROP trigger RT_TASKRSRC

RT_TASKRSRC
create trigger RT_TASKRSRC
on TASKRSRC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKRSRC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKRSRC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKRSRC.create_date end
from inserted 
where TASKRSRC.taskrsrc_id = inserted.taskrsrc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKRSRC',taskrsrc_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskrsrc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKRSRC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKRSRC_DEL
create trigger RT_TASKRSRC_DEL
on TASKRSRC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKRSRC',taskrsrc_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TASKUSE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKUSE' AND xtype = 'TR')
    DROP trigger RT_TASKUSE

RT_TASKUSE
create trigger RT_TASKUSE
on TASKUSE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKUSE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKUSE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKUSE.create_date end
from inserted 
where TASKUSE.taskuse_id = inserted.taskuse_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKUSE',taskuse_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskuse_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKUSE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKUSE_DEL
create trigger RT_TASKUSE_DEL
on TASKUSE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TASKUSE',taskuse_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TCATTYPE' AND xtype = 'TR')
    DROP trigger RT_TCATTYPE

RT_TCATTYPE
create trigger RT_TCATTYPE
on TCATTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TCATTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TCATTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TCATTYPE.create_date end
from inserted 
where TCATTYPE.tmpl_catg_type_id = inserted.tmpl_catg_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TCATTYPE',tmpl_catg_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select tmpl_catg_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TCATTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TCATTYPE_DEL
create trigger RT_TCATTYPE_DEL
on TCATTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TCATTYPE',tmpl_catg_type_id,null,null,null
      from deleted
  	
END

RT_TCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TCATVAL' AND xtype = 'TR')
    DROP trigger RT_TCATVAL

RT_TCATVAL
create trigger RT_TCATVAL
on TCATVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TCATVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TCATVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TCATVAL.create_date end
from inserted 
where TCATVAL.tmpl_catg_id = inserted.tmpl_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TCATVAL',tmpl_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select tmpl_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TCATVAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TCATVAL_DEL
create trigger RT_TCATVAL_DEL
on TCATVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TCATVAL',tmpl_catg_id,null,null,null
      from deleted
  	
END

RT_TEMPLATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TEMPLATE' AND xtype = 'TR')
    DROP trigger RT_TEMPLATE

RT_TEMPLATE
create trigger RT_TEMPLATE
on TEMPLATE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TEMPLATE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TEMPLATE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TEMPLATE.create_date end
from inserted 
where TEMPLATE.template_id = inserted.template_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TEMPLATE',template_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select template_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TEMPLATE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TEMPLATE_DEL
create trigger RT_TEMPLATE_DEL
on TEMPLATE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TEMPLATE',template_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TMPLCOST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TMPLCOST' AND xtype = 'TR')
    DROP trigger RT_TMPLCOST

RT_TMPLCOST
create trigger RT_TMPLCOST
on TMPLCOST
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TMPLCOST
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TMPLCOST.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TMPLCOST.create_date end
from inserted 
where TMPLCOST.cost_item_id = inserted.cost_item_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLCOST',cost_item_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select cost_item_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TMPLCOST'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TMPLCOST_DEL
create trigger RT_TMPLCOST_DEL
on TMPLCOST
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLCOST',cost_item_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TMPLRISK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TMPLRISK' AND xtype = 'TR')
    DROP trigger RT_TMPLRISK

RT_TMPLRISK
create trigger RT_TMPLRISK
on TMPLRISK
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TMPLRISK
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TMPLRISK.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TMPLRISK.create_date end
from inserted 
where TMPLRISK.risk_id = inserted.risk_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLRISK',risk_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select risk_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TMPLRISK'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TMPLRISK_DEL
create trigger RT_TMPLRISK_DEL
on TMPLRISK
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLRISK',risk_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_TMPLTCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TMPLTCAT' AND xtype = 'TR')
    DROP trigger RT_TMPLTCAT

RT_TMPLTCAT
create trigger RT_TMPLTCAT
on TMPLTCAT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TMPLTCAT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TMPLTCAT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TMPLTCAT.create_date end
from inserted 
where TMPLTCAT.template_id = inserted.template_id
and TMPLTCAT.tmpl_catg_type_id = inserted.tmpl_catg_type_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select template_id,tmpl_catg_type_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TMPLTCAT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLTCAT',template_id,tmpl_catg_type_id,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select template_id,tmpl_catg_type_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TMPLTCAT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TMPLTCAT_DEL
create trigger RT_TMPLTCAT_DEL
on TMPLTCAT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLTCAT',template_id,tmpl_catg_type_id,null,null
  	,template_id
      from deleted
  	
END

RT_TMPLWBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TMPLWBS' AND xtype = 'TR')
    DROP trigger RT_TMPLWBS

RT_TMPLWBS
create trigger RT_TMPLWBS
on TMPLWBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TMPLWBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TMPLWBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TMPLWBS.create_date end
from inserted 
where TMPLWBS.wbs_id = inserted.wbs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLWBS',wbs_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TMPLWBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TMPLWBS_DEL
create trigger RT_TMPLWBS_DEL
on TMPLWBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'TMPLWBS',wbs_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_UDFCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UDFCODE' AND xtype = 'TR')
    DROP trigger RT_UDFCODE

RT_UDFCODE
create trigger RT_UDFCODE
on UDFCODE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UDFCODE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UDFCODE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UDFCODE.create_date end
from inserted 
where UDFCODE.udf_code_id = inserted.udf_code_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFCODE',udf_code_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select udf_code_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UDFCODE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UDFCODE_DEL
create trigger RT_UDFCODE_DEL
on UDFCODE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFCODE',udf_code_id,null,null,null
      from deleted
  	
END

RT_UDFTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UDFTYPE' AND xtype = 'TR')
    DROP trigger RT_UDFTYPE

RT_UDFTYPE
create trigger RT_UDFTYPE
on UDFTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UDFTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UDFTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UDFTYPE.create_date end
from inserted 
where UDFTYPE.udf_type_id = inserted.udf_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFTYPE',udf_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select udf_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UDFTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UDFTYPE_DEL
create trigger RT_UDFTYPE_DEL
on UDFTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFTYPE',udf_type_id,null,null,null
      from deleted
  	
END

RT_UDFVALUE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UDFVALUE' AND xtype = 'TR')
    DROP trigger RT_UDFVALUE

RT_UDFVALUE
create trigger RT_UDFVALUE
on UDFVALUE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UDFVALUE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UDFVALUE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UDFVALUE.create_date end
from inserted 
where UDFVALUE.udf_type_id = inserted.udf_type_id
and UDFVALUE.fk_id = inserted.fk_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select udf_type_id,fk_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'UDFVALUE'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'UDFVALUE',udf_type_id,fk_id,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select udf_type_id,fk_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UDFVALUE'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UDFVALUE_DEL
create trigger RT_UDFVALUE_DEL
on UDFVALUE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'UDFVALUE',udf_type_id,fk_id,null,null
  	,template_id
      from deleted
  	
END

RT_UMEASURE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UMEASURE' AND xtype = 'TR')
    DROP trigger RT_UMEASURE

RT_UMEASURE
create trigger RT_UMEASURE
on UMEASURE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UMEASURE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UMEASURE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UMEASURE.create_date end
from inserted 
where UMEASURE.unit_id = inserted.unit_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UMEASURE',unit_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select unit_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UMEASURE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UMEASURE_DEL
create trigger RT_UMEASURE_DEL
on UMEASURE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UMEASURE',unit_id,null,null,null
      from deleted
  	
END

RT_USERCOL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERCOL' AND xtype = 'TR')
    DROP trigger RT_USERCOL

RT_USERCOL
create trigger RT_USERCOL
on USERCOL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERCOL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERCOL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERCOL.create_date end
from inserted 
where USERCOL.user_col_id = inserted.user_col_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERCOL',user_col_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_col_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERCOL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERCOL_DEL
create trigger RT_USERCOL_DEL
on USERCOL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERCOL',user_col_id,null,null,null
      from deleted
  	
END

RT_USERDATA
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERDATA' AND xtype = 'TR')
    DROP trigger RT_USERDATA

RT_USERDATA
create trigger RT_USERDATA
on USERDATA
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERDATA
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERDATA.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERDATA.create_date end
from inserted 
where USERDATA.user_data_id = inserted.user_data_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERDATA',user_data_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_data_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERDATA'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERDATA_DEL
create trigger RT_USERDATA_DEL
on USERDATA
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERDATA',user_data_id,null,null,null
      from deleted
  	
END

RT_USERENG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERENG' AND xtype = 'TR')
    DROP trigger RT_USERENG

RT_USERENG
create trigger RT_USERENG
on USERENG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERENG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERENG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERENG.create_date end
from inserted 
where USERENG.user_eng_id = inserted.user_eng_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERENG',user_eng_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_eng_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERENG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERENG_DEL
create trigger RT_USERENG_DEL
on USERENG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERENG',user_eng_id,null,null,null
      from deleted
  	
END

RT_USERS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERS' AND xtype = 'TR')
    DROP trigger RT_USERS

RT_USERS
create trigger RT_USERS
on USERS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERS.create_date end
from inserted 
where USERS.user_id = inserted.user_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERS',user_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERS_DEL
create trigger RT_USERS_DEL
on USERS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERS',user_id,null,null,null
      from deleted
  	
END

RT_USERTMPL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERTMPL' AND xtype = 'TR')
    DROP trigger RT_USERTMPL

RT_USERTMPL
create trigger RT_USERTMPL
on USERTMPL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERTMPL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERTMPL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERTMPL.create_date end
from inserted 
where USERTMPL.user_id = inserted.user_id
and USERTMPL.template_id = inserted.template_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select user_id,template_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'USERTMPL'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'USERTMPL',user_id,template_id,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_id,template_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERTMPL'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERTMPL_DEL
create trigger RT_USERTMPL_DEL
on USERTMPL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'USERTMPL',user_id,template_id,null,null
  	,template_id
      from deleted
  	
END

RT_USESSION
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USESSION' AND xtype = 'TR')
    DROP trigger RT_USESSION

RT_USESSION
create trigger RT_USESSION
on USESSION
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USESSION
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USESSION.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USESSION.create_date end
from inserted 
where USESSION.session_id = inserted.session_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USESSION',session_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select session_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USESSION'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USESSION_DEL
create trigger RT_USESSION_DEL
on USESSION
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USESSION',session_id,null,null,null
      from deleted
  	
END

RT_VIEWPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_VIEWPROP' AND xtype = 'TR')
    DROP trigger RT_VIEWPROP

RT_VIEWPROP
create trigger RT_VIEWPROP
on VIEWPROP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update VIEWPROP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else VIEWPROP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else VIEWPROP.create_date end
from inserted 
where VIEWPROP.view_id = inserted.view_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VIEWPROP',view_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select view_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'VIEWPROP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_VIEWPROP_DEL
create trigger RT_VIEWPROP_DEL
on VIEWPROP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VIEWPROP',view_id,null,null,null
      from deleted
  	
END

RT_WBSMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSMEMO' AND xtype = 'TR')
    DROP trigger RT_WBSMEMO

RT_WBSMEMO
create trigger RT_WBSMEMO
on WBSMEMO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSMEMO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSMEMO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSMEMO.create_date end
from inserted 
where WBSMEMO.wbs_memo_id = inserted.wbs_memo_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'WBSMEMO',wbs_memo_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_memo_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSMEMO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSMEMO_DEL
create trigger RT_WBSMEMO_DEL
on WBSMEMO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'WBSMEMO',wbs_memo_id,null,null,null
  	,template_id
      from deleted
  	
END

RT_WBSSTEP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSSTEP' AND xtype = 'TR')
    DROP trigger RT_WBSSTEP

RT_WBSSTEP
create trigger RT_WBSSTEP
on WBSSTEP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSSTEP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSSTEP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSSTEP.create_date end
from inserted 
where WBSSTEP.wbs_step_id = inserted.wbs_step_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'WBSSTEP',wbs_step_id,null,null,null
  	,template_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_step_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSSTEP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSSTEP_DEL
create trigger RT_WBSSTEP_DEL
on WBSSTEP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,template_id)
      select getDate(),'WBSSTEP',wbs_step_id,null,null,null
  	,template_id
      from deleted
  	
END