Create FUNCTION FUNCTION_NAT
(
@.F_BRANCH_CODE CHAR,
@.F_COUNTRY CHAR,
@.F_CLIENT_VALUE CHAR
)
RETURNS TABLE
AS
RETURN
(
SELECT NLGIC_VALUE AS VALUE
FROM RAGHU.NAT
WHERE BRANCH_CODE = @.F_BRANCH_CODE
AND
COUNTRY = @.F_COUNTRY
AND
CLIENT_VALUE = @.F_CLIENT_VALUE
)
This is my function . when i run it as follows
select * from FUNCTION_NAT('450','British','BRI')
i did not get any value it is empty .
But when i run this query
SELECT NLGIC_VALUE AS VALUE
FROM RAGHU.NAT
WHERE BRANCH_CODE = '450'
AND
COUNTRY = 'British'
AND
CLIENT_VALUE = 'BRI'
it works fine . What is the problem in my function .
My knee-jerk reaction is that this might be a problem with the type definitions of the function parameters; hold on and I will try to verify. Look at this:
Code Snippet
alter FUNCTION FUNCTION_NAT
(
@.F_BRANCH_CODE CHAR,
@.F_COUNTRY CHAR,
@.F_CLIENT_VALUE CHAR
)
RETURNS TABLE
AS
RETURN
( select @.f_branch_code as branch_code,
@.f_country as country,
@.f_client_value as client_value
)
go
select * from function_nat('450','British','BRI')
/*
branch_code country client_value
-- -
4 B B
*/
You need to alter your type definitions from this
Code Snippet
(@.F_BRANCH_CODE CHAR,
@.F_COUNTRY CHAR,
@.F_CLIENT_VALUE CHAR
)
to something like this:
Code Snippet
(
@.F_BRANCH_CODE CHAR(xx),
@.F_COUNTRY CHAR(yy),
@.F_CLIENT_VALUE CHAR(zz)
)
where xx, yy, and zz are the maximum number of characters that will be passed through each argument.
|||Kent - i think you've hit the nail on the head.
From BOL: When n is not specified in a data definition or variable declaration statement, the default length is 1
SQL will not throw an error but merely cut the string off at the length. From the look of at least one of your variables, you may be better off with the VARCHAR datatype.
HTH!
No comments:
Post a Comment