Hallo zusammen,
nachdem es längere Zeit still auf mobux.de war gibt es nun
wieder regelmässig Neuigkeiten um den Sybase ASE, Perl und Linux
Los geht es mit einem der neuen Features der aktuelleren Sybase ASE Generation, den User Defined Functions oder kurz UDFs.
In der Version 15.0.2 wurden neben die sogenannten Scalar UDFs eingeführt.
Merkmale dieser UDF sind.
- Es wird ein einziger Wert zurück gegeben
- Innerhalb der Funktion können 1-n T-SQL Anweisungen stehen
- können in alle TSQL eingebettet werde wo Expressions erlaubt sind.
Folgende TSQL Bestandteile dürfen in UDFs verwendet werden
- Variablen- und Cursordeklaration
- Variablenzuweisung via SELECT oder SET
- CURSOR Anweisungen (open, close, deallocate)
- Flusssteuerungsanweisungen (if else ...)
- EXEC Extended Stored Procedures
Nicht erlaubt sind dagegen
- INSERT, DELETE oder UPDATE statements die auf Objekte ausserhalb der UDF zugreifen
- Statements, die der Transaktionssteuerung dienen (begin, commit, abort).
- Anweisungen, die Daten direkt an den User zurücksenden
SQL UDFs können bis zu 2048 Parameter haben.
Der Aufruf muss inkl. des Besitzernamens erfolgen ala
dbo.sqlfunc()
Anbei zwei kleine Beispiele mit denen man ein Datum in die entsprechende Integer
Repräsentation bzw. aus einem Integer das zugehörige Datum erzeugen kann.
Dat2int - Datum in Int umwandeln
CREATE FUNCTION dat2int(@date datetime) RETURNS int AS BEGIN DECLARE @unixintstartdate int DECLARE @unixstartdate datetime DECLARE @intdate int SELECT @unixintstartdate = 719528, @unixstartdate = '01/01/1970' SELECT @intdate = datediff(day, @unixstartdate, @date) + @unixintstartdate RETURN @intdate END
Int2dat - Int zu Datum
CREATE FUNCTION int2dat(@intdate int) RETURNS datetime AS BEGIN DECLARE @unixintstartdate int DECLARE @unixstartdate datetime DECLARE @datetime_date datetime SELECT @unixintstartdate = 719528 SELECT @unixstartdate = '01/01/1970' SELECT @datetime_date = dateadd (day, @intdate-@unixintstartdate,@unixstartdate) RETURN @datetime_date END
Viel Spaß beim Ausprobieren