Trigger for validation of salary updated in emp table is within range

Hi,
I need some help in correcting my fault in the below trigger as it is not working as expected.
. trigger should be invoked if while modifying the  sal in EMP table, it is not in the valid range as specified in the SALGRADE table (between lowest  losal and highest  hisal)
salgrade table
Column Name
Data Type
Nullable
Default
Primary Key
GRADE
NUMBER(2,0)
Yes
LOSAL
NUMBER
Yes
HISAL
NUMBER
Yes
I have created a trigger
create or replace trigger tr_validate_sal
before
insert or update on emp
for each row
declare
cursor c is select losal,hisal from salgrade;
begin
for i in c
loop
if :new.sal < i.losal and :new.sal > i.hisal
then
raise_application_error(-20400,'sal out of range');
end if;
end loop;
end;
after creating this trigger also i am able to insert or update salary not in range of salgrade (losal and hisal). please help.

/* Formatted on 2013/12/24 09:31 (Formatter Plus v4.8.8) */
CREATE OR REPLACE TRIGGER tr_validate_sal
   BEFORE INSERT OR UPDATE
   ON emp1
   FOR EACH ROW
DECLARE
  v_lowsal number;
  v_hisal number;
BEGIN
  SELECT min(losal) losal, max(hisal)
     INTO v_lowsal, v_hisal
        FROM salgrade;
      IF :NEW.sal not between v_lowsal and   v_hisal
      THEN
         raise_application_error (-20400, 'sal out of range');
      END IF;
END;

