Notwendigkeit, einen Ansatz zu diskutieren: Wir haben eine Anzahl Spalte in der Orakeltabelle. Der Datentyp der Spalte ist char(3 Byte). Bei jedem Einfügen einer Zeile wird der Wert der Zählspalte um 1 erhöht (es handelt sich jedoch nicht um eine Identitätsspalte).

Es besteht die Möglichkeit, dass der Wert über 999 hinausgeht. Wie können wir damit umgehen? Bis jetzt kann ich den Ansatz rechtfertigen:

Erhöhen des Spaltendatentyps zur Laufzeit. Schritte sind:

  1. Zuerst überprüfen wir die Länge des Wertes.
  2. Wenn beispielsweise die Länge 4 beträgt, ändern Sie die Tabellenspalte und ändern Sie die Spaltengröße in char(4 BYTE)

Jeder bessere Ansatz, den Sie Menschen bieten können ...

1
Tanul 5 Jän. 2016 im 13:07

2 Antworten

Beste Antwort

Erhöhen des Spaltendatentyps zur Laufzeit.

Es zeigt, dass das Design fehlerhaft ist . Sie sollten niemals eine Tabelle zur Laufzeit ändern.

In Ihrer Anforderung gibt es keinen Grund, die NUMMER als STRING zu speichern. Dies ist mit Sicherheit der Hauptgrund für eine Leistungsminderung. Sie sollten die richtigen Datentypen auswählen, in Ihrem Fall NUMBER .

Bei jedem Einfügen einer Zeile wird der Wert der Zählspalte um 1 erhöht

Idealerweise sollten Sie hierfür eine Sequenz verwenden. Abhängig von Ihrer Datenbankversion gibt es zwei Möglichkeiten:

Nebenbei bemerkt speichert der Datentyp CHAR Zeichenfolgen fester Länge. Idealerweise sollten Sie den Datentyp VARCHAR2 verwenden, in dem Zeichenfolgen variabler Länge gespeichert sind.

0
Lalit Kumar B 5 Jän. 2016 im 10:27

Sie sollten wirklich, wirklich keine Zahlen in einer char- oder varchar-Spalte speichern. Wenn möglich, überarbeiten Sie das Tischdesign, das Sie in dieses Problem gebracht hat.

Wenn Sie das nicht können, sind Sie sicher, dass die Spalte nicht von char (3) in etwas Nützlicheres geändert werden kann? Char (4) ist nur 1 Byte mehr Speicherplatz, varchar (4) wäre normalerweise wahrscheinlich kein zusätzlicher Speicherplatz, wenn char (3) anderswo gearbeitet hätte.

Wenn Sie wirklich keine von ihnen ausführen können und immer noch in dieser Essiggurke stecken und unbedingt eine Zahl über 999 in eine char (3) -Spalte eintragen müssen, auch nach dem Treten und Schreien dass es keine gute Idee ist ....

Speichern Sie es in hex. Beachten Sie dies sehr deutlich, oder es wird die Leute verwirren, aber die Umwandlung von Hex in Dezimal ist keine schwarze Kunst und es gibt Ihnen einen Bereich von bis zu 4095 im selben Zeichenraum.

0
eftpotrm 5 Jän. 2016 im 10:34