Variable verwenden

derhenry

Fleissiger Benutzer
Beiträge
54
Moin,

in einer Abfrage wird an verschiedenen Stellen ein Datum (bspw. 20200101) als Kriterium genutzt und ich würde es bei Änderungen gerne nur an einer Stelle anpassen, also eine Variable nutzen.
Wie deklariere ich diese?

Besten Dank und schöne Grüße
 
Werbung:
Schnellschuß:

Code:
postgres=# with datum as (select '2020-02-22'::date as datum) select datum +10, datum + 20, datum + 30 from datum;
  ?column?  |  ?column?  |  ?column?  
------------+------------+------------
 2020-03-03 | 2020-03-13 | 2020-03-23
(1 row)

postgres=#
 
Danke!
In meiner tollen Tabelle ist ein Datum natürlich kein Datum sondern eine Zahl (20200101). :)
Gibt es in Oracle kein DECLARE oder DEFINE?
 
Gibt es, in stored procs. SQL selbst kennt keine Variablen. Dafür ist es aber egal, ob das da ein Datum ist, ein Text, ein INT oder ein Besenstiel (sofern Du dazu einen passenden Datentyp definiert hast ...)
 
Gefunden habe ich das hier:
DEFINE usr = 'YourName';
SELECT * FROM Department WHERE created_by = '&usr';

Wenn ich das auf eine Zahl umbaue, klappt es aber nicht:
DEFINE datumStart = 20200101;
SELECT * FROM Department WHERE created_by = &datumStart;

--> SQL-Fehler [1008] [72000]: ORA-01008: Nicht allen Variablen ist ein Wert zugeordnet
 
Das DEFINE ist aber nicht Bestandteil von Oracles Abfragesprache, sondern des Tools das Du verwendest (vermutlich SQL Developer).

Du musst vermutlich die Variable explizit in ein Datum umwandeln:

Code:
DEFINE datumStart = 20200101; 
SELECT * 
FROM Department 
WHERE created_by = to_date('&datumStart', 'YYYYMMDD');
 
Das DEFINE ist aber nicht Bestandteil von Oracles Abfragesprache, sondern des Tools das Du verwendest (vermutlich SQL Developer).

Du musst vermutlich die Variable explizit in ein Datum umwandeln:

Code:
DEFINE datumStart = 20200101;
SELECT *
FROM Department
WHERE created_by = to_date('&datumStart', 'YYYYMMDD');

Hey, besten Dank.
Aber es soll ja ne Zahl sein. Deswegen:
SQL-Fehler [932] [42000]: ORA-00932: Inkonsistente Datentypen: NUMBER erwartet, DATE erhalten
 
Dann ist BEGINN_DATUM vermutlich keine Zahl sondern ein VARCHAR und um das Chaos (und schlechte Datenbankdesign) "perfekt" zu machen, sind auch noch Werte enthalten die nicht zu einer Zahl konvertiert werden können.

 
Werbung:
Wie deklariere ich diese?
Du kannst eigentlich in jeder DB sowas hier bauen, wenn es reines SQL sein soll:
Code:
SELECT d.*, --[v.var] 
  FROM department d, 
      (SELECT 12 AS var FROM dual) v
 WHERE created_by = v.var 
    OR changed_by = v.var;
Den v Teil in Klammern kannst Du beliebig erweitern mit anderen Variablen.
 
Zurück
Oben