Connectivity

turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

03-11-2006
05:59 AM

03-11-2006
05:59 AM

Can someone give me an example for a very simple UDF. I just want to have the C-code and the definition of the function.

Name: UDF_Multiplyby2()

Input: Decimal(15,2)

Output: Decimal(15,2)

To do: Multiply Input by 2, that's all.

Teradata gives me always a stack error.

I'm using DECIMAL8 as in- and output.

Thank's a lot,

Koen.

Name: UDF_Multiplyby2()

Input: Decimal(15,2)

Output: Decimal(15,2)

To do: Multiply Input by 2, that's all.

Teradata gives me always a stack error.

I'm using DECIMAL8 as in- and output.

Thank's a lot,

Koen.

2 REPLIES

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

03-16-2006
06:59 PM

03-16-2006
06:59 PM

you have to increase the output lenght. leave the input as is decimal (15,2)

so the largest number you can provide is

9999999999999.99

set the output: Decimal(18,2) {I guess 18 is the max that is allowed}

and when you do the multiplication use the cast function

output = cast(input * 2 as decimal(18,2))

this should work.

please let me know if it does not work.

so the largest number you can provide is

9999999999999.99

set the output: Decimal(18,2) {I guess 18 is the max that is allowed}

and when you do the multiplication use the cast function

output = cast(input * 2 as decimal(18,2))

this should work.

please let me know if it does not work.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

03-17-2006
12:12 AM

03-17-2006
12:12 AM

Note that though the logic inside the function body may be "simple", you can't code the prototype as a "simple C function". In other words,

DECIMAL8 *udf_m_2(DECIMAL8 *in_val){...}

will not work.

If you register the function as

CREATE FUNCTION UDF_Multiplyby2(InVal DECIMAL(15,2)) RETURNS DECIMAL(15,2)

... PARAMETER STYLE TD_GENERAL ... EXTERNAL NAME ... !udf_m_2'

Then the function prototype would be something like

void *udf_m_2(DECIMAL8 *in_val, DECIMAL8 *result, char sqlstate[6])

or for PARAMETER STYLE SQL

void *udf_m_2(DECIMAL8 *in_val, DECIMAL8 *result,

int *in_val_NULL_indicator, int *result_NULL_indicator, char sqlstate[6],

SQL_TEXT extname[129],

SQL_TEXT specific_name[129],

SQL_TEXT error_message[257])

Then note that DECIMAL8 is a struct with a 32-bit unsigned and 32-bit signed integer. You may want to convert that to a native 64-bit integer type.

DECIMAL8 *udf_m_2(DECIMAL8 *in_val){...}

will not work.

If you register the function as

CREATE FUNCTION UDF_Multiplyby2(InVal DECIMAL(15,2)) RETURNS DECIMAL(15,2)

... PARAMETER STYLE TD_GENERAL ... EXTERNAL NAME ... !udf_m_2'

Then the function prototype would be something like

void *udf_m_2(DECIMAL8 *in_val, DECIMAL8 *result, char sqlstate[6])

or for PARAMETER STYLE SQL

void *udf_m_2(DECIMAL8 *in_val, DECIMAL8 *result,

int *in_val_NULL_indicator, int *result_NULL_indicator, char sqlstate[6],

SQL_TEXT extname[129],

SQL_TEXT specific_name[129],

SQL_TEXT error_message[257])

Then note that DECIMAL8 is a struct with a 32-bit unsigned and 32-bit signed integer. You may want to convert that to a native 64-bit integer type.

Copyright © 2004-2015 Teradata Corporation. Your use of this Teradata website is governed by the Privacy Policy and the Terms of Use, including your rights to materials on this website, the rights you grant to your submissions to this website, and your responsibilities regarding your conduct on this website.

The Privacy Policy and Terms of Use for this Teradata website changed effective September 8, 2016.