Column level trigger

Hi All -
I have a table which has 6 columns
create table main_tbl
(p_id integer,
p_lname varchar2(20),
p_fname varchar2(20),
p_dept varchar2(15),
p_office varchar2(15),
p_ind char(1)
And I have a corresponding audit/history table
create table main_tbl_audit
(p_id integer,
p_lname varchar2(20),
p_fname varchar2(20),
p_dept varchar2(15),
p_office varchar2(15),
p_ind char(1)
As part of the application audit process, I want to move a record from main_tbl to main_tbl_audit only when a column value changes. I can do this using a column level trigger but if I use column level trigger and if for example 3 values are changed in the main_tbl at once then it will create 3 different rows in the main_tbl_audit table.
Is there a way to always create one row in main_tbl_audit table even if a record in the main_tbl table has one or more column value changes.
Please share your expertise.
Thanks,
Seenu001

I'm not quite sure what you mean by a "column-level trigger" since there is no such thing in Oracle. You can specify a list of columns in the OF clause of a row-level trigger, so I'm guessing that's what you're talking about. But then I don't understand why you would get three rows in the audit table. Unless you created three different row-level triggers each of which specified a single column?
Why wouldn't you simply have a single row-level trigger that compared the old and new values, i.e. (ignoring NULLs)
CREATE OR REPLACE TRIGGER trg_audit_main
  BEFORE UPDATE ON main_tbl
  FOR EACH ROW
BEGIN
  IF( :new.p_lname != :old.p_lname or
      :new.p_fname != :old.p_fname or
  THEN
    INSERT INTO main_tbl_audit ...
  END IF;
END;Justin

Similar Messages

  • Statement level trigger!!!!

    Hi Gurus,
    I have an issue here. I am inserting multiple rows in a table say A. so I wrote an after insert trigger for each row referencing new as new and old as old on table A. This trigger when fired inserts rows in table B.
    These rows are selected from say table C by using the :new.column (one of the coulmns that are about to be inserted in tableA) of table A as parameter and then inserted into table B. But I want that trigger to fire only once though I am inserting multiple rows.
    For this purpose I took out the "for each row and referencing new as new and old as old statements" to make it statement level trigger but in this case I am unable to use the :new.column of table A as parameters. Can anyone please suggest how to read the rows in statement level trigger that are being inserted in table A and pass them as parameters to select the values from table C and again insert them in table B. I know it is kinda confusing. Any suggestions...... Thanks in advance!!!!!

    Hi warren,
    Thnx for ur response. here is the code
    CREATE OR REPLACE TRIGGER ALPHA_AIR
    AFTER INSERT
    ON ALPHA
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    DECLARE
    l_source varchar2(10);
    l_amount number;
    l_comments varchar2(50);
    BEGIN
         SELECT      b_source,
              b_amount,
              b_comments
         INTO     l_source,
              l_amount,
              l_comments
         FROM BETA
         WHERE beta_id=:new.alpha_id:
         INSERT INTO GAMMA
    ( g_source,
         g_amount,
         g_comments,
         date )
         VALUES (
              l_source,
              l_amount,
              l_comments,     
              sysdate);
    END;
    The trigger is on table ALPHA and it selects data from BETA using :new.alpha_id as parameter. But for multiple rows inserted in table ALPHA, multiple times rows are inserted in table GAMMA. So I made it statement level trigger but I cannot pass :new.alpha_id as parameter in the select statement. Is there any way to do this. Hope it makes sense.

  • Column Level Security Using VPD under oracle 11g

    Hi
    I am using an example from Oracle Database 10g: Advance Security -- Virtual Private Databases
    1. The Application Context -- that sets the session environment for the use is ok.
    2. The Logon Trigger that executes the above is ok. It had been tested.
    3. The Security Policy that returns a predicate after checking the output of the Application Context is ok.
    4. The security policy applied to the STOCK_TRX table is ok.
    5. Select and Insert from the database work.
    However, after dropping both the insert and select policy, I am having problem getting a select policy to work with column-level VPD. I will get the ORA-28104 -- input value for statement type is not valid and ORA-06512 at SYS.DBMS_RLS line 20. See code below
    begin
    DBMS_RLS.ADD_POLICY
    ('PRACTICE', 'STOCK_TRX', 'STOCK_TRX_SELECT_POLICY', 'PRACTICE', 'SECURITY_PACKAGE.STOCK_TRX_SELECT_SECURITY', 'PRICE');
    end;
    Note:
    PRICE is the sec_relevant_cols
    STOCK_TRX is the table
    Can you please help.
    Thx

    The syntax for row level security is not the same for columns level security. All the parameters to the DBMS_RLS.ADD_Policy() function should be preceded by the type of the parameter for:
    begin
    DBMS_RLS.ADD_POLICy(object_schema=>PRACTICE, ... sec_relevant_cols=>'PRICE);
    end;
    I did not know this before. I thought they were there in the example for explanatory reasons. I decided to answer the question for myself because I know others have the same interpretation.

  • Granularity of change rules in CDC (using Oracle streams) at columns level.

    Is it possible to implement granularity of change rules in CDC (using Oracle streams) at columns level.
    E.g. table abc with columns a1, b1, c1 where c1 is some kind of auditing column. I want to use CDC on table abc but want to ignore changes on c1.
    Is it possible? My other option is to split table abc into a child table that has the Primary key and c1 only but it needs additional table and joins.
    Thanks
    Shyam

    The requirement can be implemented by a simple trigger.
    You seem to plan to kill a mosquito by using a nuclear bomb.
    Sybrand Bakker
    Senior Oracle DBA

  • Column level table audit

    Hi Friendz,
    Is there a ulitity audit for table at column level? Say, if I update a column SALARY in table EMP, it will reflect that the SALARY was changed and save in the audit_trail.
    Can you share me sample trigger similar to this please.
    Thanks a lot.

    KinsaKaUy? wrote:
    Hi Friendz,
    Is there a ulitity audit for table at column level?NO such table
    Say, if I update a column SALARY in table EMP, it will reflect that the SALARY was changed and save in the audit_trail.
    Can you share me sample trigger similar to this please.does not exist.
    I am sorry to see that GOOGLE, SEARCH & HELP are broken for you.
    Please be patient while repairs are completed.
    Additional information will be posted when it becomes available.

  • Record column level changes of table for audit.

    Hi Experts,
    I need  suggestion on recording column level changes in table for internal aduit purposes, our company policy does not allow us to enable CDC and CT on database levels so I am looking for whar are other the best ways for doing the same ?
    I know we can use triggers and OUTpUT clause to record the changes on tables but Is there any other light weight solution for recording changes on transactions tables which very gaint tables. 
    Seeking your guidnace on solution side ?
    Shivraj Patil.

    OUTPUT should be the best choice for your case as this would be much lighter than Trigger.

  • Row level trigger updating the entire table instead of affected rows

    I am using orace 8.1.7. My problem is I have a row level trigger that should fire only once ( and insert a row in my auditing table). But it is doing it for the entire table. This only happens when I have more than two columns in an Update clause. Has anyone run into this problem before. Any help would be highly appreciated.
    thanks,
    dinesh

    create or replace trigger contact_audit
    before update or delete on contact
    for each row
    declare
    v_audit_type char(1);
    v_audit_item varchar2(64) := 'CONTACT';
    v_acct_seqid number;
    Begin
    if inserting then
         v_audit_type := 'I';
    elsif updating then
    v_audit_type := 'U';
    elsif deleting then
    v_audit_type := 'D';
    end if;
    select acct_seqid into v_acct_seqid
    from account_contact
    where email = :old.contact_email;
    insert into audit_event ( id, audit_item, audit_type, audit_date, acct_seqid, col_1, col_2, col_3, col_4, col_5, col_6, col_7, col_8,
    col_9, col_10, col_11, col_12, col_13, col_14, col_15, col_16, col_17, col_18, col_19, col_20)
    values (audit_event_sq.nextval, v_audit_item, v_audit_type, sysdate, v_acct_seqid, :old.contact_email, :old.contact_type, :old.contact_last, :old.contact_first,
    :old.title, :old.address1, :old.address2, :old.address3, :old.city, :old.state, :old.zip_code5, :old.zip_code4, :old.zip_code_barcode, :old.country, :old.phone_no,
    :old.phone_ext, :old.receive_info_email_yn, :old.pwd_encrypted, :old.pwd_question, :old.pwd_answer);
    End;

  • Getting iteration number in row level trigger

    Hi. Is there a way to get iteration number in row level trigger? Or to access data inserted in statement level trigger from row level trigger (statement level trigger are supposed to be executed before row level triggers but I cannot access them).
    I'm using Oracle 10g.

    My oracle version:
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    CORE 10.2.0.4.0 Production
    TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    And business problem is like this:
    I need to have two log tables for some tables in my database:
    First log table is a statement level log. After insert or update or delete it should get one new row with mentioning date, time, sid, query type and some additional information.
    Second table should include all columns from table logged, date, time, sid and operation type.
    The problem is, I need exact the same date and time for each row in both log tables.
    Someone said that sysdate should return same value for query execution time. But it have nothing to do with triggers fired on this query.
    So you may say that I'm curious about getting exact same date and time for one statement level trigger and for each execution of row level trigger.

  • Column level filter at RPD level - OBIEE 11g

    Hi all,
    How do i add a filter at the column level in logical layer for one of the metric , it has the following calculation
    case when id in (1,2,3,4,5,5) and category='AS' then case when points=10 or points=9 then 1 else 0 end end
    I want the metric to reused for other id's as well... so i want to put case when id in (1,2,3,4,5,5) in filter of the column. how do i achieve it? plz help
    Thanks,
    Lona

    Your question is not clear, I assume you want points to be reused for other ids, so try this
    case when id in (1,2,3,4,5,5) and category='AS' then
    case when points in (10 ,9) then 1
    else 0
    end
    else points
    end
    if helps mark
    ~ http://cool-bi.com

  • How to apply 'disableColumnReordering="true"' at column level.

    Hi Experts,
    I am using jdev 11.1.1.5.0.
    I have a requirement, not to move(drag) the column within a table. I got succeeded to apply this on table level so that all columns are fixed, but not able to fix it at column level.
    So, is there any way or a property to fix this at column level.?
    Please help out me.
    Thanks & Regards,
    Bittu..!

    Hi
    You can use at column level frozen="true" but this will not disable reordering. This specifies whether the column is frozen. In the table columns until the frozen column are locked with the header and not scrolled with the rest of the columns. Frozen attribute is honored only on the top level column,since it is not possible to freeze a child column by itself without its parent being frozen
    See if this helps to your requirements.
    Reference: http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_column.html
    Nikolay

  • Capturing value in after insert or update row level trigger

    Hi Experts,
    I'm working on EBS 11.5.10 and database 11g. I have trigger-A on wip_discrete_jobs table and trigger-B on wip_requirement_operations table.When ever i create discrete job, it inserts record in both wip_discrete_jobs and wip_requirement_operations.
    Note:2 tables are like master-child relation.
    Trigger-A: After Insert.Row Level trigger on wip_discrete_jobs
    Trigger-B:After Insert,Row Level trigger on wip_requirement_operations
    In Trigger A:
    I'm capturing wip_entity_id and holding in global variable.
    package.variable:=:new.wip_entity_id
    In Trigger B:
    I'm using the above global variable.
    Issue: Let's say i have create discrete job,it's wip_entity_id is 27, but the global variable is holding the previous wip_entity_id(26),not current value.It looks like before trigger A event is complete, trigger B is also in process, i think this could be the reason it's not storing the current wip_entity_id in the global variable.
    I need your help how to have the current value in the global variable so that i can use that in the trigger B.
    Awaiting response at the earliest.
    Thanks

    798616 wrote:
    Hi Experts,
    I'm working on EBS 11.5.10 and database 11g. I have trigger-A on wip_discrete_jobs table and trigger-B on wip_requirement_operations table.When ever i create discrete job, it inserts record in both wip_discrete_jobs and wip_requirement_operations.
    Note:2 tables are like master-child relation.
    Trigger-A: After Insert.Row Level trigger on wip_discrete_jobs
    Trigger-B:After Insert,Row Level trigger on wip_requirement_operations
    In Trigger A:
    I'm capturing wip_entity_id and holding in global variable.
    package.variable:=:new.wip_entity_id
    In Trigger B:
    I'm using the above global variable.
    Issue: Let's say i have create discrete job,it's wip_entity_id is 27, but the global variable is holding the previous wip_entity_id(26),not current value.It looks like before trigger A event is complete, trigger B is also in process, i think this could be the reason it's not storing the current wip_entity_id in the global variable.
    I need your help how to have the current value in the global variable so that i can use that in the trigger B.
    Awaiting response at the earliest.
    ThanksMy head hurts just thinking about how this is being implemented.
    What's stopping you from creating a nice and simple procedure to perform all this magic?
    Continue with the global/trigger magic at your own peril, as you can hopefully already see ... nothing good will come from it.
    Cheers,

  • Column level access in Crystal Report Server

    <p>Hi,</p><p>I have three fields in my Crystal Report. The crystal report will be exported to PDF by my customised web application. The application has a built in user security and access control model. However if user 1 logs in he should see all the 3 columns(database fields) on the exported PDF. If user 2 logs in he should see only first 2 columns as he has access to only those. We would also be using Crystal Report Server.</p><p>I know this could be done in Crystal Report itself but is there any way to leverage column level access (and also row level) functionality using Crystal Report Server. The Crystal Report reports off an ODBC Datasource.</p><p>It would be great if any one could help me in this regard.</p><p> Cheers. </p><p>&#160;</p>

    If you were running the same version designer and server, you could open your reports straight from the repository, and save them straight back. Then you wouldnt have multiple versions of RPTs flying about.
    I have just purchased a new licence for 2008 and an 2008 upgrade for a Xr2.
    I don't think I completely understand, but we do have Crystal Reports 2008 and Crystal Reports Server 2008 available for purchase.

  • Grand Total not displaying correctly on Column level security.

    Hi All,
    I have implemented the Column level security for three columns. But in dashboard report. The grand total is not displaying correctly. The grand total values are still displayed for the hidden columns.
    Is there any work around for this.
    The sample how my report looks like after column level security is.
    ColumnA Metric1 Metric2 Metrics3(to be hidden)
    A 100 200
    B 150 100
    GrandTotal 250 300 400( this includes the value of A = 300, B = 100).
    Regards,
    Bhavik

    Any pointers please.

  • In SharePoint Calendar lists, fields [Start Time] and [End Time] do not exist at the Site Column level.

    <header style="box-sizing:border-box;color:#777777;line-height:1;font-size:13px;padding-right:46px;margin-bottom:3px;font-family:'Helvetica Neue', arial, sans-serif;">
    </header>
    I'm doing SP app development and have the following problem.
    I need to check Start time and End Time in SharePoint Calendar using CAML query and then add a new event to Calendar list using the Start time and End Time that user has entered in 2 datapickers
    in the form.
    function AddCalendarListItems() {
    var SD = document.getElementById("datepicker1").value;
    var SThh = document.getElementById("St1").value;
    var STmm = document.getElementById("St2").value;
    var ED = document.getElementById("datepicker2").value;
    var EThh = document.getElementById("Et1").value;
    var ETmm = document.getElementById("Et2").value;
    var T = document.getElementById("Title").value;
    var S1 = SThh;
    SD = SD.slice(6, 10) + "-" + SD.slice(0, 2) + "-" + SD.slice(3, 5) + "T" + SThh + STmm + ":00Z";
    ED = ED.slice(6, 10) + "-" + ED.slice(0, 2) + "-" + ED.slice(3, 5) + "T" + EThh + ETmm + ":00Z";
    //alert("SD= " + SD + " , ED= " + ED);
    var siteUrl = SiteCollurl + "/SharePointApp11";
    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Calendar');
    var ListItemCInfo = new SP.ListItemCreationInformation();
    var newEvent = oList.addItem(ListItemCInfo);
    newEvent.set_item("Title", T);
    newEvent.set_item("EventDate", SD);
    newEvent.set_item("EndDate", ED);
    newEvent.update();
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQueryAddCalendarSucceeded2), Function.createDelegate(this, this.onQueryAddCalendarFailed2));
    function onQueryAddCalendarSucceeded2(sender, args) {
    alert("Success");
    function onQueryAddCalendarFailed2(sender, args) {
    alert('Add new item to the calendar failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    But I receive the following error:
    Add new item to the Calendar failed. Column 'Start time' does not exist. It may have been deleted by another user.
    I've checked and 'Start time' does exist. So it seems in SharePoint Calendar lists, field [Start Time] and [End Time]  exist but do not exist at the Site Column level.
    Please advise.

    Hi Khojasteh,
    Use “EventDate” for Start Time field, and “EndDate” for End Time field. They are the internal name of the two fields, you can check it in the column settings page url like “Field=EndDate”.
    If it isn’t the issue, please debug the code, in which line the error occurs.
    Thanks,
    Qiao
    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact
    [email protected]
    Qiao Wei
    TechNet Community Support

  • Rank on column-level Grand total column in pivot table  -  Need help

    Hi ,
    I have developed the report, which is having a pivot view. In pivot view i have a column level grand total. I need to apply the rank for the grand total column..
    will that be possible.. if possible let me know..
    Thanks
    Kishore

    MAY BE IT IS NOT POSSIBLE IN PIVOT VIEW< AS WE DONT HAVE FORMULA EDIT OPTION FOR COLUMNS IN PIVOT VIEW.......
    Thanks & Regards
    Rushi

Maybe you are looking for

  • In purchase order i will give only parent material but in goods receipt

    Hi, In my third party po i will create with parent material as i am creating goods receipt i need to check all the BOM materials of that parent material. can i get all the first level components of that parent material. thanks in advance..,

  • How do I share one photo library across accounts?

    Hi, We have four accounts on one family computer (a Powermac G5), and I would iPhoto in each of these accounts to point to the same photo library. (This is iPhoto 6.) Here is what I have done: I placed the iPhoto Library into the "Shared folder (unde

  • My ipod touch 5th generation isn't working properly.

    I was recently on an app called Cinemagraph and was logged in. After a while, I turned off my ipodtouch and then attempted to turn it on, but it didn't. I presssed the home button to activate Siri, and then appeared back on my lock screen. I typed in

  • WLC and ISE 1.1.1 guest MAC address limits

    Hi, I am looking at implimenting a wireless hotspot and want to know if ISE 1.1.1 is able to enforce limits on the individual users (ie. Time limit, Data Limit) These limits need to be erased at the end of the day. I am using dynamic vlans to seperat

  • Why does the inbox on my iPad say I have unread email?

    I have no unread messages in my Exchange Inbox but my iPad says I have 744 messages unread. Why is this?