How to call function over data being passed in ibatis - ibatis

I need to call a internal function say 'calculateValue(value)' which returns some string based on the value passed.
<select id="calculateValue" resultClass="java.lang.String" parameterClass="java.lang.String">
SELECT calculateValue(#value#) FROM SYSIBM.SYSDUMMY1
</select>
the above query returns the below error.
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in mymapsql.xml.
--- The error occurred while executing query.
--- Check the SELECT calculateValue(?) FROM SYSIBM.SYSDUMMY1 .
--- Check the SQL Statement (preparation failed).
--- Cause: java.sql.SQLException: [SQL0418] Use of parameter marker not valid.
how to call the function calculateValue() on the value being passed as parameter?

use procedure tag <procedure> for calling stored procedure.
<procedure id="procId" resultClass="ResultClass"
parameterMap="getMap">
{ call getResult( #param# ) }
</procedure>

Related

Can worksheet filters only be used in WHERE or GROUP BY Clause in Snow?flake

I would like to use the value selected in a filter as a returned column.
For instance like
SELECT :MyFilter;
but I get the following error:
No valid expression found for :Subscription. Expecting "<expression> = :MyFilter" (line 1)
You may need to declare a local variable, assign it the value from :MyFilter, and then use in your query. See the following reference: https://docs.snowflake.com/en/developer-guide/snowflake-scripting/variables.html#working-with-variables

Error ID 50,000 being returned within error process

I notice when this error is triggered within the stored procedure it returns 50,000. Is there a way to modify this to say 50,999 so the front-end app can specifically pick the error up and not confuse it with anything else.
RAISERROR('Client already has an Active Visit!',16,1)
As per the documentation of RAISERROR (Transact-SQL):
The message is returned as a server error message to the calling
application or to an associated CATCH block of a TRY…CATCH construct.
New applications should use THROW instead.
Emphasis mine. (THROW (Transact-SQL))
I don't know what your SQL statement looks like, but, instead you can therefore do something like:
BEGIN TRY
--Your INSERT statement
SELECT 0/0; --Causes an error
END TRY
BEGIN CATCH
THROW 50099, 'Client already has an Active Visit!',1;
END CATCH
With RAISEERROR, if you use message as the first parameter then you can't specify an error ID and it is implicitly 50000. However, you can create a custom message with parameters and pass your code there. ie:
RAISERROR('Client already has an Active Visit! - Specific Err.Number:[%d]',16,1, 50999)
Also Try\Catch is the suggested method for new applications.
You need to specify the first parameter of the raiseerror function, like so:
--configure the error message
sp_addmessage #msgnum = 50999,
#severity = 16,
#msgtext = N'Client %s already has an Active Visit!';
GO
-- throw error
RAISERROR (50999, -- Message id.
16, -- Severity,
1, -- State,
N'123456789'); -- First argument supplies the string.
GO
Output will be
Msg 50999, Level 16, State 1, Line 8
Client 123456789 already has an Active Visit!
If you don't specify the error number, the raiserror will be assumed to be 50000. Documentation here...

Error while executing 'A_MC_result'

I am getting the following error when running a script
Error while executing 'A_MC_result'. Multiple values exist for variable "A_MM_email_list", however the SQL script has been written to expect only one value for this variable. To accept multiple values for variables only "=" and "<>" can be used for comparison operators. The query used the following operator "".
here is my script :
SELECT sort_name,
id,
pidm,
goremal_email_address,
goremal_status_ind,
goremal_preferred_ind,
goremal_emal_code
FROM donor,goremal
WHERE donor.pidm = goremal_pidm
AND upper(goremal_email_address) = upper('%'||:A_MM_email_list||'%')
AND :A_BT_submit is not null
I am attempting to enter multiple email addresses and return certain data.
I tried an 'IN' clause but that did not work either.
Thoughts?

Ibatis parameter exception

javax.servlet.ServletException: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in config/register.xml.
--- The error occurred while applying a parameter map.
--- Check the register.insertDetails-InlineParameterMap.
--- Check the parameter mapping for the 'LName' property.
--- Cause: java.lang.ArrayIndexOutOfBoundsException: 1; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in config/register.xml.
--- The error occurred while applying a parameter map.
--- Check the register.insertDetails-InlineParameterMap.
--- Check the parameter mapping for the 'LName' property.
--- Cause: java.lang.ArrayIndexOutOfBoundsException: 1
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
When calling register.insertDetails-InlineParameterMap from register.xml a attribute from your object gets mapped into the insert sql, but the attribute of your data object is null.
so you get this error when one of your attributes, which you are using in your insert statement is null.

Syntax Error in showing Error Description

What is the correct Syntax to be applied for "#[System::ErrorDescription]" inside the query like "INSERT" ? I am unable to retrieve the correct Error Description inside the table, as the result in the table is showing as "#[System::ErrorDescription]". I am not getting the result !
Use a command like:
INSERT YourTable (errordesc) SELECT ?
And then put a parameter called 1 in, populated with #[System::ErrorDescription]

Resources