Discussions
Categories
- 197K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.8K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 556 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.4K Development
- 17 Developer Projects
- 139 Programming Languages
- 293.1K Development Tools
- 111 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 161 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 475 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
Problem getting the oracle trigger to execute

725425
Member Posts: 2
I am trying to create a trigger that will execute whenever an insert is being made on an already existing unique value. So, for example, if my database table named ORG_ALIAS has an alias entry, trying to insert another alias with same value, type and assigning authority should throuw an error:
Here is my code I put in sql developer to create the trigger:
CREATE TRIGGER TRIGGER1
BEFORE INSERT ON ORG_ALIAS
referencing new as new old as old
for each row
BEGIN
if ((:new.ALIAS_VALUE = :old.ALIAS_VALUE) and (:new.ALIAS_TYPE = :old.ALIAS_TYPE) and (:new.ASSIGNING_AUTHORITY = :old.ASSIGNING_AUTHORITY)) then
raise_application_error (-20999, 'NPI should be unique');
end if;
end;
/
when i run it, it shows that the trigger has been created successfully and with no errors. But when I try to insert another duplicate entry into the table with the same value, type and assigning authority, it allows me to insert that entry into the table instead of erroring out.
I am not sure what am I missing here?
Here is my code I put in sql developer to create the trigger:
CREATE TRIGGER TRIGGER1
BEFORE INSERT ON ORG_ALIAS
referencing new as new old as old
for each row
BEGIN
if ((:new.ALIAS_VALUE = :old.ALIAS_VALUE) and (:new.ALIAS_TYPE = :old.ALIAS_TYPE) and (:new.ASSIGNING_AUTHORITY = :old.ASSIGNING_AUTHORITY)) then
raise_application_error (-20999, 'NPI should be unique');
end if;
end;
/
when i run it, it shows that the trigger has been created successfully and with no errors. But when I try to insert another duplicate entry into the table with the same value, type and assigning authority, it allows me to insert that entry into the table instead of erroring out.
I am not sure what am I missing here?
Tagged:
Answers
-
Why are you trying to enforce uniqueness with a trigger? Triggers can't do it - they can't see any other row but the one being updated. When you are comparing :new with :old, you are comparing the former value of the column with the new value of the column on the same row. Which only makes sense during an UPDATE, not an INSERT.
Use an unique constraint instead. -
So there would not be any way to use a trigger to do this? Maybe not by using row within the for loop, but some other way? I could use a unique constraint for the multiple columns but seems like the requirements wanted it to be done using the trigger ( and throw an error or exception when user tries to insert the same values again) rather than using unique constraint... If it is not possible though, then I will have to do it using the unique constraint...
Edited by: user11963881 on Oct 1, 2009 11:04 AM -
It is almost impossible, and at least a very bad thing to do. Use the constraint.
In the future, post your questions under the SQL And PL/SQL forum, as this one is only for the SQL Developer tool.
Thanks,
K.
This discussion has been closed.