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:
- Zuerst überprüfen wir die Länge des Wertes.
- 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 ...
2 Antworten
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:
- Releases vor 12c - Siehe Trigger-Sequence-Ansatz
- Ab 12c - Siehe IDENTITY-Spalte
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.
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.
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.