Overflow and Numeric Arguments in C/C++ UDFs | SQL External Routine Programming | Vantage - Overflow and Numeric Arguments in C/C++ UDFs - Analytics Database - Teradata Vantage

SQL External Routine Programming

Deployment
VantageCloud
VantageCore
Edition
Enterprise
IntelliFlex
VMware
Product
Analytics Database
Teradata Vantage
Release Number
17.20
Published
June 2022
Language
English (United States)
Last Update
2023-07-11
dita:mapPath
iiv1628111441820.ditamap
dita:ditavalPath
qkf1628213546010.ditaval
dita:id
B035-1147
lifecycle
latest
Product Category
Teradata Vantageā„¢

To avoid numeric overflow conditions, the C or C++ function should define a decimal data type as big as it can handle.

If the assignment of the value of an input or output numeric argument would result in a loss of significant digits, a numeric overflow error is reported.

For example, consider a scalar function that takes a DECIMAL(2,0) argument:

CREATE FUNCTION UDF_SMLDEC( p1 DECIMAL(2,0) )
RETURNS DECIMAL(2,0)
LANGUAGE C
NO SQL
PARAMETER STYLE TD_GENERAL
EXTERNAL;

Passing a number with a maximum of two digits is successful:

SELECT UDF_SMLDEC(99);

An attempt to pass a number larger than 99 or smaller than -99 would result in a loss of significant digits.

SELECT UDF_SMLDEC(100);

Result:

Failure 2616 Numeric overflow occurred during computation.

Any fractional numeric data that is passed or returned that does not fit as it is being assigned is rounded according to the Teradata rounding rules. For details, see Teradata Vantageā„¢ - Data Types and Literals, B035-1143.