2,7 KiB
2,7 KiB
SQL in Omnis Cheat Sheet
Verbindung aufbauen
# Session-Objekt erstellen (im IDE: Variable lSess vom Typ Object)
Do lSess.$logon('localhost', 'postgres', 'passwort', 'meineSess') Returns #F
If flag true
# Verbunden!
End If
SELECT - Daten lesen
# SICHER mit Bind-Variablen (:1, :2)
Do lStmt.$prepare('SELECT * FROM contact WHERE companyid = :1 AND valid = :2') Returns #F
Do lStmt.$execute(lCompanyID, kTrue) Returns #F
Do lStmt.$fetch(lList, kFetchAll) Returns #F
# Alternative: @[]-Syntax (auch sicher)
Do lStmt.$execdirect('SELECT * FROM orders WHERE orderid = @[lOrderID]') Returns #F
Do lStmt.$fetch(lList, kFetchAll) Returns #F
INSERT - Daten einfuegen
Do lStmt.$execdirect(con( |
'INSERT INTO mytable (name, status, created, revisor, valid) ', |
'VALUES (@[lName], @[lStatus], now(), @[tEmployeeID], true)' |
)) Returns #F
UPDATE - Daten aendern
Do lStmt.$prepare(con( |
'UPDATE orders SET status = :1, modtime = now(), revisor = :2 ', |
'WHERE orderid = :3' |
)) Returns #F
Do lStmt.$execute(lNewStatus, tEmployeeID, lOrderID) Returns #F
DELETE - Daten loeschen (VORSICHT!)
# In Solution2: Soft-Delete bevorzugen!
Do lStmt.$execdirect(con( |
'UPDATE orders SET valid = false, modtime = now(), revisor = @[tEmployeeID] ', |
'WHERE orderid = @[lOrderID]' |
)) Returns #F
Transaktionen
Do lSess.$begin() Returns #F ;; START TRANSACTION
# ... mehrere SQL-Operationen ...
If lAllesOK
Do lSess.$commit() Returns #F ;; COMMIT
Else
Do lSess.$rollback() Returns #F ;; ROLLBACK
End If
Fehlerbehandlung
Do lStmt.$execute(lParam) Returns #F
If not(flag true)
Calculate lError as lSess.$lasterrortext
OK message {SQL-Fehler: [lError]}
End If
Fetch-Modi
kFetchAll -> Alle Zeilen in Liste (fuer kleine/mittlere Ergebnisse)
kFetchOne -> Eine Zeile (fuer Schleifen bei grossen Ergebnissen)
kFetchBulk -> Block von N Zeilen (Kompromiss)
WICHTIGE REGELN
IMMER: @[lVar] oder :1 (Bind-Variablen = SICHER)
NIE: [lVar] (Text-Substitution = SQL-INJECTION!)
IMMER: WHERE valid = true (Soft-Delete beachten!)
IMMER: modtime, revisor setzen bei UPDATE
IMMER: created, revisor, valid setzen bei INSERT
IMMER: #F pruefen nach jedem SQL-Aufruf
Solution2-spezifische SQL-Tipps
Schema: soluser
Datenbank: masterdemo
Engine: PostgreSQL
Typische WHERE-Klausel:
WHERE valid = true
AND companyid = @[lCompanyID]
ORDER BY modtime DESC
Datum/Zeit:
now() -> aktueller Timestamp
current_date -> aktuelles Datum
@[#D] -> Omnis-Datum als Parameter
@[#T] -> Omnis-Timestamp als Parameter