# Datum anpassen in Oracle



## Tejo1986 (23. Nov 2010)

Hey,

ich habe ein problem. In meiner Datenbank stehen Datensätze mit einer bestimmten Gültigkeit. Diese ist durch ein Zeit usw. gegegeben.
Kommt zu der selbern Art ein neuer Datensatz, welcher Aktualisert werden soll (wird durch ein haken definiert), so wird der alte Datensatz so geändert, dass der neue Valitfrom um 1 sekunde verringert wird und das dann in den alten valitTo gesetzt wird.

Somit sollten sie sich nicht überschneiden. Nur wie geht das ?

Folgende schnipsel Code habe ich schon für diesen Ablauf:


```
<input type="checkbox" name="xls2oradoupdate" title="Dieser Modus erlaubt das überschreiben bereits vorhandener Werte."> Aktualisierungsmodus<br><br>
```
 ist in meiner JSP Datei das feld um zu wissen ob der Wert aktualsiert wird oder nicht. Kann aber erstmal außen vor gelassen werden denke ich.


```
public String getOracleDateOld(){//String validfrom) {
        //String temp = validfrom.substring(9,18);
        GregorianCalendar calendar = new GregorianCalendar();
        //calendar.set(getYearFromString(temp), getMonthFromString(temp), getDayFromString(temp));
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.SECOND, -1);
        return getOracleDate(
                calendar.get(Calendar.DAY_OF_MONTH),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND)
                            );
    }
```
Sollte ja an sich das neue Datum in temp speichern und dann bei calender.set reinschreiben. Nur wie sage ich ihm, dass der Das Datum um 1 Sekunde verringern soll und genau dort schreiben ?!


----------



## Michael... (23. Nov 2010)

Ich würde sowas DB intern mittels Trigger lösen.

Ansonsten sehe ich in Deinem Code jetzt nicht wo und was der alte und der neue Wert sein soll.

Wenn man ein Calendar Objekt hat kann, man wie folgt die Zeit um eine Sekunde vorstellen:

```
date.set(Calendar.SECOND, date.get(Calendar.SECOND)-1);
```
oder so:

```
date.roll(Calendar.SECOND, -1);
```


----------



## Tejo1986 (23. Nov 2010)

Hey,

klingt logisch. Nur wie binde ich das hier ein:


```
old_validto = date.getOracleDateOld(validfrom);
```

Im validfrom steht dann das neue Datum drin, nur wie sage ich dort -1 ?!


----------



## Michael... (23. Nov 2010)

Ist validfrom ein Calendar Objekt? Und beinhaltet es das Datum des neuen Datensatzes?
Ist old_validto ebenfalls ein Calendar Objekt?
Wenn Du das Objekt nicht mehr benötigst, dann ginge folgendes:

```
old_validto = validfrom.roll(Calendar.SECOND, -1);
```


----------



## Tejo1986 (23. Nov 2010)

der will das nich nehmen irgendwie "cannot find symbol" meint NetBeans

vorher mache ich noch 
validfrom = date.getOracleDateNow(); 

- is ne Methode von mir die so aussieht:


```
public String getOracleDateNow() {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.add(Calendar.MONTH, 1);
        return getOracleDate(
                calendar.get(Calendar.DAY_OF_MONTH),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND)
                            );
```

An sich liefert der ja nen Datum zurück mit Uhrzeit oder ?


----------



## Michael... (23. Nov 2010)

Tejo1986 hat gesagt.:


> An sich liefert der ja nen Datum zurück mit Uhrzeit oder ?


Nein, steht ja schon im Methodenkopf. Die Methode liefert einen String - mit dem vermutlich das Datum dargestellt wird.


----------

