User Defined Functions (UDF) - wie funktioniert das?

Wolf-Tilmann

Aktiver Benutzer
Beiträge
35
Einen schönen guten Morgen,

momentan quäle ich mich, neben der Schwüle, mit UserDefinedFunctions herum.

Soweit ich gelesen habe, kann man in SQLite eigene Funktionen erstellen. Formuliert in PHP.

Als Datenbank-GUI verwende ich SQLite Manger in Firefox. Dort sind drei Funktionen vorformuliert.
Z.B.:
Code:
// name = addAll
// argLength = -1
// enabled = 1
function addAll(aValues) {
var sum = 0;
for (var j = 0; j < aValues.numEntries; j++) {
sum += aValues.getInt32(j);
}
return sum;
}

Jetzt habe ich versucht eigene UDF zu definieren.
Hier einmal die einfachste:
Code:
function sinus(aValues) {
var sinus = 0;
for (var j = 0 ; j > aValues.numEntries; j++) {
sinus = sin(aValuesgetInt32(j));
}
return sinus;
}

Oder
Code:
function zehnplus(aValues) {
var zahl = 0;
for ( j = 0 ; j < aValues.numEntries; j++) {
zahl = aValues;
zahl = zahl + 10;
}
return zahl;
}

Kann mir jemand etwas - leicht verständliches - nennen, wo ich mich da einarbeiten kann?

Vielen Dank
Wolf-Tilmann
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Einen schönen guten Morgen,

momentan quäle ich mich, neben der Schwüle, mit UserDefinedFunctions herum.

Soweit ich gelesen habe, kann man in SQLite eigene Funktionen erstellen. Formuliert in PHP.

Als Datenbank-GUI verwende ich SQLite Manger in Firefox. Dort sind drei Funktionen vorformuliert.
Z.B.:
Code:
// name = addAll
// argLength = -1
// enabled = 1
function addAll(aValues) {
var sum = 0;
for (var j = 0; j < aValues.numEntries; j++) {
sum += aValues.getInt32(j);
}
return sum;
}

Jetzt habe ich versucht eigene UDF zu definieren.
Hier einmal die einfachste:
Code:
function sinus(aValues) {
var sinus = 0;
for (var j = 0 ; j > aValues.numEntries; j++) {
sinus = sin(aValuesgetInt32(j));
}
return sinus;
}

Oder
Code:
function zehnplus(aValues) {
var zahl = 0;
for ( j = 0 ; j < aValues.numEntries; j++) {
zahl = aValues;
zahl = zahl + 10;
}
return zahl;
}

Kann mir jemand etwas - leicht verständliches - nennen, wo ich mich da einarbeiten kann?

Vielen Dank
Wolf-Tilmann


Was passiert denn bei Deinen 2 Versuchen? beim ersten könnt ich mir vorstellen, daß es nicht funktioniert, weil bei sin(aValuesgetInt(j)) wohl ein Punkt fehlt.
Beim 2. Versuch könnte ich mir vorstellen, daß es nicht geht, falls wie in den anderen Beispielen da mehr als ein Wert übergeben wird, also aValues kein einzelner Wert ist sondern eine Liste oder Array oder sowas. Die gezeigte Beispiel-Funktion von Dir macht eine Aggregation "Summiere alle Zahlen zusammen", Du versuchst offenbar zu sagen "Berechne von allen Zahlen jeweil den Sinus" oder "Addiere zu allen Zahlen 10 dazu". Da bekommst bzw. erwartest Du dann, daß so viele Zahlen aus der Funktion wieder rausfallen wie Du reinwirfst. Das ist bei der Aggregationsfunktion nicht der Fall.

Aber ich kenne mich mit SQLlite nicht aus, sorry. Vielleicht hilft Dir http://php.net/manual/de/function.sqlite-create-function.php weiter.
Nach kurzer googelei glaube ich aber, SQLlite führt diese Funktionen nicht in dessem Kontext aus, sondern das scheint mir eher eine Frage der Client-Applikation zu sein: SQLLite liefert die Werte an den Client, dieser verarbeitet das dann. Insofern sind das für mich keine 'Stored Procedures' wie man das z.B. in PostgreSQL oder anderen DB-Systemen kennt.
 

Wolf-Tilmann

Aktiver Benutzer
Beiträge
35
Also bei beiden Versuchen geht nichts.
Dann habe ich einmal etwas ausprobiert. Auf meinem Webserver habe ich SQLiteManger instelliert und dort eine Funktion gebastelt:
Code:
Name : zahlde
Type : Funktion
Funktion : <?php
function zahlde($zahl) {
return(number_format($zahl,2,',','.'));
}
?>
Anzahl Argumente : 1

Das funktioniert mit SQLitemanager genau, so wie es soll.

Als Standardanwendung verwende ich jedoch die Firefox-Erweiterung SQLite Manager. Dort gibt es auch UDF.
Dort mit Copy und Paste kopiert. Lediglich $zahl durch aValues ersetzt:
Fehlermeldung: unbekannte Funktion.

Es muss sich also um einen "Bug" im SQLite Manger handeln.

Einen schönen Abend
Wolf-Tilmann
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Also bei beiden Versuchen geht nichts.
Dann habe ich einmal etwas ausprobiert. Auf meinem Webserver habe ich SQLiteManger instelliert und dort eine Funktion gebastelt:
Code:
Name : zahlde
Type : Funktion
Funktion : <?php
function zahlde($zahl) {
return(number_format($zahl,2,',','.'));
}
?>
Anzahl Argumente : 1

Das funktioniert mit SQLitemanager genau, so wie es soll.

Als Standardanwendung verwende ich jedoch die Firefox-Erweiterung SQLite Manager. Dort gibt es auch UDF.
Dort mit Copy und Paste kopiert. Lediglich $zahl durch aValues ersetzt:
Fehlermeldung: unbekannte Funktion.

Es muss sich also um einen "Bug" im SQLite Manger handeln.

Einen schönen Abend
Wolf-Tilmann

Vermutlich nicht. $Variable ist was anderes als Variable. In Deiner oben gezeigten Funktion zahlde() sehe ich auch jetzt nicht wirklich einen Bezug zu einer Datenbank. Du übergibst lediglich eine Zahl und bekommst diese wieder zurück, nur formatiert. Eine 'Stored Procedure' im Kontext einer Datenbank ist für mich etwas, was im Kontext der Datenbank etwas mit den in der Datenbank gespeicherten Daten macht, ohne dabei mit einer Client-Applikation zu interagieren.
 
Werbung:

Wolf-Tilmann

Aktiver Benutzer
Beiträge
35
Vermutlich nicht. $Variable ist was anderes als Variable.

Ist mir klar, SQLite Manger lässt als übergebbare Variable ausschließlich "aValues" zu. OHNE "$"!
Ich denke einmal es dürfte u.a. daran liegen, dass die Funktion in der WebGUI funktioniert, im BrowserAdd nicht.
Wie geschrieben, die Funktion addAll ist als Beispiel einer UDF in SQLite Manger hinterlegt.
funktioniert:
SQLitemanager_UDF.PNG
funktioniert Original in SQLite Manager:
SQLitemanager_UDF_.PNG
funktioniert nicht:
SQLitemanager_UDF_nein.PNG

Gruß
Wolf-Tilmann
 
Oben