Similar Messages

  • Order of precedence for validation of a column in a table ?

    Can anybody tell me order of precedence for validation of a column in a table
    Which one will get executed first ?
    Integrity constraint or Database trigger.

    Why cant you test it..?
    SQL> create table test_1
      2  (c1 number references emp);
    Table created.
    SQL> create or replace trigger trig_1
      2  before insert on test_1
      3  for each row
      4  begin
      5  if :new.c1 < 1 then
      6   raise_application_error(-20000,'Invalid value');
      7  end if;
      8  end;
      9  /
    Trigger created.
    SQL> insert into test_1
      2  values(0);
    insert into test_1
    ERROR at line 1:
    ORA-20000: Invalid value
    ORA-06512: at "SCOTT.TRIG_1", line 3
    ORA-04088: error during execution of trigger 'SCOTT.TRIG_1'
    SQL> create or replace trigger trig_1
      2  after insert on test_1
      3  for each row
      4  begin
      5  if :new.c1 < 1 then
      6   raise_application_error(-20000,'Invalid value');
      7  end if;
      8  end;
      9  /
    Trigger created.
    SQL> insert into test_1
      2  values(0);
    insert into test_1
    ERROR at line 1:
    ORA-20000: Invalid value
    ORA-06512: at "SCOTT.TRIG_1", line 3
    ORA-04088: error during execution of trigger 'SCOTT.TRIG_1'
    SQL> drop trigger trig_1;
    Trigger dropped.
    SQL> insert into test_1
      2  values(0);
    insert into test_1
    ERROR at line 1:
    ORA-02291: integrity constraint (SCOTT.SYS_C005925) violated - parent key not
    found                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Mail needs to be sent after updating the salary column of emp table

    Hi,
    we have table test_emp_table, oracle form based application is running on this table...
    it conatins salary column, we have requirement that, when every any update to the salary column, a mail needs to be sent to concerned person with new and old salary values..
    I did that using the following procedure...
    ===========
    -- Create Temporary Table to hold the Updated values
    create table email_parameters
    ( id number primary key,
    oldsal varchar2(10),
    newsal varchar2(10),
    ename varchar2(100));
    --- Create Procedure
    CREATE OR REPLACE PROCEDURE send_email_new (
    l_job IN NUMBER ) is
    l_oldsal varchar2(100);
    l_newsal varchar2(100);
    l_emp_name varchar2(100);
    l_message varchar2(100);
    BEGIN
    SELECT oldsal
    INTO l_oldsal
    FROM email_parameters
    WHERE ID = l_job;
         SELECT newsal
    INTO l_newsal
    FROM email_parameters
    WHERE ID = l_job;
         SELECT ename
    INTO l_emp_name
    FROM email_parameters
    WHERE ID = l_job;
         l_message:=
    'Employee Name= '
    || l_emp_name
    || chr(10)||chr(10)
    || 'Old Salary= '
    || l_oldsal
         || chr(10)||chr(10)
    || 'New Salary= '
    || l_newsal;
    send_mail(l_message);
    DELETE FROM email_parameters
    WHERE ID = l_job;
         EXCEPTION
    WHEN OTHERS
    THEN
    DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack);
    DBMS_OUTPUT.put_line (DBMS_UTILITY.format_call_stack);
    END;
    --- Create Trigger
    create or replace trigger send_email_trg
    after update on TEST_EMP_TABLE
    for each row
    declare
    l_job number;
    begin
    dbms_job.submit (job => l_job,
    what => 'send_email_new(job);' );
    insert into email_parameters
    values (l_job, :old.sal,:new.sal,:new.ename);
    end send_email_trg;
    -- Create Procedure for Sending Mail
    create or replace procedure send_mail(l_message varchar2) is
    c utl_smtp.connection;
    PROCEDURE send_header(name VARCHAR2, header VARCHAR2) AS
    BEGIN
    utl_smtp.write_data(c,name ||':'|| header || UTL_TCP.CRLF);
    END;
    BEGIN
    c := utl_smtp.open_connection('192.168.0.18');
    utl_smtp.helo(c, 'abc.com');
    utl_smtp.mail(c, '[email protected]');
    utl_smtp.rcpt(c, '[email protected]');
    utl_smtp.open_data(c);
    send_header('From', '[email protected]');
    send_header('To', '[email protected]');
    send_header('Subject', 'Warning: Employee Solary has been updated!');
    utl_smtp.write_data(c, UTL_TCP.CRLF || l_message);
    utl_smtp.close_data(c);
    utl_smtp.quit(c);
    EXCEPTION
    WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
    BEGIN
    utl_smtp.quit(c);
    EXCEPTION
    WHEN utl_smtp.transient_error
    OR utl_smtp.permanent_error THEN
    NULL;
    END;
    raise_application_error(-20000, SQLERRM);
    END;
    ====================
    But I have doubt, if there is any problem with mail server, if user is updating salary column from form based application at same time....
    will table trigger allows him to save the new record or not????? or will he get any errors????

    thanks justin...
    I have written that code..but it works...problem is ...i am not able to understand the flow...what happens in the order, until mail is sent...
    i have another code.....
    I have written with out dbms_job, i have witten directly in the trigger itself...
    Tom suggested the procedure, what i have given above..but not the below procedure....
    I am not able to understand, what is the difference between them.....
    CREATE OR REPLACE TRIGGER test_emp_table_trg
    AFTER UPDATE
    ON test_emp_table
    FOR EACH ROW
    WHEN (NEW.sal <> OLD.sal)
    DECLARE
    l_employee_name VARCHAR2 (240);
    l_old_sal VARCHAR2 (240);
    l_new_sal VARCHAR2 (240);
    l_message VARCHAR2 (240);
    BEGIN
    /* Gets the employee full name */
    BEGIN
    SELECT ename
    INTO l_employee_name
    FROM test_emp_table
    WHERE empno = :OLD.empno;
    EXCEPTION
    WHEN OTHERS
    THEN
    l_employee_name := NULL;
    END;
    /* Gets the old Salary */
    BEGIN
    SELECT sal
    INTO l_old_sal
    FROM test_emp_table
    WHERE empno = :OLD.empno;
    EXCEPTION
    WHEN OTHERS
    THEN
    l_old_sal := 0;
    END;
    /* Gets the new position name */
    BEGIN
    SELECT sal
    INTO l_new_sal
    FROM test_emp_table
    WHERE empno= :NEW.empno;
    EXCEPTION
    WHEN OTHERS
    THEN
    l_new_sal := 0;
    END;
    l_message:=
    'Employee Name= '
    || l_employee_name
    || 'Old Salary= '
    || l_old_sal
    || 'New Salary= '
    || l_new_sal;
    BEGIN
    send_mail (l_message);
    END;
    ==========
    can you please describe it clearly???
    thanks in advance my dear friend????
    Edited by: oraDBA2 on Oct 4, 2008 10:26 PM

  • Creating a Trigger for Deleting the records from a parent Table

    I am new to creating Trigger
    We will need several small tables that will be used to store any records that are deleted by the owner of the table. These will likely need a trigger where we would Delete from the parent table and on that Delete populate the child table with the previous record's data.
    Please give me a pseudo code for this
    Thanks
    John
    Edited by: user10750995 on Dec 30, 2008 9:06 AM

    Something like this:
    CREATE OR REPLACE TRIGGER trg_my_table_hist
    AFTER DELETE
    ON my_table
    FOR EACH ROW
    BEGIN
    INSERT INTO Hist_MyTable
    ( column1, column2, ..., DELETION_DATE)
    VALUES
    (:OLD.column1, :OLD.column2, ...., SYSDATE);
    END;
    /My_Table is your main table. When a row is deleted, the trigger will be fired and copy the deleted row to another table called Hist_My_Table. I'm supposing that the history table has all columns as they are defined in main tables plus a column named DELETION_DATE.
    My experience indicates that, probably, it's a good idea maintain update history and the user. But it depends on your requests.
    Regards,
    Miguel

  • Line item for header material not updating in COEP table

    Hi all,
    from last few days, I found that   when I do confirmation and GR for process order, system is updating all line ( i.e. components, activity types) but line for header material that is finished goods  or semi finished goods is not updating in COEP table,  I have done GR for order and transferred stock from quality too.
    But still its not updating. What could be the reason for it .
    Thanks
    Vivek Varun

    Hi Krishnendu,
    Thanks for the reply ,  FI document is not getting generated.
    What could be the reason for it, as before it was working fine.
    Thanks
    Vivek Varun

  • VPD problem: select for update on join tables with policy on ref table

    In our application we use VPD. Now we ran into an issue. I will try to explain with EMP and DEPT table.
    EMP table has no VPD attached.
    DEPT table has VPD policy that forbids all updates, but allows select. (Policy returns '1=2' for statement type update.
    This query returns no rows:
    select * from emp join dept using (department_id) for update. This makes sense, because I'm going to update both the tables.
    However:
    select * from emp join dept using (department_id) for update of employee_id also returns no rows. THIS IS WRONG. I'm not going to update dept table.
    Any experience with this. Is this a known limitation ?

    I can see all the rows, because there is no select policy.
    However the point is, that VPD should allow me to update the emp table, because there is no update policy.
    With the 'for update of employee_id' clause, VPD should recognize that I'm not going to update the dept table, but only the emp table. But VPD does not recognize this, but applies the update policy of dept to the statement, making the statement to update no rows.
    (Reason behind my question is ADF Business Components, where you have ViewObjects with Referenced Entities. ADF BC generates this type of statement and now we run into this VDP limitation)

  • Nth Highest Salary from EMP table , need explaination

    I am new to the database world and hence learning queries at the initial stages. I want to retrieve the nth highest salary from the EMP table. I was not able to find out the answer by myself , so I searched on google. The following was the answer i got :
    SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal);
    Enter value for n: 2
    SAL
    3700
    Suppose the table contains salary in the following order :
    SAL
    2000
    3000
    3700
    4000
    3700
    2000
    So how come I will get the correct answer with the abov query ? I am not able to understand the part --- WHERE &N = (SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal);
    Specially the condition WHERE a.sal<=b.sal is very confusing to me. Can anyone help me please to understand the same.

    user12328699 wrote:
    I am new to the database world and hence learning queries at the initial stages. I want to retrieve the nth highest salary from the EMP table. I was not able to find out the answer by myself , so I searched on google. The following was the answer i got :
    SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal);
    Enter value for n: 2
    SAL
    3700
    Suppose the table contains salary in the following order :
    SAL
    2000
    3000
    3700
    4000
    3700
    2000
    So how come I will get the correct answer with the abov query ? I am not able to understand the part --- WHERE &N = (SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal);
    Specially the condition WHERE a.sal<=b.sal is very confusing to me. Can anyone help me please to understand the same.There is many better way to get the nth highest salary
    But still if you want to understand the same.
    Assuming the data is sorted in ascending order, then
    1) a.sal=2000, so a.sal<=b.sal results in count as 3 (not equal to user input)
    2) a.sal=3700, so a.sal<=b.sal results in count as 2 (equal to user input)
    3) a.sal = 4000 , so a.sal<=b.sal results in count as 1 (not equal to user input)
    Hence the answer is 3700
    Regards
    Anurag

  • Puzzle why query returned wrong value for last record in update.

    Hi all,
    10.2.0.4, Windows 32 bit.
    Apply 15% dis.count to related 5 items ( total amount 522 ) sorted by lowest amount first (amount = 1).
    Last record ( amount = 200 ) will be the total dis.count amount ( 78.3 ) less applied accumulated dis.count amount ( 48.50 ).
    Query runs fine without update clause but wrong result for last record with update.
    CREATE TABLE "T1"
        "ID"       NUMBER NOT NULL ENABLE,
        "ITEM_ID"  VARCHAR2(20 BYTE) NOT NULL ENABLE,
        "AMOUNT"   NUMBER(10,2) NOT NULL ENABLE,
        "dizcount" NUMBER(10,2)
    INSERT INTO T1 ( ID, ITEM_ID, AMOUNT, dizcount )  VALUES ( 65, '101', 1, NULL ) ;
    INSERT INTO T1 ( ID, ITEM_ID, AMOUNT, dizcount )  VALUES ( 65, '102', 1, NULL ) ;
    INSERT INTO T1 ( ID, ITEM_ID, AMOUNT, dizcount )  VALUES ( 65, '201', 200, NULL ) ;
    INSERT INTO T1 ( ID, ITEM_ID, AMOUNT, dizcount )  VALUES ( 65, '215', 155, NULL ) ;
    INSERT INTO T1 ( ID, ITEM_ID, AMOUNT, dizcount )  VALUES ( 65, '111', 165, NULL ) ;
    UPDATE t1 a
    SET a.dizcount =
      (SELECT
        CASE
          WHEN rec_count = row_count
          THEN (78.3 - NVL(lag(temp_total,1) over ( order by rec_count) ,0))-- 78.3 is total dizcount amount from 522 * .15
          ELSE disc_amt
        END amt
      FROM
        (SELECT id,
          item_id,
          disc_amt,
          rec_count,
          row_count,
          CASE
            WHEN rec_count != row_count -- accumulate dizcount amount except for last record
            THEN SUM(disc_amt) over (order by rec_count)
            ELSE 0
          END temp_total
        FROM
          (SELECT ID ,
            item_id,
            amount amt,
            ROUND(amount * .15,1) disc_amt, -- dizcount is 15%
            row_number () over (order by amount) rec_count,
            COUNT ( *) over () row_count
          FROM t1
          WHERE ID = 65
        GROUP BY id,
          item_id,
          disc_amt,
          rec_count,
          row_count
        )b
      WHERE a.item_id = b.item_id
      );Regards
    Zack
    Edited by: Zack.L on Jul 26, 2010 1:26 AM

    Zack.L wrote:
    Query runs fine without update clause but wrong result for last record with update.Not sure why but looks like another case in favour of MERGE.
    MERGE INTO T1
    using (SELECT id, item_id,
        CASE
          WHEN rec_count = row_count
          THEN (78.3 - NVL(lag(temp_total,1) over ( order by rec_count) ,0))-- 78.3 is total dizcount amount from 522 * .15
          ELSE disc_amt
        END amt
      FROM
        (SELECT id,
          item_id,
          disc_amt,
          rec_count,
          row_count,
          CASE
            WHEN rec_count != row_count -- accumulate dizcount amount except for last record
            THEN SUM(disc_amt) over (order by rec_count)
            ELSE 0
          END temp_total
        FROM
          (SELECT ID ,
            item_id,
            amount amt,
            ROUND(amount * .15,1) disc_amt, -- dizcount is 15%
            row_number () over (order by amount) rec_count,
            COUNT ( *) over () row_count
          FROM t1
          WHERE ID = 65
        GROUP BY id,
          item_id,
          disc_amt,
          rec_count,
          row_count
        ))b
    on (t1.id = b.id and t1.item_id = b.item_id)
    when matched then update set dizcount = b.amt ;This worked for me. I tested on 11.2 but should work on 10.2.0.4
    SQL> select * from t1 order by amount ;
            ID ITEM_ID                  AMOUNT   DIZCOUNT
            65 101                           1         .2
            65 102                           1         .2
            65 215                         155       23.3
            65 111                         165       24.8
            65 201                         200       29.8p.s. BTW, not sure if you want the column names in different cases, but your script, as it is, gave me an error (on 11.2)

  • Insert,  Delete and Update options in Table control

    Experts,
    I have writen code for Insert,  Delete and Update options in Table control. They are not working properly...
    can any one send the code for the above please...
    Thanks in advance..

    Hi,
    Following steps will help you.
    1.TOP-INCLUDE
    DATA: ITAB1 LIKE KNA1 OCCURS 0 WITH HEADER LINE.
    DATA: ITAB2 LIKE KNA1 OCCURS 0 WITH HEADER LINE.
    DATA: WA LIKE KNA1.
    DATA: ANT TYPE I,CUR TYPE I.
    DATA: OK_CODE TYPE SY-UCOMM.
    CONTROLS: TABCTRL TYPE TABLEVIEW USING SCREEN 100.
    IN FLOWLOGIC
    PROCESS BEFORE OUTPUT.
    LOOP AT ITAB1 CURSOR CUR WITH CONTROL TABCTRL.
    ENDLOOP.
    PROCESS AFTER INPUT.
    MODULE CLEAR_DATA.
    LOOP AT ITAB1.
    MODULE MOVE_DATA.
    ENDLOOP.
    ADD “OK_CODE” IN ELEMENT LIST. CLICK ON LAYOUT AND  ADD TABLE CONTROL(name it as TABCTRL) AND PUSHBUTTONS AS FOLLOWS.
    SELECT THE FIELDS FROM PROGRAM. SAVE CHECK AND ACTIVATE.
    CLICK ON FLOWLOGIC EDITOR FROM APPLICATION TOOL BAR.
    DOUBLE CLICK ON MODULE “CLEAR_DATA”.
    write the in this module as below.
    CLEAR ITAB2. REFRESH ITAB2.
    DOUBLE CLICK ON MODULE “MOVE_DATA”.
    write the code in this module as below.
    APPEND ITAB1 TO ITAB2.
    ACTIVATE PAI AND WRITE THE CODE AS BELOW.
    CASE OK_CODE.
    WHEN 'FETCH'.
    SELECT * FROM KNA1 INTO TABLE ITAB1 UP TO 20 ROWS.
    TABCTRL-LINES = SY-DBCNT.
    WHEN 'ADD'.
    GET CURSOR LINE CNT.
    CNT = TABCTRL-TOP_LINE + CNT - 1.
    CLEAR WA.
    INSERT WA INTO ITAB1 INDEX CNT.
    WHEN 'MODIFY'.
    GET CURSOR LINE CNT.
    READ TABLE ITAB2 INDEX CNT.
    LOOP AT ITAB2.
    MODIFY KNA1 FROM ITAB2.
    ENDLOOP.
    SELECT * FROM KNA1 INTO TABLE ITAB1.
    WHEN 'EXIT'.
    LEAVE PROGRAM.
    ENDCASE.
    SAVE,CHECK AND ACTIVATE ALL.
    CREATE TCODE AND EXECUTE.
    contact if u hv any issues regarding this code.
    reward points,if it is useful.
    Thanks,
    Chandu.

  • Using two cursors, one for updating salary values in the emp table

    Using COPIES of the employee and department tables provided by Oracle or using similar taples that provide employee, salary, job and dept in one table and dept number and department name in another table, write the following program. Use the dept table to step through sequentially and bring up the records with the same department from the employee table. Using an IF statement calcuate a new salary based on the job (you decide on the criteria). Update each record on the employee file (this is why you should use copies) with the new salary. In addition, calculate the total salary for each department and create a new table with the department number, the department name and the salary.
    I'm able to update the salary values, but I'm not sure how to insert those updated values into an empty table the way this problem is asking me to.
    Here's my script so far: any help would be greatly appreciated: )
    declare
    v_deptno emp.deptno%type;
    v_job emp.job%type;
    v_sal emp.sal%type;
    v_dname dept.dname%type;
    v_deptsal totalsal.deptsal%type;
    cursor salup_c is
    select job,sal
    from emp,dept
    where emp.deptno = dept.deptno
    for update of sal;
    cursor totdeptsal_c is
    select dname,sal
    from emp,dept
    where emp.deptno = dept.deptno;
    Begin
    open salup_c;
    loop
    fetch salup_c into v_job,v_sal;
    exit when salup_c%notfound;
    if v_job = 'CLERK' then
    v_sal := v_sal + 10;
    else
    if v_job = 'ANALYST' then
    v_sal := v_sal + 20;
    else
    if v_job = 'MANAGER' then
    v_sal := v_sal + 30;
    else
    if v_job = 'PRESIDENT' then
    v_sal := v_sal + 40;
    else v_sal := v_sal + 50;
    end if;
    end if;
    end if;
    end if;
    update emp
    set sal = v_sal
    where current of salup_c;
    open totdeptsal_c;
    v_deptsal := 0;
    loop
    fetch totdeptsal_c into v_dname, v_deptsal;
    exit when totdeptsal_c%notfound;
    v_deptsal := v_deptsal + v_sal;
    insert into totalsal
    values(v_deptno,v_dname,v_deptsal);
    end loop;
    close totdeptsal_c;
    end loop;
    close salup_c;
    end;
    /

    The script is actually inserting some values into the new table but look at what I'm getting
    Here it is: i only want the dept number ,the dept name, and total salary for each department.
    SQL> @ sndprob;
    PL/SQL procedure successfully completed.
    SQL> select * from totalsal;
    DEPTNO DNAME DEPTSAL
    RESEARCH 1620
    SALES 2410
    SALES 2060
    RESEARCH 3785
    SALES 2060
    SALES 3660
    ACCOUNTING 3260
    RESEARCH 3810
    ACCOUNTING 5810
    SALES 2310
    RESEARCH 1910
    DEPTNO DNAME DEPTSAL
    SALES 1760
    RESEARCH 3810
    ACCOUNTING 2110
    RESEARCH 2460
    SALES 3300
    SALES 2900
    RESEARCH 4625
    SALES 2900
    SALES 4500
    ACCOUNTING 4100
    RESEARCH 4650
    DEPTNO DNAME DEPTSAL
    ACCOUNTING 6650
    SALES 3150
    RESEARCH 2750
    SALES 2600
    RESEARCH 4650
    ACCOUNTING 2950
    RESEARCH 2110
    SALES 2950
    SALES 2600
    RESEARCH 4275
    SALES 2550
    DEPTNO DNAME DEPTSAL
    SALES 4150
    ACCOUNTING 3750
    RESEARCH 4300
    ACCOUNTING 6300
    SALES 2800
    RESEARCH 2400
    SALES 2250
    RESEARCH 4300
    ACCOUNTING 2600
    RESEARCH 3815
    SALES 4655
    DEPTNO DNAME DEPTSAL
    SALES 4305
    RESEARCH 6010
    SALES 4255
    SALES 5855
    ACCOUNTING 5455
    RESEARCH 6005
    ACCOUNTING 8005
    SALES 4505
    RESEARCH 4105
    SALES 3955
    RESEARCH 6005
    DEPTNO DNAME DEPTSAL
    ACCOUNTING 4305
    RESEARCH 2110
    SALES 2950
    SALES 2600
    RESEARCH 4305
    SALES 2600
    SALES 4150
    ACCOUNTING 3750
    RESEARCH 4300
    ACCOUNTING 6300
    SALES 2800
    DEPTNO DNAME DEPTSAL
    RESEARCH 2400
    SALES 2250
    RESEARCH 4300
    ACCOUNTING 2600
    RESEARCH 3690
    SALES 4530
    SALES 4180
    RESEARCH 5885
    SALES 4180
    SALES 5760
    ACCOUNTING 5330
    DEPTNO DNAME DEPTSAL
    RESEARCH 5880
    ACCOUNTING 7880
    SALES 4380
    RESEARCH 3980
    SALES 3830
    RESEARCH 5880
    ACCOUNTING 4180
    RESEARCH 3290
    SALES 4130
    SALES 3780
    RESEARCH 5485
    DEPTNO DNAME DEPTSAL
    SALES 3780
    SALES 5360
    ACCOUNTING 4960
    RESEARCH 5480
    ACCOUNTING 7480
    SALES 3980
    RESEARCH 3580
    SALES 3430
    RESEARCH 5480
    ACCOUNTING 3780
    RESEARCH 3830
    DEPTNO DNAME DEPTSAL
    SALES 4670
    SALES 4320
    RESEARCH 6025
    SALES 4320
    SALES 5900
    ACCOUNTING 5500
    RESEARCH 6040
    ACCOUNTING 8020
    SALES 4520
    RESEARCH 4120
    SALES 3970
    DEPTNO DNAME DEPTSAL
    RESEARCH 6020
    ACCOUNTING 4320
    RESEARCH 5850
    SALES 6690
    SALES 6340
    RESEARCH 8045
    SALES 6340
    SALES 7920
    ACCOUNTING 7520
    RESEARCH 8060
    ACCOUNTING 10080
    DEPTNO DNAME DEPTSAL
    SALES 6540
    RESEARCH 6140
    SALES 5990
    RESEARCH 8040
    ACCOUNTING 6340
    RESEARCH 2360
    SALES 3200
    SALES 2850
    RESEARCH 4555
    SALES 2850
    SALES 4430
    DEPTNO DNAME DEPTSAL
    ACCOUNTING 4030
    RESEARCH 4570
    ACCOUNTING 6590
    SALES 3100
    RESEARCH 2650
    SALES 2500
    RESEARCH 4550
    ACCOUNTING 2850
    RESEARCH 1920
    SALES 2760
    SALES 2410
    DEPTNO DNAME DEPTSAL
    RESEARCH 4115
    SALES 2410
    SALES 3990
    ACCOUNTING 3590
    RESEARCH 4130
    ACCOUNTING 6150
    SALES 2660
    RESEARCH 2220
    SALES 2060
    RESEARCH 4110
    ACCOUNTING 2410
    DEPTNO DNAME DEPTSAL
    RESEARCH 1770
    SALES 2610
    SALES 2260
    RESEARCH 3965
    SALES 2260
    SALES 3840
    ACCOUNTING 3440
    RESEARCH 3980
    ACCOUNTING 6000
    SALES 2510
    RESEARCH 2070
    DEPTNO DNAME DEPTSAL
    SALES 1920
    RESEARCH 3960
    ACCOUNTING 2260
    RESEARCH 3830
    SALES 4670
    SALES 4320
    RESEARCH 6025
    SALES 4320
    SALES 5900
    ACCOUNTING 5500
    RESEARCH 6040
    DEPTNO DNAME DEPTSAL
    ACCOUNTING 8060
    SALES 4570
    RESEARCH 4130
    SALES 3980
    RESEARCH 6040
    ACCOUNTING 4320
    RESEARCH 2120
    SALES 2960
    SALES 2610
    RESEARCH 4315
    SALES 2610
    DEPTNO DNAME DEPTSAL
    SALES 4190
    ACCOUNTING 3790
    RESEARCH 4330
    ACCOUNTING 6350
    SALES 2860
    RESEARCH 2420
    SALES 2270
    RESEARCH 4330
    ACCOUNTING 2620
    196 rows selected.

  • Help on Procedure and trigger for updating(urgent please)

    SQL> / Table A
    CTUT_ID CTUT_COMPANY_NAME CURRT_USER_ID FMIS_ID CREATE_DA UPDATE_BY UPDATE_DATE
    1234 A 15-APR-03
    2222 B 15-APR-03
    3333 C 15-APR-03
    4444 D 15-APR-03
    5555 E 15-APR-03
    6666 F 15-APR-03
    150282 G oRACLE 23-APR-03
    1 H 15-APR-03
    2 I 15-APR-03
    3 J 15-APR-03
    150343 K TIGER 24-APR-03
    150305 L EXAMPLE 23-APR-03
    150342 M SCOTT 24-APR-03
    sQL >/ Table B
    Empno     Empname UPDATE_BY UPDATE_DATE
    1 AA
    2 BB
    3 CC
    4 DD
    What i need to do is i need to create an update trigger on both tables
    like create a procedure
    1)In procedure i need to check like
    IF TABLEA.CURRT_USER_ID = (SELECT USER FROM DUAL)
    THEN
    UPDATE_BY = (CURRENT_USER_ID of CTUT_ID)
    FOR EXAMPLE CURRENT USER_ID IS SCOTT THEN
    UPDATE_BY = 150342
    UPDATE_DATE = SYSDATE
    ELSIF
    UPDATE_BY <=> (CURRENT_USER_ID of CTUT_ID)
    THEN
    MESSAGE('USER IS NOT IN TABLE);
    END IF;
    and call that procedure in the update triggers
    FOR BOTH TABLES TABLEA,TABLEB
    i CREATED A PROCEDURE BUT IT IS NOT WORKING
    ANY HELP PLEASE
    CREATE OR REPLACE PROCEDURE UPDATE(
    UPDATE_DATE out DATE,
    UPDATE_BY out VARCHAR2)
    IS
    Uuser varchar2(20);
    Udate date;
    Ufound number(1);
    BEGIN
    SELECT USER,SYSDATE
    INTO Uuser,Udate from dual;
    SELECT count(*),CTUT_ID into Ufound,Uctut_id
    FROM TABLEA
    WHERE CURRT_USER_ID = Uuser
    Group by Ctut_id;
    IF (UFOUND = 1) THEN
    UPDATE_DATE := UDATE;
    UPDATE_BY := UCTUT_ID;
    END IF;
    EXCEPTION WHEN NO_DATA_FOUND THEN
    RAISE_APPLICATION_ERROR(-20001,'User Does not Exist');
    END UPD_CONSTITUENT;
    CREATE A TRIGGER :
    CREATE OR REPLACE TRIGGER TU
    BEFORE INSERT ON TABLEA
    FOR EACH ROW
    BEGIN      
    UPDATE(:NEW.update_date,
         :NEW.update_BY);
    END IF;      
    END;
    SQL> update TABLEA
    2 set CTUT_COMPANY_NAME = 'SCOTT TEST'
    3 WHERE FMIS_USER_ID = 'N';
    update TABLEA
    ERROR at line 1:
    ORA-04091: table TABLEA is mutating, trigger/function may not see it
    ORA-06512: at "UPDATE", line 12
    ORA-06512: at "TU", line 1
    ORA-04088: error during execution of trigger 'TU'

    Hi Mara,
    You are right thats what i want
    I have a table A
    EmpNo Empname Currtuser_id Update_date Updateby
    1 Denis Oracle
    2 Scott Scott
    3 Mara MMara
    1)what i need to do is when any user tries to update the table Table A
    Then the Trigger or procedure should check whether user is exits in table A in column currtuser_id
    If his user id exits in table A
    Then allow him to update the TABLE A
    and insert his EMPNO in UPDATE_BY
    and SYSDATE in UPDATE_BY
    He will do all this process using forms
    But i need to have trigger or procedure in database level for table
    2) I have another table like 10 tables
    Suppose TABLE B
    When user tries to update TABLE B
    Then the Trigger or procedure should check whether user is exits in table A in column currtuser_id
    If his user id exits in table A
    Then allow him to update the TABLE B
    and insert his EMPNO in UPDATE_BY
    and SYSDATE in UPDATE_BY
    3) I need to have a common Procedure and call that procedure in all tables in UPDATE TRIGGER
    Thanks for your help
    Thanks

  • Mutating Error problem using audit trigger for UPDATE

    I need to add 4 columns to all of my tables named:
    INSERT_BY
    INSERT_DATA
    UPDATE_BY
    UPDATE_DATE
    I intend these to act as "inserted" and "last updated" audit trails within the table, as opposed to creating a new table and storing the audit information there. The insert columns appear to be easy, as I can just use a DEFAULT clause within the definition of the table. However when I attempted to write a (my first) trigger then I run into problems with mutating tables. Presumebly because I am attempting to change the table while the trigger is referencing it.
    create or replace trigger test_audit
    after update on dictionary
    begin
    update dictionary
    set update_by = user, update_date = sysdate
    where entity_id = :old.entity_id;
    end;
    I thought I could maybe get around this by calling a procedure from inside the trigger. Something like:
    create or replace procedure test_audit(vColumn in varchar2, vData in varchar2, vTable in varchar2) is
    -- vTable is table name
    -- vColumn is PK of table
    -- vData is value of PK in current row
    begin
    update vTable
    set update_by = user, update_date = sysdate
    where vColumn = vData;
    commit;
    end test_audit;
    However I cannot use variable for table names. Will this mean I have to create a procedure for each table/trigger? Is there a way to reference the table name as a variable and keep this a generic procedure? Or is there an easier way to record the auditing UPDATE information for each changed row within the original table?
    Many thanks in advance......

    Will
    this mean I have to create a procedure for each
    table/trigger? I think you've answered that question already.
    Is there a way to reference the table
    name as a variable and keep this a generic procedure?Not that I'm aware of.
    Or is there an easier way to record the auditing
    UPDATE information for each changed row within the
    original table?Well, there's the AUDIT feature.
    C.

  • Help me in creating a Trigger for Insert and Update Options

    Hi
    Please help me in creating a Trigger .
    My requirement is that after insert or update on a Table , i want to fire an event .
    I have started this way ,but doesn't know how to fully implement this .
    say i have a dept table
    CREATE TRIGGER DepartmentTrigger
    AFTER INSERT ON Dept
    BEGIN
    INSERT INTO mytable VALUES("123","Kiran");
    END DepartmentTrigger;
    Please tell me how can i put the Update option also .
    Thanks in advance .

    Please tell me how can i put the Update option also .Add "Or Update". ;-)
    Here are a few suggestions, but you definitely need to refer to the manual page that the previous poster suggested.
    CREATE OR REPLACE TRIGGER DepartmentTrigger
    AFTER INSERT Or Update ON Dept
    BEGIN
    INSERT INTO mytable VALUES(:new.Dept,'DEPT ADDED OR CHANGED');
    END DepartmentTrigger;
    The "Or Replace" means you can replace the trigger while you're developing without having to type in a drop statement every time. Just change and rerun your script, over and over until you get it right.
    Adding "Or Update" or "Or Delete" makes the trigger fire for those events too. Note, you may want seperate triggers in different scripts and with different names for each event. You have to decide if your design really does the same thing whether it's an insert or an update.
    :new.Dept is how you would refer to the changed vale of the Dept column (:old.Dept is the prior value). I changed the double quotes on the string in the VALUES clause to single quotes.
    Andy

  • Event should trigger when enter is pressed on select option for validation

    Hi,
    I want to trigger a event when enter is pressed on a select option field for validation.
    I have created a select option through coding. I am not able to find out any method or class for that.
    please advice.

    Hi Sachin ,
         If you want ot use the methods in the class CL_WDR_SELECT_OPTIONS.
    You can find here:-
    [WDR_SELECT_IPTIONS|https://cw.sdn.sap.com/cw/docs/DOC-20864.pdf]
    Check these if can find ur required one.
    If you are using any ui element then you can use ON_ENTER event as a action as stated by Baskaran.
    Check also if these threads can help you:-
    [WebDynpro ABAP select options method SET_VALUE_OF_PARAMETER_FIELD;
    [http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/60474842-91ca-2b10-3390-d2fd30f335fd]
    Thanks & Regards,
    Monishankar Chatterjee

  • Creating a trigger for update

    I have a table that consists of the following: product_id number, location number, qty number. product_id and location are primary keys.
    I want to create a trigger before an update and if the record doesn't exist that is trying to be updated, then I have to create the record.
    For example, if I want to do an update of the following:
    update inventory set qty = 80 where product_id=13 and location=45;
    Let's say that the record doesn't exist, how do I do this with a trigger.

    Hi,
    First of all i would like to clear one thing:
    IF you are trying to update any record and that record does not exist in table then trigger will not be called.
    "afiedt.buf" 10 lines, 236 characters
      1  CREATE OR REPLACE TRIGGER t_trig
      2  BEFORE UPDATE ON t
      3    FOR EACH ROW
      4    BEGIN
      5             DBMS_OUTPUT.PUT_LINE('Trigger has been  called!!!');
      6    EXCEPTION
      7       WHEN OTHERS THEN
      8               DBMS_OUTPUT.PUT_LINE('IN EXCEPTION:'||SQLERRM);
      9*  END;
    SQL>/
    Trigger created.
    SQL>DESC t;
    Name                                      Null?    Type
    NAME                                               VARCHAR2(20)
    SQL>SELECT * FROM t;
    NAME
    BBB
    1 row selected.
    SQL>SET SERVEROUTPUT ON
    SQL>
    SQL>UPDATE t SET NAME='XXX' WHERE name='AAA';
    0 rows updated.
    SQL>UPDATE t SET NAME='XXX' WHERE name='BBB';
    Trigger has been  called!!!  <-- Trigger called here
    1 row updated.So to achieve your result you have to do it outside the trigger.
    If you are updating trougha a procedure, after update statement you can use SQL%ROWCOUNT to get how many rows have been updated. If it zero you can insert the record.
    Regards

Maybe you are looking for

  • Pages '09 won't open my AWK or DOC files

    I've bought iWork '09 to future proof myself against the day I finally have to abandon a computer running Snow Leopard + Rosetta (I can still run AppleWorks and Word 2001 on my present machine but that won't always be the case). However, now I'm begi

  • My apple ID is "unsupported" to use for iCloud because it is not an email addresss.

    I don't want to use a different ID for iCloud and iTunes. Can I make my old ID work? I want to turn my ID lynn31632 into [email protected] or something, but I don't know how.

  • How BDLS works exactly?

    Hello, I've run BDLS report on my system after the system refresh and by coincidence I found following fact: In table EDP13 there are two columns that contain logical names - RCVPRN and RCVPOR. But only RCVPRN column has been modified by BDLS report.

  • Qm implementation

    Hi all, Can anyone please guide me on the steps involved to implement QM with WM .any refernces to study material will be also helpful.Thanks

  • How to create delivery note in local languages

    Hi Experts, My client requirement is, delivery note in local language, is it possible in standard SAP, or i will go for development please let me know. Regards, Amar