Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Systemobjekte » Systemprozeduren » Alphabetische Liste der Systemprozeduren

 

sa_rowgenerator-Systemprozedur

Gibt eine Ergebnismenge mit Zeilen zwischen einem angegebenen Start- und Endwert zurück

Syntax
sa_rowgenerator(
 [ Zeile_Start
 [, Zeile_Ende
 [, Zeile_Schritt ] ] ]
)
Argumente
  • Zeile_Start   Mit diesem optionalen INTEGER-Parameter können Sie den Startwert angeben. Standardwert ist "0".

  • Zeile_Ende   Mit diesem optionalen INTEGER-Parameter können Sie den Endwert angeben. Der Standardwert ist 100.

  • Zeile_Schritt   Verwenden Sie diesen optionalen INTEGER-Parameter, um das Inkrement anzugeben, mit dem die Sequenzwerte erhöht werden. Der Standardwert ist "1".

Ergebnismenge
Spaltenname Datentyp Beschreibung
row_num INTEGER Sequenznummer
Bemerkungen

Die sa_rowgenerator-Prozedur kann in der FROM-Klausel einer Abfrage verwendet werden, um eine Sequenz von Zahlen zu generieren. Diese Prozedur ist eine Alternative zur Verwendung der RowGenerator-Systemtabelle. Sie können sa_rowgenerator beispielsweise für folgende Aufgaben verwenden:

  • Test-Daten für eine bekannte Anzahl von Zeilen in einer Ergebnismenge generieren

  • Eine Ergebnismenge mit Zeilen für Werte in jedem Bereich generieren. Sie können z.B. eine Zeile für jeden Tag des Monats oder Bereiche von Postleitzahlen generieren.

  • Eine Abfrage generieren, die eine angegebene Anzahl von Zeilen in der Ergebnismenge hat. Das kann beim Testen der Performance von Abfragen nützlich sein.

Sie können das Verhalten der RowGenerator-Tabelle mit der folgenden Anweisung emulieren:

SELECT row_num FROM sa_rowgenerator( 1, 255 );
Berechtigungen

Keine

Nebenwirkungen

Keine

Siehe auch
Beispiel

Die folgende Abfrage gibt eine Ergebnismenge zurück, die für jeden Tag des laufenden Monats eine Zeile enthält.

SELECT DATEADD( day, row_num-1,
        YMD( DATEPART( year, CURRENT DATE ),
            DATEPART( month, CURRENT DATE ), 1 ) ) 
    AS day_of_month
    FROM sa_rowgenerator( 1, 31, 1 )
    WHERE DATEPART( month, day_of_month ) = 
       DATEPART( month, CURRENT DATE )
    ORDER BY row_num;

Die folgende Abfrage zeigt, wie viele Mitarbeiter in Postleitzahlenbereichen (0-9999), (10000-19999), ..., (90000-99999) leben. Manche dieser Bereiche haben keine Mitarbeiter, was die Warnung Nullwert in Aggregatfunktion eliminiert (-109) bewirkt. Die sa_rowgenerator-Prozedur kann verwendet werden, um diese Bereiche zu generieren, auch wenn es keine Mitarbeiter gibt, die eine Postleitzahl in diesem Bereich haben.

SELECT row_num AS r1, row_num+9999
 AS r2, COUNT( PostalCode ) AS zips_in_range
FROM sa_rowgenerator( 0, 99999, 10000 ) D LEFT JOIN Employees
   ON PostalCode BETWEEN r1 AND r2
GROUP BY r1, r2
ORDER BY 1;

Das folgende Beispiel generiert 10 Zeilen von Daten und fügt sie in die NewEmployees-Tabelle ein:

INSERT INTO NewEmployees ( ID, Salary, Name )
SELECT row_num, 
   CAST( RAND() * 1000 AS INTEGER ),
   'Mary'
FROM sa_rowgenerator( 1, 10 );

Das folgende Beispiel verwendet die Systemprozedur sa_rowgenerator, um eine Ansicht zu erstellen, die alle Ganzzahlen enthält. Der Wert "2147483647" in diesem Beispiel stellt die höchste Ganzzahl mit Vorzeichen dar, die in SQL Anywhere unterstützt wird.

CREATE VIEW Integers AS
SELECT row_num AS n
FROM sa_rowgenerator( 0, 2147483647, 1 );

Dieses Beispiel verwendet die Systemprozedur sa_rowgenerator, um eine Ansicht zu erstellen, die Datumsangaben von 0001-01-01 bis 9999-12-31 enthält. Der Wert "3652058" in diesem Beispiel stellt die Anzahl der Tage zwischen 0001-01-01 und 9999-12-31 dar, den frühesten und spätesten in SQL Anywhere unterstützten Datumsangaben.

CREATE VIEW Dates AS
SELECT DATEADD( day, row_num, '0001-01-01' ) AS d
FROM sa_rowgenerator( 0, 3652058, 1 );