Processing Triggers
Hello
I have to create a Trigger that would insert a new Deptno into a table Dept before insert or update on Emp When Deptno is not found!!
The question is:
I can not find a syntax for "not found"
The code should be as follows:
Create or Replace trigger TriggerDept
Before Insert or Update On Emp
For each row
When (I think here I have to insert something like "new.Deptno != found")
Begin
Insert Into Dept(Deptno, Loc) Values(50, 'LA');
Update Emp
Set Sal = Sal*1.015
Where Deptno = 50;
End;
So this "new.Deptno not found" is not correct
What is a right syntax for that? And the right place to use it??
Thank you
Sloger wrote:
department name 50, location 'LA'
So you want ANY non-existing department to have name 50, location 'LA'? Does not make much sense, does it? Anyway:
CREATE OR REPLACE
TRIGGER EMP_BIR
BEFORE INSERT
ON EMP
FOR EACH ROW
BEGIN
MERGE
INTO dept d1
USING (SELECT :new.deptno deptno,'50' dname,'LA' location FROM dual) d2
ON (d1.deptno = d2.deptno)
WHEN NOT MATCHED THEN INSERT VALUES(d2.deptno,d2.dname,d2.location);
END;
/ For example:
SQL> DROP TABLE EMP1
2 /
Table dropped.
SQL> DROP TABLE DEPT1
2 /
Table dropped.
SQL> CREATE TABLE EMP1 AS SELECT * FROM EMP
2 /
Table created.
SQL> CREATE TABLE DEPT1 AS SELECT * FROM DEPT
2 /
Table created.
SQL> ALTER TABLE DEPT1
2 ADD CONSTRAINT DEPT1_PK
3 PRIMARY KEY(DEPTNO)
4 /
Table altered.
SQL> ALTER TABLE EMP1
2 ADD CONSTRAINT EMP1_FK1
3 FOREIGN KEY(DEPTNO)
4 REFERENCES DEPT1(DEPTNO)
5 /
Table altered.
SQL> CREATE OR REPLACE
2 TRIGGER EMP1_BIR
3 BEFORE INSERT
4 ON EMP1
5 FOR EACH ROW
6 BEGIN
7 MERGE
8 INTO dept1 d1
9 USING (SELECT :new.deptno deptno,'50' dname,'LA' location FROM dual) d2
10 ON (d1.deptno = d2.deptno)
11 WHEN NOT MATCHED THEN INSERT VALUES(d2.deptno,d2.dname,d2.location);
12 END;
13 /
Trigger created.
SQL> INSERT INTO EMP1(DEPTNO) VALUES(99)
2 /
1 row created.
SQL> SELECT *
2 FROM DEPT1
3 /
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
99 50 LA
SQL> SELECT DEPTNO
2 FROM EMP1
3 /
DEPTNO
20
30
30
20
30
30
10
20
10
30
20
DEPTNO
30
20
10
99
15 rows selected.
SQL> SY.
Similar Messages
-
Xellerate USR Process Triggers 11g
By default in OIM 11g, process triggers do not fire as the setting of XLUserResource.ProvisionMode is set to DB.
In an earlier discussion thread about "some issues in OIM password generation", it was stated that it is not recommended to change the setting to "JAVA" which re-enables the process triggers.
Why would I not want to change the setting back to "JAVA"?
Thanks.In 11g, Recon is stored procedure based.
If you change it to Java then it won't utilize new feature of OIM 11g so performance will be down. -
BPM Process triggered externally
I have created a BPM process and I am able to test it from NWA -> Process repository. But When I am testing from WS Navigator then I am getting an error like-> Web Service returned an error. Fault Code: "(http://schemas.xmlsoap.org/soap/envelope/)Server" Fault String: "Process start has been triggered."
But my process is started fine. Actualy I want to access this WSDL URL from other applications. Can anybody help me?
Thanks,
SomnathHi Somnath,
u will get the fault message , when u test the services in ws navigator for trigerring the BPM Process. check this article for Starting the BPM process
[http://help.sap.com/saphelp_nwce711/helpdata/en/59/b2af840e67514f8e8973d97d494c9b/content.htm]
Hope it helps
Thanks and regards -
Hello,
I would like to solve the following problem using triggers:
I need to change the DeptNo for all Emps working for Dept 20 to 50;
Trigger (or triggers) has to create Deptno 50 and copy the data from DeptName (dname) and DeptLocation (loc) to new row Where DeptNo is 50;
After that, the old DeptNo 20 has to be deleted from Dept.
The following triggers works fine:
-- step 1 --
Create or Replace Trigger TrigEmp
Before Insert or Update On Emp
For each row
Begin
INSERT INTO dept(deptno)
SELECT :NEW.deptno
FROM dual
WHERE NOT EXISTS (SELECT NULL
FROM dept
WHERE deptno = :NEW.deptno);
End;
-- step 2 --
Create or Replace Trigger TrigDept
Before Insert or Update of Deptno On Dept
For each row When(new.Deptno=50)
Begin
:New.dname := 'Sunshine';
:New.loc := 'Hawaii';
End;
The problem I have with step 3 because I have to perform DML (Delete) operation on Dept withing a trigger and I get "Mutating" error again...))
Is there any way to solve it?
Thank you for your consideration
P.S. I am still using 9iI found the solution anyway!
Here is the code:
Create or Replace Trigger TrigEmp
Before Insert or Update On Emp
For each row
Begin
INSERT INTO dept(deptno)
SELECT :NEW.deptno
FROM dual
WHERE NOT EXISTS (SELECT NULL
FROM dept
WHERE deptno = :NEW.deptno);
End;
Create or Replace Trigger TrigDept
Before Insert or Update of Deptno On Dept
For each row When(new.Deptno=50)
Begin
:New.dname := 'Sunshine';
:New.loc := 'Hawaii';
End;
Create or replace Procedure delete_dept
(Message in varchar2) is
BEGIN
DBMS_OUTPUT.PUT_LINE(Message);
END;
Create or replace trigger TrigDept2
After insert or update of DeptNo on Dept
For each row When(new.Deptno=50)
Begin
delete_dept(' ! Message for DBA - All data copied into new Dept - Deptno 20 deleted !');
End;
Create or replace trigger TrigDept3
After insert or update on Emp
For each row When(old.Deptno=20)
Begin
delete from dept
where deptno=20;
End;
runs fine and tables are not mutating anymore...!!
the idea was only to learn how to create triggers, nothing more...
I know how to create triggers using form builder in developer suite but it is always nice to understand what processes run under when you press buttons...))
thank you for help... -
Process Triggers for USR_PASSWORD
Hi All,
I have wriiten a custom code to update a field when the user password in OIM is changed. I have created an Xellerate User Process Task and mapped it as decode against "USR_PASSWORD" in the lookup table - Lookup.USR_PROCESS_TRIGGERS.
Also, I have set the system property(Xellerate User resource provision mode) value from "DB" to "JAVA".
When XELSYSADM changes the password of the user, the process task is triggered. But when the user tries to change his password, the code doesnot trigger.
Please let me know how to achive this.What does your task on the Xellerate User do? Also, what does your log say when the end user resets their password? I wonder if there is a permission issue preventing the task for running.
If you are just propagating the password, i suggest you put the task on your resource instances, and not the xellerate user.
Another option you have is to create a PostProcessor Event Handler on the user. Just put an if statement to see if the orchestration parameters contain "usr_password" and the operation is modify. Then put your code here to perform your tasks.
-Kevin -
Process triggering wrong time ( Urgent ! )
We created a process and we want to trigger it when a button process.
Process Name : PROCESS_CREATE_ORDER
Button Name : P_CREATE_ORDER
In Conditional Processing part of PROCESS_CREATE_ORDER
When Button Pressed (Process After Submit When this Button is Pressed) attiribute set P_CREATE_ORDER button.
But process is triggering every time page submitted.
So it cause errors.
we are using HTMLDB 1.6 version.Ali,
Just taking a quick look at one of my pages, I have many pages that do similar things, where I have a button to perform a process, but a conditional process (depends on which button is preesed).
On the process page, I also specify under the "Conditional Computations", the "Condition Type" - "Request = Expression1", and then then under the "Expression1" field, I specify the button name (in your case it would be "P_CREATE_ORDER" (no quotes).
Right off hand, that's about all I can think of, other than trying to create another process that does nothing. It seems like your process is not conditional to be executing every time the page is submitted.
Bill Ferguson -
Process triggered before update table filled
Hello,
We have a program that
- calls one FM (RSSM_SDL_INFOPACKAGE_DIALOG) that gives direct access to a specific infopackage (via program parameters) that is uploading an ODS when executed
- secondly calls another FM (BP_EVENT_RAISE) that triggers an event that activates the ODS (and some other processes afterwards).
The problem is: The event is triggered when the infopackage is left - and the infopackage might be left before the update table is filled. So the activating process might start before the filling of the update table has been done (monitor status not green).
How can this issue be solved keeping in mind that the end-user should only execute one transaction (the one that's execute the program).
Kind regards,
JohnnyHi Simon,
Can you provide me with information of how to build in this loop. Please check the relevant part of our program:
CALL FUNCTION 'RSSM_SDL_INFOPACKAGE_DIALOG'
EXPORTING
SOURCE.......
IMPORTING
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
PERFORM log_nogo.
MESSAGE e001(00) WITH 'FM Error: Infopackage error message succesfully logged'.
ELSE.
IF NOT p_evtid IS INITIAL.
PERFORM raise_event
USING p_evtid
CHANGING ret_code.
IF ret_code <> 0.
MESSAGE e002(zbps) WITH 'Error raising event '
p_evtid.
ELSE.
MESSAGE s002(zbps) WITH 'Event'
p_evtid
' successfully' ' raised'.
ENDIF.
ENDIF.
ENDIF.
Thanks,
Johnny -
Which Process triggered a workflow
Hi,
New to WF so any help would be appreciated.
I have a standard Oracle workflow which I need to adapt, the main logic will be to create a split decision based on which process actually called the Workflow.
How do I know which process called the workflow?
Thanks
ScottPlease ignore the above as the problem is not actually what I originally thought was happening. It turns out that any file which is updated through Oracle Drive does not trigger the BPEL workflow for the Upload Document workflow operation. The workflow that was being triggered for which I could not get details for was a temp file that was being created when browsing Oracle Drive before overwriting a file, the workflow could not get the temp files document details as the file was deleted before it could do so. Does anyone know a way of getting the workflow to be triggered upon the update of a file in Oracle Drive?
Many Thanks
Dave -
OIM 11g R1: Usr Process Triggers Not Working on Concurrent Calls
Version: 11.1.1.5.7
I am making two API calls to change a user's password.
The first call uses the ADMIN to generates a random password for a user.
The second call uses the user to change his/her own password.
I am getting an issue where one of the calls does not kickoff the Usr Process Trigger.
This happens like 1 in 15 tries.
Is this a bug or am i missing sometime?
Given below is the test code.
import java.util.Hashtable;
import java.util.Random;
import java.util.logging.Logger;
import oracle.core.ojdl.logging.ODLLogger;
import oracle.iam.identity.usermgmt.api.UserManager;
import oracle.iam.platform.OIMClient;
import oracle.iam.selfservice.self.selfmgmt.api.AuthenticatedSelfService;
public class Test
public static final Logger logger = ODLLogger.getLogger(Test.class.getName());
public static void main(String args[]) throws Exception
String authwlConfigPath = "/home/oracle/Oracle/Middleware/Oracle_IDM1/designconsole/config/authwl.conf";
System.setProperty("java.security.auth.login.config", authwlConfigPath);
String ctxFactory = "weblogic.jndi.WLInitialContextFactory";
String serverURL = "t3://localhost:14000";
Hashtable env = new Hashtable();
env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, serverURL);
env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL, ctxFactory);
OIMClient oimClient = new OIMClient(env);
OIMClient userOimClient = new OIMClient(env);
//Admin changes User Password
oimClient.login("xelsysadm", "Password1".toCharArray());
UserManager usrMgrOps = oimClient.getService(UserManager.class);
String generatedPassword = "a" + generateRandomUserPassword(30);
System.out.println("Generated Password: " + generatedPassword);
usrMgrOps.changePassword("tstark", generatedPassword.toCharArray(), true);
//User changes their own Password
userOimClient.login("tstark", generatedPassword.toCharArray());
String myPassword = "Password20";
AuthenticatedSelfService authOps = userOimClient.getService(AuthenticatedSelfService.class);
authOps.changePassword(generatedPassword.toCharArray(), myPassword.toCharArray() , myPassword.toCharArray());
System.out.println("My Password: " + myPassword);
oimClient.logout();
userOimClient.logout();
public static String generateRandomUserPassword(int length){
if(length < 1)
throw new IllegalArgumentException("length < 1: " + length);
char[] characters = new char[62];
char[] randomUserPassword = new char[length];
Random random = new Random();
for (int i = 0; i < 10; ++i)
characters[i] = (char) ('0' + i);
for (int i = 10; i < 36; ++i)
characters[i] = (char) ('a' + i - 10);
for (int i = 36; i < 62; ++i)
characters[i] = (char) ('A' + i - 36);
for (int i = 0; i < randomUserPassword.length; ++i)
randomUserPassword[i] = characters[random.nextInt(characters.length)];
return new String(randomUserPassword);Set the "Off-line" flag to true in your "Change User Password" process task.
-
Process triggered by file upload - is GP the right tool?
Hello All,
I have a process I need to model that starts with a file upload from the user, followed by some manipulation of the file by some web services.
Is GP the right tool for modeling that process?
After completing the file upload action, how can I access the the uploaded file on the server?
Do I need to implement the file upload handling with Webdynpor?
Thanks!
YossiYossin,
Based on your requirement, the GP process would be to use File Input CO followed by Web Service CO (in that order). Consolidate the output param of File Input CO (which is the File Structure) to the input for the Web Service CO (which is also a structure). I dont think you need to save the file to the local drive. The web service should be able to consume the uploaded file (which resides in the process context).
Thanx,
Mahesh -
Prevent process triggers from executing based on a specific condition.
We are using OIM 9.1 and have a rather odd problem. We have PSFT HR as our trusted source with AD and Exchange as two of our target systems.
The sAMAccountName in AD is generated based on a combination of the last name and first name of the user. Also french characters in the name are converted to english characters before the sAMAccountName is generated. For example è would be converted to e.
When someone gets married and changes their last name it is updated in OIM and thus the sAMAccountName changes also. The last name change is made in the OIM webapp and then all of the process tasks run based on the Lookup.USR_PROCESS_TRIGGERS lookup table. i.e. when USR_LAST_NAME changes then there are several process tasks that run for both AD and Exchange.
What I need to be able to do is when the sAMAccountName is the same before and after the change (remember that french characters are converted) I don't want the process tasks to run. Here's a scenario:
1. User is provision with a sAMAccountName "berube" - notice that there are no accents in the name
2. User last name is changed to "bèrubè" - notice the accents
After running both names through our conversion (a Java method) they are both the same "berube = berube (converted french characters)". If this situation occures then I don't want the process tasks associated with the USR_LAST_NAME change to run. Is there a way to do this?
Another way of stating this is "Can I make the process tasks listed in the Lookup.USR_PROCESS_TRIGGERS table conditional?"
Thanks in advance for your help.If you don't want something to run when the value is the same, i suggest you always update the process form containing the values, and then let the Updated task run to update in the target. If your value is the same twice, and you try to update the field with the same value twice, it would only trigger the first time because there won't be a change on the second.
-Kevin -
Strating a process triggered by db table content change
Hi all
I am new to BPM.
I am trying to understand if BPM answers our requirements.
Is there a possibility to start a process when a field from data base table changes?
Thanks,
NitsanHi,
Yes It can be acheived Check this [document|http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/80ddeba4-e780-2b10-7bb2-fc7a33efabbd]
also search with keyword Change Document in SCN lot of discussions are available...
Regards
Pavan -
OIM11g - Event handers preventing process task triggers firing
Hi all,
Odd one this. Our OIM 11g implementation has a number of event handlers. These work fine. However they are preventing process tasks triggering.
i.e. changing a users first name is no longer triggering AD change first name task
When I strip the event handlers out, it all works again.
Does anyone have any idea what could be causing this? (11.1.1.5.1)
Thanks,
Wayne.1. If you want to trigger the Lookup.USR_PROCESS_TRIGGERS update, then you must use the UserManager API to update, and not EntityManager.
I do not want the event handlers to trigger any process triggers. They should be triggering anyway.
2. You must update the System Property "XLUserResource.ProvisionMode" to be "JAVA" instead of "DB".
Done this and it doesn't help. And I believe it is just for process tasks on Xellerate User anyway, fairly sure you should not have to do it for process tasks on resources.
Wayne. -
Hello everyone,
Requesting help to understand.
a) When is database writer process triggered ?
b) When is log writer process triggered?
c) When is CKPT process invoked by oracle ?
d) Does CKPT process writes to all datafiles headers of datafiles that were modified as well as unmodified with new SCN number or only the modified datafiles ?
Kindly clarify . Thanks in advance .
- Gaurav R
Message was edited by: GauravRajputHello everyone,
Requesting help to understand.
a) When is database writer process triggered ?
b) When is log writer process triggered?
c) When is CKPT process invoked by oracle ?
d) Does CKPT process writes to all datafiles headers of datafiles that were modified as well as unmodified with new SCN number or only the modified datafiles ?
Kindly clarify . Thanks in advance .
- Gaurav R
Message was edited by: GauravRajput -
File Adapter does not process the same file twice
SOA: 11.1.1.4 (non-HA).
I have a file adapter that triggers when a new file gets to a directory; the file is not deleted after the process triggers.
The process is supposed to call other services via a mediator and if any remote fault happens it should rollback automatically and re-trigger with the same file at the next polling interval.
I have literally 3 scenarios:
1). The file gets picked up once, the process fails and the file is never picked up again.
Msg in log: The file : /xx/xx/xx/abc.xml is being ignored as it has already been processed
2). If the mediator only routes to one service after the file gets picked up, it works as expect (that is rollback and restart at the next polling interval). If it has more than one sequential routing rule, I see the same error as above.
3). File does not get picked up EVEN if I "touch" or rename the file.
Msg in Log:
File Adapter ProcessName Poller enqueuing file for processing :/xx/xx/xx/abc.xml
File Adapter ProcessName Ignoring File : abc.xml as it is already enqued for processing.
I have already checked, there is no permission issue.
This is what my .jca file looks like:
<adapter-config name="getFile" adapter="File Adapter" wsdlLocation="getFile.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
<connection-factory location="eis/FileAdapter" UIincludeWildcard="*"/>
<endpoint-activation portType="Read_ptt" operation="Read">
<activation-spec className="oracle.tip.adapter.file.inbound.ScalableFileActivationSpec">
<property name="DeleteFile" value="false"/>
<property name="MinimumAge" value="5"/>
<property name="SingleThreadModel" value="true"/>
<property name="PhysicalDirectory" value="/xx/xx"/>
<property name="Recursive" value="false"/>
<property name="PollingFrequency" value="20"/>
<property name="IncludeFiles" value=".*"/>
<property name="UseHeaders" value="true"/>
<property name="MaxRaiseSize" value="5"/>
<property name="ListSorter" value="oracle.tip.adapter.file.inbound.listing.TimestampSorterAscending"/>
</activation-spec>
</endpoint-activation>
</adapter-config>
Thanks for looking into it in advance.
Any help with the error messages will be appreciated.You have to use MOVE operation, if there is any remote exception occured, then move the file to someother folder and again move back to the same folder where the file pickup will start.
In that way you will be use the same file picked up next time when the polling happens.
It is considered good etiquette to reward answerers with points (as "helpful" - 5 pts - or "correct" - 10pts).
Thanks,
Vijay
Maybe you are looking for
-
Problem with animated gif when direct image sharing over iChat
Im having an issue that an animated gif isnt displaying animated when I drag and drop it into an instant message window with a buddy. I drag it from Firefox animated into the chat window but its doesnt get animated. I can see his gifs are animated wh
-
Not able to use Shift field and Shift Grouping field while using OPK0
Hi, I am using the SAP ECC 6.0 Enhancement Pack-4, In Transaction 'OPK0' while confuguring the default value for shift in the *Default* Tab, i am getting the 'Shift - field:SHIFT_PROP('Proposal Shift for Single-Screen Entry') and Shift Grouping, in D
-
How do you access external hard drive data that is connected to TimeCapsule through USB from iPad or knows based computer?
-
Query: Not getting the desired result. Please help
QL> select * from ecev; entity_Tag 7 8 9 10 1 2 3 4 5 6 SQL> select * from dg; DIGP_TAG CEPT_TAG 600 1 700 1 800 1 900 1 100 1 200 1 500 1 75 2 SQL> select * from enow; ENTITY_CODE ENTITY_TAG DIGP_TAG TARGET_DA CEPT_TAG EXT 7 600 26-MA
-
Default Username and password for CCM DC-Directory Admin
What is the default username and password for accessing dc directory for callmanager ? TIA