feat: content import system - Markdown parser, importer, 7 decks + 3 tutorials + 5 cheatsheets
Dieser Commit ist enthalten in:
Ursprung
1c59b667f2
Commit
6a504254b0
17 geänderte Dateien mit 2658 neuen und 0 gelöschten Zeilen
104
edu/content/cheatsheets/sql-cheatsheet.md
Normale Datei
104
edu/content/cheatsheets/sql-cheatsheet.md
Normale Datei
|
|
@ -0,0 +1,104 @@
|
|||
# SQL in Omnis Cheat Sheet
|
||||
|
||||
## Verbindung aufbauen
|
||||
```omnis
|
||||
# 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
|
||||
```omnis
|
||||
# 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
|
||||
```omnis
|
||||
Do lStmt.$execdirect(con( |
|
||||
'INSERT INTO mytable (name, status, created, revisor, valid) ', |
|
||||
'VALUES (@[lName], @[lStatus], now(), @[tEmployeeID], true)' |
|
||||
)) Returns #F
|
||||
```
|
||||
|
||||
## UPDATE - Daten aendern
|
||||
```omnis
|
||||
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!)
|
||||
```omnis
|
||||
# In Solution2: Soft-Delete bevorzugen!
|
||||
Do lStmt.$execdirect(con( |
|
||||
'UPDATE orders SET valid = false, modtime = now(), revisor = @[tEmployeeID] ', |
|
||||
'WHERE orderid = @[lOrderID]' |
|
||||
)) Returns #F
|
||||
```
|
||||
|
||||
## Transaktionen
|
||||
```omnis
|
||||
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
|
||||
```omnis
|
||||
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
|
||||
```
|
||||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren