Rechercher dans le manuel MySQL
29.4.2.1 UDF Calling Sequences for Simple Functions
This section describes the different functions that you need to define when you create a simple UDF. Section 29.4.2, “Adding a New User-Defined Function”, describes the order in which MySQL calls these functions.
The main xxx()
function should be declared
as shown in this section. Note that the return type and
parameters differ, depending on whether you declare the SQL
function XXX()
to return
STRING
,
INTEGER
, or
REAL
in the
CREATE FUNCTION
statement:
For STRING
functions:
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
char *result, unsigned long *length,
char *is_null, char *error);
For INTEGER
functions:
long long xxx(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
For REAL
functions:
double xxx(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
DECIMAL
functions return string
values and should be declared the same way as
STRING
functions. ROW
functions are not implemented.
The initialization and deinitialization functions are declared like this:
bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void xxx_deinit(UDF_INIT *initid);
The initid
parameter is passed to all three
functions. It points to a UDF_INIT
structure that is used to communicate information between
functions. The UDF_INIT
structure members
follow. The initialization function should fill in any members
that it wishes to change. (To use the default for a member,
leave it unchanged.)
bool maybe_null
xxx_init()
should setmaybe_null
to1
ifxxx()
can returnNULL
. The default value is1
if any of the arguments are declaredmaybe_null
.unsigned int decimals
The number of decimal digits to the right of the decimal point. The default value is the maximum number of decimal digits in the arguments passed to the main function. For example, if the function is passed
1.34
,1.345
, and1.3
, the default would be 3, because1.345
has 3 decimal digits.For arguments that have no fixed number of decimals, the
decimals
value is set to 31, which is 1 more than the maximum number of decimals permitted for theDECIMAL
,FLOAT
, andDOUBLE
data types. This value is available as the constantNOT_FIXED_DEC
in themysql_com.h
header file.A
decimals
value of 31 is used for arguments in cases such as aFLOAT
orDOUBLE
column declared without an explicit number of decimals (for example,FLOAT
rather thanFLOAT(10,3)
) and for floating-point constants such as1345E-3
. It is also used for string and other nonnumber arguments that might be converted within the function to numeric form.The value to which the
decimals
member is initialized is only a default. It can be changed within the function to reflect the actual calculation performed. The default is determined such that the largest number of decimals of the arguments is used. If the number of decimals isNOT_FIXED_DEC
for even one of the arguments, that is the value used fordecimals
.unsigned int max_length
The maximum length of the result. The default
max_length
value differs depending on the result type of the function. For string functions, the default is the length of the longest argument. For integer functions, the default is 21 digits. For real functions, the default is 13 plus the number of decimal digits indicated byinitid->decimals
. (For numeric functions, the length includes any sign or decimal point characters.)If you want to return a blob value, you can set
max_length
to 65KB or 16MB. This memory is not allocated, but the value is used to decide which data type to use if there is a need to temporarily store the data.char *ptr
A pointer that the function can use for its own purposes. For example, functions can use
initid->ptr
to communicate allocated memory among themselves.xxx_init()
should allocate the memory and assign it to this pointer:initid->ptr = allocated_memory;
In
xxx()
andxxx_deinit()
, refer toinitid->ptr
to use or deallocate the memory.bool const_item
xxx_init()
should setconst_item
to1
ifxxx()
always returns the same value and to0
otherwise.
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 26/06/2006, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/mysql-rf-udf-calling.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.