Ich versuche, eine UDF für IRR in Teradata zu erstellen.IRR (interne Rendite) UDF in TeraData
ich speichern möchten alle Elemente der Reihe in meinem Zwischenspeicher in Form von Array (einer nach dem anderen anhängt) .Diese mir helfen, die Elemente mehrere Male (geht mit Versuch und Irrtum Logik) zu verwenden
Ich möchte nur wissen, welcher kompatible Datentyp in "typedef" für diese Anforderung in Teradata verwendet wird?
Als IRR-Logik ist etwas, was lang ist, mein Problem hier mit Hilfe einer neuen sum_redefined-Funktion darstellt.
Ich versuche nur die Summe der übergebenen Argumente (Zeilenelemente) zu berechnen, indem ich sie in einem Array ablege und sie danach anfüge.
Hier ist mein Code:
Hinweis: Die unten offensichtlich gewohnt ist zu kompilieren, weil ich bin immer noch versuchen, den richtigen Datentyp in Teradata für C-Arrays zu verstehen.
#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>
#include <math.h>
typedef struct agr_storage {
int count;
ARRAY_HANDLE elements[100];
} AGR_Storage;
void SUM_REDEFINED(FNC_Phase phase,
FNC_Context_t *fctx,
FLOAT *x, //here im passing row element one by one
FLOAT *result,
int *x_i,
int *result_i,
char sqlstate[6],
SQL_TEXT fncname[129],
SQL_TEXT sfncname[129],
SQL_TEXT error_message[257])
{
AGR_Storage *s1 = fctx->interim1;
switch (phase)
{
case AGR_INIT:
s1 = FNC_DefMem(sizeof(AGR_Storage));
if (s1 == NULL)
{
strcpy(sqlstate, "U0001");
return;
}
s1->count = 0;
s1->elements[100]={0};
case AGR_DETAIL:
if (*x_i != -1)
{
s1->count++;
s1->elemnts[s1->count]=*x;//appending elemts one by one
break;
case AGR_COMBINE:
case AGR_FINAL:
{
int no_of_elements=s1->count;
int i=0;
FLOAT sum=0;
for(i=0;i<no_of_elements;i++){
sum+=s1->elements[i]; //adding all the elements
}
*result = sum; //returning the sum
break;
}
case AGR_NODATA:
*result_i = -1;
break;
default:
/* If it gets here there must be an error because this */
/* function does not accept any other phase options */
strcpy(sqlstate, "U0005");
}
return;
}
Haben Sie einen Beispielcode für das, was Sie bisher versucht haben? –
@RobPaller Ich aktualisierte Frage mit meinem Problem .. Bitte lassen Sie mich wissen, wenn Sie weitere Details benötigen –