Using process variables in conditional transition
HI,
I am usin Oracle BPM 1.03
I wanto to have a value of a variable visible in the user's inbox. Therefore, I need to use project level variables.
I also want to use this variable in conditional tranistion, but the condition editor only allows Instance level variables.
Am I overlooking something? Is there an easy way to use project variable in conditional transtions?
Matej
you should be able to manually type the transition condition on the properties tab.
xArea == "MyArea"
where xArea is a Project Variable
Similar Messages
-
Is it possible to use repository variable in conditional formatting
Is it possible to use repository variable in conditional formatting . if no then is there any workaround for implementing the same....
Also i came across a sql of an init block.. which goes like 'exec OracleBi..procedure_name'
Is 'OracleBi..' a keyword or something like that....Refer http://www.biblogs.com/2008/09/03/obiee-repository-variables-filtering-and-conditional-formatting/
Init blk is calling any procedure here with name OracleBI here...no any specific significance.
Hope this help
Edited by: Deepak Gupta on Aug 12, 2011 8:27 AM -
Using process variables in XPath
I am trying to use a variable (/process_data/@Division) to identify an xml node to determine the person for a task:
/process_data/DivisionRolesXML/divisions/division[Division='string(/process_data/@Division )' and Position='Div Executive']/LDAPId
I get no value returned (e.g. result is 'null'). The log shows that @Division has a string value.
It works if the actual value (not variable) is specified:
/process_data/DivisionRolesXML/divisions/division[Division='division_name' and Position='Div Executive']/LDAPId
Thoughts anyone ?Hi
I'm reasonably sure that you need to remove the single quotes in your expression. The single quotes mean that your entire sub-clause is being treated as a string, rather than as an expression.
i.e.
...[Division='string(/process_data/@Division)' ...
change to
...[Division=string(/process_data/@Division) ...
Howard
http://www.avoka.com -
Using Session Variable with Conditional Formatting Filter
Hi,
I'm trying to add a condition to my report in order to flag all opportunities that have a close date that is in the past. The way I'm trying to do this is by adding a condition to say when close date is less than current_date, flag the column with an image.
Issue I'm having is that the filter window within conditional format tab appears to not have the session variable option as you do when you create a filter on a column the normal way. A colleague told me to use an SQL expression, but again this option seems to be unavailable too within the conditional format tab.
Can anybody assist please?
ThanksCreate a new column and write a CASE WHEN condition like case when close date < current_date then 'Y' ELSE 'N' END.
Then on your actual date column, you can do conditional analysis based on the newly created column for values having Y then the image.
finally, you can hide the newly created column. -
Using process variables in subprocesses
Hi all,
I have a large process which I would like to decompose into smaller sub processes (e.g. a process that renders a pdf and sends it to a user) which I then can invoke in a orchestration of all the small workflows. I hope you understand what I am trying to say.
I have set some input and output variables for the subprocess, but in the Workbench no fields for these names appear. I guess this is the way to provide the subprocess with input and output values but I need to do some more setup of the variables I guess however I am not sure what to do.
Sincerely
Kim ChristensenNith is correct. Here are some links to documentation (it's the ES2 docs, but it mostly applies to ES as well):
http://help.adobe.com/en_US/livecycle/9.0/workbenchHelp/000105.html#1032904
http://help.adobe.com/en_US/livecycle/9.0/workbenchHelp/001290.html#2039453
scott -
How to use a variable in a cursor?
Hi,
Is it possible to use a variable as condition for fetching data using cursors? The code works fine ( as shown) without using the clause 'where empno < 7600'. How can I use the variable 'stmt' in defining/fetching data by using cursor cur_1? My target is to get info for employee whose empno<7600. Any inputs would be appreciated.
DECLARE
STMT VARCHAR2(50) := 'EMPNO < 7600';
CURSOR CUR_1 IS SELECT EMPNO, ENAME, JOB, MGR FROM EMP;
BEGIN
OPEN CUR_1;
LOOP
FETCH CUR_1 INTO :EMP.EMPNO, :EMP.ENAME, :EMP.JOB, :EMP.MGR;
EXIT WHEN CUR_1%NOTFOUND;
NEXT_RECORD;
END LOOP;
CLOSE CUR_1;
END;Hi:
You could use a CURSOR Parameter:
DECLARE
CURSOR CUR_1 (empno_in IN VARCHAR2) IS SELECT EMPNO, ENAME, JOB, MGR FROM EMP WHERE empno < empno_in;
BEGIN
OPEN CUR_1 (7600);
LOOP
FETCH CUR_1 INTO :EMP.EMPNO, :EMP.ENAME, :EMP.JOB, :EMP.MGR;
EXIT WHEN CUR_1%NOTFOUND;
END LOOP;
CLOSE CUR_1;
END;
or a REF Cursor, like so:
DECLARE
TYPE CUR_1_TYPE IS REF CURSOR;
CUR_1 CUR_1_TYPE;
BEGIN
OPEN CUR_1 FOR SELECT EMPNO, ENAME, JOB, MGR FROM EMP WHERE empno < 7600;
LOOP
FETCH CUR_1 INTO :EMP.EMPNO, :EMP.ENAME, :EMP.JOB, :EMP.MGR;
EXIT WHEN CUR_1%NOTFOUND;
END LOOP;
CLOSE CUR_1;
END;
Note - these will run in SQL*Plus ... I believe you are using Oracle Forms as you had the NEXT_RECORD command in your example, and I had to remove it. -
Formula variable used in exception and condition - gives a check error
The same formula variable is used in a condition and exception within a query. When I click on "check", I get the message "Variable <myvar> Is Used By More Than One Infoobject". The variable is a formula variable, processed by User Entry/Default Value, with optional entry, ready for input, Dimension "number", default value -0.01. However, the query still saves, generates and executes without problem.
This is with BW 7.0, SP 14. And with query designer 3.5, version 3500.7.572
I'd be grateful if a few people could try to reproduce this, letting me know their version. To reproduce it:
Create a query. Create formula variable processed by User Entry/Default Value, with optional entry, ready for input, Dimension "number", default value -0.01. Create a condition using the variable. Create an exception using the variable. Click on Check. Save and execute the query.
Thanks
MattIt is a warning and you can ignore it , if in query execution you get correct result / output...(then it implies u r on safe side)
But if you are so much concerned about warning then as a workaround just create another Formulae variable and use it in Condition and use the previous formulae variable for Exception.
This way you will have 2 variables for 2 different purposes
and you will get rid of the warning message.
So far if you get the correct output of query then there is no need to worry.
Edited by: kartikey on Dec 20, 2007 1:45 PM -
Error in using a variable in filter condition in an Interface
Hi All,
I am using a variable in my interface in a filter condition. I have an EMP table of scott schema and want to pull all the records wiht hiredate date lying between 2 dates, incremental pull.For this I have created 2 variables and using them in the filter condition. I am getting an error inthe interface when I run in a package after declaring and refresing the variables.
com.sunopsis.sql.SnpsMissingParametersException: Missing parameter
at com.sunopsis.sql.SnpsQuery.completeHostVariable(SnpsQuery.java)
at com.sunopsis.sql.SnpsQuery.updateExecStatement(SnpsQuery.java)
at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execStdOrders(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSqlI.treatTaskTrt(SnpSessTaskSqlI.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
at com.sunopsis.dwg.cmd.e.i(e.java)
at com.sunopsis.dwg.cmd.g.y(g.java)
at com.sunopsis.dwg.cmd.e.run(e.java)
at java.lang.Thread.run(Unknown Source)
Regards,
KrishnaHi Krishna,
What is the datatype of the Variable lastupdate ?
In my case
Variable
Name : LastUpdateDate
Datatype : Alphanumeric
Action : Historize
Query : select to_char(to_date(sysdate,'DD-MON-YY'),'DD-MON-YY') from sys.dual
Then in filter I used
EMP.HIREDATE>to_date('#LastUpdateDate','DD-MON-YY')
Thanks
Sutirtha -
Issue in using presentation variable as filter condition in the reports
Hi,
I have an issue in using presentation variable as filter condition in my reports the details are as follows:
Details :
We want to implement the Max and Min variables through Presentation variables only.we do not want to implement it through session variables in this case.
We have two variables MIN and MAX to be used as Presentation Variables,for a column of the report (which is a quantity),so that the user wants to see the data for this column within a particular range.i.e the Min and the Max.This part has been implemented well . The issue is when the user wants to see the full data.In that case we will not pass any values to these two Presentation Variable or in other words we are not restricting the report data so we are not passing any value to the variables,this is when the report is throwing the error. we want to leave this variables blank in that case.but this is giving error.
Please suggest how can I overcome this issue.
Thanks in Advance.
Regards,
Praveeni think you have to use guided navigation for this. create two reports first is the one you are having currently and second is the one in which remove the presentation variable from the column formula. i.e. the same report with no aggregation applied.
Now create a dummy report and make it return value only when the presentation variable value is not equal to max or min. guide the report to navigate between the first and second report based on the result of the dummy report. -
Conditional suppression using substitution variable in Hyperion financial r
Hi all,
Is there a way that I can suppress a column using substitution variable in hyperion financial reporting?
For eg, i want to suppress the column if the value of the substitution variable curr_mnth = jun.
Is there a way to do this? In conditional suprression dialog box, I dont find this option.
Please suggest.
Your response is appreciated.
Thanks,
Sirisha.Hi Sirisha
In my earlier reply I think I may have mislead you as I thought that you could set the member name equal to that in a row/column and I've managed to get into a HFR studio session this morning and realised that the conditional suppression only allows you to suppress where member name = 'XXX' (specific text) so that doesn;t meet your requirement.
Different people will have different ways of achieving what you want and everyones requirements are different. If it helps my preferred way of conditionally suppressing periodic data (for Planning/Essbase) is to add a dynamic calc account member called 'TP-Index' into the database, set up a formula so that each period returns a numeric value from 1 to 12 to match the fiscal/calendar year as required.
Then in reporting bring the account and period dimensions into rows/columns so that you are able to retrieve data for the TP-Index account and the period as defined in your substitution variable. You can then choose how the suppression works based on a numeric value, commonly you may want to suppress if greater than, e.g. you have a multi-period report where your actual data is to June so you want to suppress everything from July onwards.
I'm sure that a similar thing could be achieved in HFM as well if that is your underlying system instead of Essbase.
Does that help?
Stuart -
Creating variables in Process Flows and using thse variables in the filter
Hi,
I am new to OWB and in learing stage. Need to information.
*1. as to how pass/create/use variables to OWB mapping ?*
*2. Creating variables in Process Flows and using thse variables in the filter operator of the OWB mapping?*
*3. Other mechanisms of how to create/use variables within OWB mapping itself ?*
can you please provide the above details and guide me / help me in this regard.
Thanks,
skms.1. Add parameters to your mapping using the MAPPING INPUT PARAMETER from the pallette.
2. Add parameters to the START operator in the process flow. Bind the process flow parameter to the Mapping parameter.
3. May be appropriate to use CONSTANTS instead of parameters.
Regards
Si -
How to use System Variable SY_ROW in the Process Instruction Category
Hi ,
I want to assign a value of System variable SY_ROW to a Normal Variable in the Process Instruction Category and use it in the formula. Please help me with the Syntax in the Process Instruction Category to get the System Variable: SY_ROW value into a Variable.
Thanks,
SVHello,
You can use these variables in formulas or, for example, to pass on certain pieces of information to a function module. How the function called by the function module behaves depends on the type of information passed on.
SY_ROW is used to view the current Table line.
Please look into the below link for more details on syntax :
http://help.sap.com/saphelp_46c/helpdata/en/1a/514e38493e4774e10000009b38f889/frameset.htm
http://help.sap.com/saphelp_470/helpdata/en/1a/514e38493e4774e10000009b38f889/frameset.htm
Hope the information is helpful
Regards -
How to update the Process-Instance Variable Using Process API in OBPM 10.3?
Hi All,
I have a requirement to update the the process Instance variable from another process, but I am unable to find any method to update or set variable?
I try the same using Process API also but no luck. Please provide me the code or link to implement same.
Thanks & Regards,
AnkurHi,
I have followed the procedure which was updated above.
I ahve the sample to update the variable in the another instance of the another process. it's working fine. But I have followed the same procedure in our project it's giving the below exception at notification.send() method. Please help me to resolve this. thank you.
fuego.transaction.DatabaseException: An error occurred while accesing the database.
Detail:SQL statement: ' SELECT INSTANCEDATA, PROCESSID, INSTID, THREADID, NAME, PARENTTHREAD, PRIORITY, CREATIONTIME, AUTHOR, PARTICIPANT, NEXTPARTICIPANT, PROCESSDEADLINE, ACTIVITYDEADLINE, RECEIVETIME, ACTIVITYNAME, NTHREADS, CTHREADS, FCTHREAD, TOTALTHREADS, STATE, SOURCEACTIVITYNAME, ROLEIN, PENDINGITEMID, LASTRESULT, ITEMDEADLINE, NCHANGES , NREMARKS, NATTACHMENTS, HASPARTFORROLE,MICROACTIVITYNAME, V_REF_NO, V_TASK_ID, V_TASK_STATUS FROM PPROCINSTANCE WHERE PROCESSID = 63 AND INSTID = 1996 AND THREADID = 0 FOR UPDATE'
at fuego.server.persistence.jdbc.JdbcProcessInstancePersMgr.load(JdbcProcessInstancePersMgr.java:1640)
at fuego.server.persistence.Persistence.loadInstance(Persistence.java:827)
at fuego.server.AbstractInstanceService.readInstance(AbstractInstanceService.java:764)
at fuego.ejbengine.EJBInstanceService.getLockedROImpl(EJBInstanceService.java:218)
at fuego.server.AbstractInstanceService.getLockedROImpl(AbstractInstanceService.java:879)
at fuego.server.AbstractInstanceService.getLockedImpl(AbstractInstanceService.java:730)
at fuego.server.AbstractInstanceService.getLockedWaiting(AbstractInstanceService.java:219)
at fuego.server.AbstractInstanceService.getLockedWaiting(AbstractInstanceService.java:199)
at fuego.server.execution.AbstractReceiveNotificationExecutionHandler.getLockedTargetInstance(AbstractReceiveNotificationExecutionHandler.java:223)
at fuego.server.execution.AbstractReceiveNotificationExecutionHandler.receiveNotification(AbstractReceiveNotificationExecutionHandler.java:96)
at fuego.server.AbstractProcessBean$41.execute(AbstractProcessBean.java:2776)
at fuego.server.execution.DefaultEngineExecution$AtomicExecutionTA.runTransaction(DefaultEngineExecution.java:304)
at fuego.transaction.TransactionAction.startNestedTransaction(TransactionAction.java:527)
at fuego.transaction.TransactionAction.startTransaction(TransactionAction.java:548)
at fuego.transaction.TransactionAction.start(TransactionAction.java:212)
at fuego.server.execution.DefaultEngineExecution.executeImmediate(DefaultEngineExecution.java:123)
at fuego.server.execution.DefaultEngineExecution.executeWithoutComponentImmediate(DefaultEngineExecution.java:199)
at fuego.server.execution.EngineExecution.executeWithoutComponentImmediate(EngineExecution.java:95)
at fuego.server.AbstractProcessBean.receiveNotification(AbstractProcessBean.java:2757)
at fuego.server.iec.LocalIPCHandler.sendNotification(LocalIPCHandler.java:79)
at fuego.server.execution.microactivity.DefaultSendNotificationExecutionHandler.sendNotification(DefaultSendNotificationExecutionHandler.java:103)
at fuego.server.NotificationComponent.sendNotification(NotificationComponent.java:95)
at fuego.server.AbstractProcessBean$49.execute(AbstractProcessBean.java:3270)
at fuego.server.execution.DefaultEngineExecution$AtomicExecutionTA.runTransaction(DefaultEngineExecution.java:304)
at fuego.transaction.TransactionAction.startNestedTransaction(TransactionAction.java:527)
at fuego.transaction.TransactionAction.startTransaction(TransactionAction.java:548)
at fuego.transaction.TransactionAction.start(TransactionAction.java:212)
at fuego.server.execution.DefaultEngineExecution.executeImmediate(DefaultEngineExecution.java:123)
at fuego.server.execution.EngineExecution.executeImmediate(EngineExecution.java:66)
at fuego.server.AbstractProcessBean.sendComponentNotification(AbstractProcessBean.java:3266)
at fuego.server.AbstractProcessBean.sendComponentNotification(AbstractProcessBean.java:3252)
at fuego.components.Notification.send(Notification.java:148)
at xobject.EPCS.PAction.collateTask(PAction.xcdl:34)
at oracle.TRReview.Default_2_0.Instance.CIL_poReview(Instance.xcdl:25)
at oracle.TRReview.Default_2_0.Instance.CIL_poReview(Instance.xcdl)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at fuego.server.execution.EngineExecutionContext.invokeMethodAsCil(EngineExecutionContext.java:1082)
at fuego.server.execution.EngineExecutionContext.runCil(EngineExecutionContext.java:1277)
at fuego.server.execution.TaskExecution.invoke(TaskExecution.java:401)
at fuego.server.execution.InteractiveNormalCilExecution.invoke(InteractiveNormalCilExecution.java:425)
at fuego.server.execution.TaskExecution.executeCIL(TaskExecution.java:513)
at fuego.server.execution.TaskExecution.executeTask(TaskExecution.java:697)
at fuego.server.execution.TaskExecution.executeTask(TaskExecution.java:657)
at fuego.server.execution.TaskExecution.executeTask(TaskExecution.java:154)
at fuego.server.execution.microactivity.InteractiveMicroActivity.executeNormalCil(InteractiveMicroActivity.java:501)
at fuego.server.execution.microactivity.InteractiveMicroActivity.executeItem(InteractiveMicroActivity.java:454)
at fuego.server.execution.microactivity.InteractiveMicroActivity.execute(InteractiveMicroActivity.java:104)
at fuego.server.AbstractProcessBean$48.execute(AbstractProcessBean.java:3204)
at fuego.server.execution.DefaultEngineExecution$AtomicExecutionTA.runTransaction(DefaultEngineExecution.java:304)
at fuego.transaction.TransactionAction.startBaseTransaction(TransactionAction.java:470)
at fuego.transaction.TransactionAction.startTransaction(TransactionAction.java:551)
at fuego.transaction.TransactionAction.start(TransactionAction.java:212)
at fuego.server.execution.DefaultEngineExecution.executeImmediate(DefaultEngineExecution.java:123)
at fuego.server.execution.EngineExecution.executeImmediate(EngineExecution.java:66)
at fuego.server.AbstractProcessBean.runTask(AbstractProcessBean.java:3208)
at fuego.ejbengine.EJBProcessControlAdapter.runTask(EJBProcessControlAdapter.java:1162)
at fuego.ejbengine.EJBProcessControl_1zamnl_EOImpl.runTask(EJBProcessControl_1zamnl_EOImpl.java:4463)
at fuego.ejbengine.EJBProcessControl_1zamnl_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:589)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:477)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:473)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-02049: timeout: distributed transaction waiting for lock
at weblogic.jdbc.base.BaseExceptions.createException(Unknown Source)
at weblogic.jdbc.base.BaseExceptions.getException(Unknown Source)
at weblogic.jdbc.oracle.OracleImplStatement.execute(Unknown Source)
at weblogic.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at weblogic.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at weblogic.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
at weblogic.jdbcx.base.BasePreparedStatementWrapper.executeQuery(Unknown Source)
at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:128)
at fuego.jdbc.FaultTolerantPreparedStatement.executeQuery(FaultTolerantPreparedStatement.java:598)
at fuego.server.persistence.jdbc.JdbcProcessInstancePersMgr.load(JdbcProcessInstancePersMgr.java:1627)
... 69 more
BatchOperationException fuego.papi.exception.CannotStoreNotificationException: An instance in Process '/Division#Default-2.0' could not be notified.
Regards,
Sudhakar. -
Using a variable in Spry conditional tests included in a Spry Tooltip
I have the following code:
<div spry:region="company" id="tooltip">
<div spry:repeat="company" spry:choose="spry:choose">
<div spry:when="'{name}'==memberName">
<table>
<tr>
<td
align="center"><h2>{name}</h2></td>
</tr>
<tr>
<td align="center"><img src="{headshot}"
alt="{name}" width="227" height="350" /></td>
</tr>
<tr>
<td align="center">{description}</td>
</tr>
</table>
</div>
</div>
</div>
<script type="text/javascript">
var tooltip_trigger_one = new
Spry.Widget.Tooltip("tooltip","#trigger", {showDelay: 200,
hideDelay: 200, offsetX: 250, offsetY: 200} );
</script>
where the variable "memberName" is set elsewhere to a value
that matches one of the occurrences in the column "name" in the
dataset "company". I can see, using debugging tools, that the
variable is being set correctly. But.... when the tooltip is
triggered, only a small few-pixel square box opens up.
If, instead of using the variable "memberName" in:
<div spry:when="'{name}'==memberName">
I use a string, as in
<div spry:when="'{name}'=='John Doe'">
then the code works correctly and I get a large tootlip
showing me the correct information for that member of the company.
I have tried different tests (spry:if and spry:test for
instance), tried various combinations of quotes and parenthesis and
tried placing the code at various places both inside and outside of
the <body> -- but always get the same results.
Is it not possible to test against a variable or am I doing
something else incorrectly?
Thanks,
JanetOK.... some progress to report.
I was setting memberName onmouseover-- which is also the
trigger for the tooltip-- thusly:
<p><em onmouseover="memberName='John Doe'"
id="trigger">John Doe</em></p>
It seems that the variable is being set, but too late, as the
trigger has already caused the div... id="tooltip"> to be
evaluated with "memberName" not equal to any of the names in the
dataset. I tried using a function call to set "memberName" and
tried putting the onmouseover in the <p> tag and leaving the
trigger id in the <em> tag. but neither of those appear to
change the outcome. "memberName" still appears to be set to the
value I initialized it to up the the <head> section at the
time the tooltip <div> is evaluated. Although it is set
correctly if I check it's value using Firebug after I have
mouse-overed it.
Incidentally, using a Firebug breakpoint just before the
<div spry:when...> and checking the value of memberName was
how I discovered that "memberName" still seemed to have a value of
"initialized" which is what I set it to up in the <head>
section.
Having written all of this, I am wondering though, shouldn't
the value of "memberName" be equal to "John Doe" the second time I
mouseover it? Or, if there are more than one trigger "names" on the
page, shouldn't "memberName" be equal to the name of the previous
trigger that I moused-over? And with memberName having a legitimate
value at that point, shouldn't the tooltip now show the correct
display information rather than just that little few pixel square
box that I am getting when I mouse-over the trigger name?
Clearly there is something that I just am not understanding.
Janet -
How to use i for if condition in a for i in loop?
Hi friends,
I have a question on how to use i for IF condition in a loop, in order to get an efficient programming and results. Here is outlined SQL:
cursor is
select c1,c2,c3 from table1; -- 100 rows returned.
open cursor
loop
fetch c1,c2,c3 into v1,v2,v3;
for i in 1..3 loop
if 'v'||i between 90 and 100 then
v_grade := 'Excellent';
elsif 'v'||i between 80 and 89 then
elsif 'v'||i between 50 and 59 then
end if;
end loop;
close cursor;
This way, I don't need to use a lot of if..then for hard code v1,v2,v3,.... actually I have more v..
But Oracle gave an error of this usage of 'if 'v'||i' or 'v'||to_char(i).
Thanks for any advice in advance!user508774 wrote:
Thanks for comments and advices. But I didn't get your inputs clearly. Are you saying I don't need to use PL/SQL to achieve this?Correct. Ronel and John showed you the basic approaches. SQL is not a mere I/O language for making read and write calls. It is a very capable, flexible and powerful language. One can solve a problem with a few lines of SQL code, that will take 100's of lines of PL/SQL or Java code.
So do not underestimate what can be done in SQL.
v_cmd := 'UPDATE parts_categ_counts SET w1='||v1||', w2='||v2||...||v9||' WHERE seq='||vseq||';
EXECUTE IMMEDIATE v_cmd;This code is also wrong. Besides the fact that there is no need for dynamic SQL, this approach creates a brand new SQL statement each loop iteration.
SQL is source code. It needs to be parsed (compiled). The end result is an executable program that is called a cursor. This cursor needs to be stored in server memory (the SQL Shared Pool in the SGA).
The problem with your code is that it is slow and expensive - it generates lots of unique SQL statements that need CPU for parsing and server memory for storage.
These add up to a very significant performance overhead. That is the wrong approach. The correct approach is the same one that you would use in any other programming language.
Let's say you need to use Java to process a bunch of CSV files - exact same CSV layout used by each file. A file needs to be read, processed, and a log file created.
Will you write a Java program that loops through the files, for each file found, write a Java program for processing that file, compile it, then execute it?
Or would you write a Java program that takes the name of the file as input, and then process that file and writes the log file?
The 2nd approach provides a program that can process any of those CSV files - one simply needs to pass the filename as an input parameter.
Your code and approach use the 1st method. Not the 2nd. And that is why it is wrong.
To create a SQL program with parameters is done by using bind variables. Instead of
v_cmd := 'UPDATE parts_categ_counts SET w1='||v1||', w2='||v2||...||v9||' WHERE seq='||vseq||';
The following SQL source code should be created:
v_cmd := 'UPDATE parts_categ_counts SET w1=:v1, w2=:v2 ..., w9=:v9 WHERE seq= :vseq';
The tokens with the colon prefix (such as :v1), are bind variables. Think of these as the parameters to the SQL cursor.
The server parses this SQL into a cursor. You can now execute the same cursor over and over again, using different bind variables. (just like the 2nd approach above that one would use in Java)
In PL/SQL, this is made even easier as you can code native SQL code with PL/SQL code and use PL/SQL variables in it. The PL/SQL compiler is clever enough to do the SQL parsing, variable binding, and cursor execution for you. So in PL/SQL, you would use:
UPDATE parts_categ_counts SET w1=v1, w2=v2 ..., w9=v9 WHERE seq= vseq;
Where v1 and the others are PL/SQL variables.
That all said - PL/SQL is only used for data crunching, when the processing of data is too complex for the SQL language to deal with. And this is very seldom the case.
The main reason for using PL/SQL it to provide processing flow control, conditional processing and error handling, for SQL code. As the SQL language does not have these features.
Maybe you are looking for
-
Mac keeps freezing after Mavericks 1.9.2 clean install
hey there guys, I formated all my Macbook Pros 15'' late 2011 HD and reinstalled Mavericks 10.9.2 from a Recovery HD (twice) and after some time it starts to freeze - dock freezes, icons are not bouncing, when I try to close program it freezes etc. R
-
Firewire pci card in B&W Expansion slot #1?
I am using my Blue & White G3 as a server, including a role as backup server to an external firewire hard drive which is connected to a firewire PCI card in expansion slot 3. The first expansion slot on the B&W runs at 66mhz, the other three at 33mhz
-
Hi Friends, Please let me know about the features which we are using while configuration of benefits module. what features should we maintain in the Benifits module and what would be the possible return values? hope for early reply. thanks in advance
-
Production Order Confrimation Report
In our material routing there are 2 operations (0010 & 0020). Operation 0010 needs to be confirmed before the order can move on to operation 0020. This results in many orders that have operation 0010 completed, but not operation 0020. Is there some
-
TDM file with multirate interleaved data?
I am developing a datalogging application that samples several channels at different rates and I need a way to graph the data quickly. After figuring out that reading my own custom file format byte-by-byte takes a long time in LabVIEW, I started loo