ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Query on esql

Post new topic  Reply to topic
 Query on esql « View previous topic :: View next topic » 
Author Message
Prashanth007
PostPosted: Sun Oct 18, 2015 1:37 am    Post subject: Query on esql Reply with quote

Newbie

Joined: 13 Oct 2015
Posts: 6

Hi all,

I have a query regarding an esql. i wrote this code in my compute node:
CREATE COMPUTE MODULE Task_flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN

BEGIN
CALL CopyMessageHeaders();
CALL CopyEntireMessage();

RETURN TRUE;


END;
--
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;

CREATE PROCEDURE CopyEntireMessage() BEGIN

if condition then
if condition then
Statements;
else
return false;
end if;
elseif condition then
statements;
end if;


END;
END MODULE;


this is my code,when deploying my flow with this code
it is not deploying due to syntax error at return false.So i came to know that
return false will not work under procedure.my requirement is the message has to
discard/stop with in the compute node in procedure itself.
CAn you please help me in this query?

thank you.
Back to top
View user's profile Send private message
nelson
PostPosted: Sun Oct 18, 2015 7:19 am    Post subject: Reply with quote

Partisan

Joined: 02 Oct 2012
Posts: 313

Use the RETURN statement within the main() function.

https://www-01.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ak05130_.htm
Back to top
View user's profile Send private message
smdavies99
PostPosted: Sun Oct 18, 2015 8:23 am    Post subject: Re: Query on esql Reply with quote

Jedi Council

Joined: 10 Feb 2003
Posts: 6076
Location: Somewhere over the Rainbow this side of Never-never land.

Prashanth007 wrote:

Code:

                CREATE PROCEDURE CopyEntireMessage() BEGIN
 
if condition then
if condition then
   Statements;
else
   return false;
end if;
elseif condition then
    statements;
end if;
 
 
                END;
END MODULE;



You can't use the RETURN statement in an ESQL PROCEDURE.
It is only valid in a FUNCTION
_________________
WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995

Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
Back to top
View user's profile Send private message
mgk
PostPosted: Sun Oct 18, 2015 10:56 am    Post subject: Reply with quote

Padawan

Joined: 31 Jul 2003
Posts: 1642

Quote:
You can't use the RETURN statement in an ESQL PROCEDURE. It is only valid in a FUNCTION


Almost . PROCEDUREs can have a RETURNS clause as can FUNCTIONs and the RETURN statement must match the signature of the routine in which it is used. From the docs:

Quote:
"When used in a function or a procedure, the RETURN statement stops processing of that function and returns control to the calling expression. The expression, which must be present if the function or procedure has been declared with a RETURNS clause, is evaluated and acts as the return value of the function. The data type of the returned value must be the same as that in the function's declaration"


http://www-01.ibm.com/support/knowledgecenter/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ak05130_.htm?lang=en.

So in this case, using RETURN is fine, but it should not have an expression to RETURN, so remove the "false".

Kind regards,
_________________
MGK
The postings I make on this site are my own and don't necessarily represent IBM's positions, strategies or opinions.
Back to top
View user's profile Send private message
Prashanth007
PostPosted: Sun Oct 18, 2015 7:39 pm    Post subject: query Reply with quote

Newbie

Joined: 13 Oct 2015
Posts: 6

thanks all,

I have already executed this code in main() function but I want to execute the same code in procedure. But I don't know how to discard/stop my message with in procedure(like return false; in main()). So can you please suggest me how?



Thanks in advance.
Back to top
View user's profile Send private message
nelson
PostPosted: Sun Oct 18, 2015 8:54 pm    Post subject: Re: query Reply with quote

Partisan

Joined: 02 Oct 2012
Posts: 313

Prashanth007 wrote:
thanks all,

I have already executed this code in main() function but I want to execute the same code in procedure. But I don't know how to discard/stop my message with in procedure(like return false; in main()). So can you please suggest me how?



Thanks in advance.


mgk wrote:
So in this case, using RETURN is fine, but it should not have an expression to RETURN, so remove the "false".
Back to top
View user's profile Send private message
Prashanth007
PostPosted: Sun Oct 18, 2015 9:18 pm    Post subject: Reply with quote

Newbie

Joined: 13 Oct 2015
Posts: 6

Thank you,
Return is working when removal of false in my statement.but the count of output queue is increasing.my requirement is I have to terminate the message in compute node itself in else condition.And the message should not go to output queue.


thanks in advance
Back to top
View user's profile Send private message
smdavies99
PostPosted: Sun Oct 18, 2015 9:36 pm    Post subject: Reply with quote

Jedi Council

Joined: 10 Feb 2003
Posts: 6076
Location: Somewhere over the Rainbow this side of Never-never land.

Change your procedure to a FUNCTION (returns BOOLEAN) and do a

RETURN TRUE

or

RETURN FALSE

at every exit point.
Then call is using something like

Code:

 
  return MY_FUNCTION();

This calls your function and then exits the calling ESQL code with the value used in the return statement on the Function.

Problem solved!
_________________
WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995

Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
Back to top
View user's profile Send private message
stoney
PostPosted: Sun Oct 18, 2015 9:37 pm    Post subject: Reply with quote

Centurion

Joined: 03 Apr 2013
Posts: 140

Change the procedure into a function that returns a boolean value indicating whether or not the message should be propagated, and then use that return value in the main() function?
Back to top
View user's profile Send private message
Prashanth007
PostPosted: Sun Oct 18, 2015 10:05 pm    Post subject: Reply with quote

Newbie

Joined: 13 Oct 2015
Posts: 6

Thank you all,
But my requirement is I should do this in procedure itself.
I have to terminate the message in procedure.
And one more question that is Ho will i convert procedure into function?


Last edited by Prashanth007 on Sun Oct 18, 2015 10:41 pm; edited 1 time in total
Back to top
View user's profile Send private message
smdavies99
PostPosted: Sun Oct 18, 2015 10:41 pm    Post subject: Reply with quote

Jedi Council

Joined: 10 Feb 2003
Posts: 6076
Location: Somewhere over the Rainbow this side of Never-never land.

Prashanth007 wrote:
Thank you all,
But my requirement is I should do this in procedure itself.
I have to terminate the message in procedure.


Why?
Why would a requirement be written as to force you into things that are not best practice (or even possible). The only way I know to terminate the message process int a procedure or function is to use a THROW statement but that will cause other things to happen that might bery well not meet your requirement.

You really need to go back to whoever wrote the requirement and tell them that what they want is not possible and that they must let you terminate processing in a way that is considered best practice with this product. And is also much more maintainable ....


Sometimes I get the impression that a lot of requirements are written by so called experts who have little of no experience with this product.
Please read this thread
www.mqseries.net/phpBB2/viewtopic.php?t=63535
_________________
WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995

Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
Back to top
View user's profile Send private message
mqjeff
PostPosted: Mon Oct 19, 2015 1:44 pm    Post subject: Reply with quote

Grand Master

Joined: 25 Jun 2008
Posts: 17447

So what you want to do is, at some point in your code (inside a procedure or any other random location) cause a message to be sent out of a terminal.

And in the main function, you want to make sure it doesn't send out a message to any terminal.

This is eminently doable, if you use the correct ESQL statements to do both of those tasks.

Also, you should reexamine how you are starting your main routine, and what effect that is having on the output message.
_________________
chmod -R ugo-wx /
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Query on esql
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.