-
SQL mit variabler Sortierfolge
Hallo,
ich möchte die Sortierfolge der SQL-Abfrage variabel gestallten. Mit einer Hostvariable funktioniert das logischerweise nicht, ob wohl der Compiler das problemlos akzeptiert
select * from mylib/kunden
order by :myorderby
Ich kann auch nicht die Abfrage dynamisch erstellen und dann mit prepare usw. arbeiten, weil ich nicht satzweise lesen will (kann) sondern die Ganze Ausgabe in ein JSON-Object ausgebe. Mein SQL-Statement sieht so aus:
exec sql
with kd as (
select * from ezhqry/kunden
order by kdnachn asc
limit :myLimit offset :myOffset)
select JSON_OBJECT(
'success' value 'true' format json,
'errmsg' value ' ',
'items' value
JSON_ARRAYAGG(
JSON_OBJECT(
'kdid' value kdid,
'kdnachn' value trim(kdnachn),
'kdvorn' value trim(kdvorn)
)
)
)
into :GblJson
from kd;
Hat jemand eine Idee/Lösung?
Danke im Voraus
Roman
-
Moin
geht doch:
Exec SQL Declare MyCursor Cursor For Select * From MyTable
Where F1 = : Bedingung
Order BY
Case When : OrderBy = '1' then Feld Else NULL End Desc
dann klappts auch so.
mfg
DKSPROFI
-
Zitat von DKSPROFI
Moin
geht doch:
Exec SQL Declare MyCursor Cursor For Select * From MyTable
Where F1 = : Bedingung
Order BY
Case When : OrderBy = '1' then Feld Else NULL End Desc
dann klappts auch so.
mfg
DKSPROFI
Hallo,
Vielen Dank für die rasche Antwort. Ich kenne die Syntax mit 'order by case' aber eben in Verwendung mit Cursor. Ich brauche aber keinen Cursor, weil ich ja kein Fetch mache. Ich weiss nicht, wie ich die Syntax in meine Abfrage implementieren kann bzw. ob ich in meiner Abfrage irgendwie mit Cursor arbeiten kann.
Noch mal vielen Dank
Roman
-
Und alternativ kann man den SQL auch in eine Variable packen und den Order by dann dynamisieren.
Open/Fetch/Close bleiben dabei identisch.
Parameter werden mit ? definiert und per Using beim Open/execute angegeben.
An Stelle des Select Into kann man dann Cursor nehmen oder per "Values (...) into ?" verwenden.
Übrigens Limit und Offset sind durchaus performancemäßig schlecht. Auch hier bietet sich alternativ ein "Scrollable Cursor" an, der statisch ist, also nur die Daten zum Openzeitpunkt nimmt, oder dynamisch sein kann.
Dann kann man per Fetch next/fetch prior/fetch relative seine Seitensteuerung durchführen.
-
Hallo Fuerchau,
Vielen Dank. Ich habe die Variante mit SQL in Variable packen wohl überlegt, aber meine Ausgabe ist in eine Hostvariable, das funktioniert so nicht. Und ich möchte nicht mit Scrollable cursor arbeiten, weil ich dann auch mit Fetch arbeiten muss dh. Satzweise und das funktioniert mit JSON_* nicht - ich weiss zumindest nicht, wie das gehen soll. Und Dein Einwand bez. Offset und Limit ist natürlich grundsätzlich richtig, allerdings performt das bei mir ausreichend gut und in Verbindung mit JSON-Datenausgabe auch nicht mit Fetch realisierbar. Danke für Deine Unterstützung
mfg
Roman
-
Statt "Select into " funktioniert ja auch "values ... into ...", und das geht eben auch wieder ohne Cursor.
"values (select ...) into " klappt auch wieder per execute [immediate] ....
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks