[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 879
  • Last Modified:

Instead of insert question

I am trying to write an instead of insert trigger

-- INSTEAD OF insert on Tertiary Contact views            
      INSERT INTO GWTSDEV.dbcontactperson
             (CONTACTID,
             CONTACTTYPE,            
            TAXID,    
            FIRSTNAME,              
            LASTNAME)          
       VALUES  
             (:contacts.contactid,
                                  :contacts.contacttype,
               :contacts.taxid,
               :contacts.firstname,
               :contcts.lastname);
       commit;
 WHEN duplicate_info THEN
 RAISE_APPLICATION_ERROR (
  num => -21107,
  msg => 'Duplicated Record');
END;

When I use the following code it does not like the 'When' , when I compile. If I use the code below it will compile but when I run the trigger I get FRM-40735:ON-INSERT trigger raised unhandled exception. ORA -00001.

-- INSTEAD OF insert on Tertiary Contact views            
      INSERT INTO GWTSDEV.dbcontactperson
             (CONTACTID,
             CONTACTTYPE,            
            TAXID,    
            FIRSTNAME,              
            LASTNAME)          
       VALUES  
             (:contacts.contactid,
                                  :contacts.contacttype,
               :contacts.taxid,
               :contacts.firstname,
               :contcts.lastname);
       commit;
END;
 

                              
                                    
                        
0
uTab
Asked:
uTab
2 Solutions
 
conconCommented:
Hi uTab,

try
when DUP_VAL_ON_INDEX then

Regards.
0
 
uTabAuthor Commented:
Hi concon,

Now it says that the 'FORM_TRIGGER_FAILURE' is not a proceedure or undefined.

Thanks

 
0
 
pennnnCommented:
You should use raise_application_error (as you did in your original example), not form_trigger_failure. The form_trigger_failure can be used in Oracle Forms only. It is a predefined exception in Forms, the same way as duplicate_info is a predefined exception in the example from the Oracle SQL Reference manual:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_76a.htm#2064427

You should have copied the DECLARE section also, not only the exception section:
 DECLARE
   duplicate_info EXCEPTION;
   PRAGMA EXCEPTION_INIT (duplicate_info, -00001);

Anyway, it's much cleaner to use concon's suggestion (when_dup_val_on_index).
Hope that helps!
0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 
uTabAuthor Commented:
I am using Oracle Forms. The code is as follows:

EXCEPTION
    when DUP_VAL_ON_INDEX then
      Form_Trigger_Failure(
      num => -21107,
      msg => 'Duplicated Contact Information Record');
END;
0
 
pennnnCommented:
Sorry, the question was misleading - instead of triggers are usually on views, while in forms it's a on-insert trigger...
Anyway, in this case you should use the following:
EXCEPTION
    when DUP_VAL_ON_INDEX then
      raise Form_Trigger_Failure;
END;
Hope that helps!
0
 
bolicatCommented:
when doing this

SQL> CREATE TRIGGER updDEPT_MAST
  2  INSTEAD OF UPDATE OR INSERT ON vSEL_DEPT_MAST
  3  REFERENCING NEW AS Inserted OLD AS Deleted
  4  BEGIN
  5    IF EXISTS(SELECT 1 FROM Deleted) then
  6       UPDATE DEPT_MAST
  7        SET DEPT_MAST.DEPT_NO = :Inserted.DEPT_NO
  8               ,DEPT_MAST.DEPT_NAME = :Inserted.DEPT_NAME
  9            FROM DEPT_MAST, Inserted
 10            WHERE DEPT_MAST.IMAGE_RECNBR =  :Inserted.IMAGE_RECNBR;
 11      ELSE
 12         INSERT INTO DEPT_MAST SELECT
 13                DEPT_NO
 14               ,DEPT_NAME
 15              FROM Inserted
 16  END
 17  /

getting this

Warning: Trigger created with compilation errors.

SQL>
SQL> show errors trigger updDEPT_MAST;
Errors for TRIGGER UPDDEPT_MAST:

LINE/COL ERROR
-------- -----------------------------------------------------------------
3/6      PL/SQL: SQL Statement ignored
6/11     PL/SQL: ORA-00933: SQL command not properly ended
13/3     PLS-00103: Encountered the symbol "end-of-file" when expecting
         one of the following:
         ;

SQL>
0
 
uTabAuthor Commented:
You are missing the ; on lines 15 and 16.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now