2009-07-01 6 views
0

Gibt es einen Nachteil (außer dass der Wert oder das Array zu groß wird), um die maximale Integergröße eines VARCHAR oder VARRAY auf einen Wert festzulegen, der wesentlich größer ist als der tatsächlich erforderliche Wert zur maximalen Größe erlaubt)?Nachteil großer LIMIT von VAR-Typen

Antwort

2

Wenn Sie über eine Spalte in einer Datenbanktabelle sprechen, ist es ratsam, die maximale Länge eines VARCHAR2 auf die von den Anforderungen erlaubte Mindestlänge einzustellen - wie bei jeder anderen Einschränkung hilft es, diese integrierten Funktionen von die Datenbank, um sicherzustellen, dass nur gültige Daten gespeichert werden (zB wenn ein Nachname mit 1000 Zeichen eingegeben wird, bin ich mir ziemlich sicher, dass das falsch sein wird und vielleicht einen Fehler in einem Programm hervorhebt).

Auf der PL/SQL-Seite kann es interessant sein zu wissen, dass es je nach der Größe der Zeichenfolgen in Ihren PL/SQL-Programmen Unterschiede im Speicher (PGA) geben kann. Intern gibt es einen Schwellenwert von 2000 Byte, bei dem die PL/SQL-Engine zwischen zwei verschiedenen Speicherzuweisungsschemata wechselt. z.B. die folgende Deklaration:

DECLARE v VARCHAR2(2000); BEGIN... 

werden 2000 Byte in dem Speicherbereich des Benutzers zuzuordnen, während:

DECLARE v VARCHAR2(2001); BEGIN... 

nur Speicher zuordnen, wenn ein Wert zugeordnet ist, und wird nur so viel Speicher zuzuteilen, wie erforderlich ist, um den zugewiesenen Wert zu halten.

Oracle forum: "VARCHAR2 space allocation"

0

Verwenden Sie einfach nicht Varray, verwenden Sie geschachtelte Tabelle. Geschachtelte Tabellen können eine beliebige Anzahl von Elementen enthalten.

Die Verwendung von varchar2 (4000) anstelle von varchar2 (20) in einer Tabellendefinition tut nicht wirklich weh, da Oracle diesen Speicherplatz nicht beansprucht, wenn er nicht benötigt wird.

+0

Ich erwäge eine VARRAY von BINARY_FLOAT der Verwendung zu speichern rohe Wellenformen mit Zehntausenden von Datenpunkten. Wenn wir uns entscheiden, neue Datenerfassungsgeräte zu kaufen, die Daten schneller lesen können, könnte die Zahl leicht hunderttausend übersteigen. Ich freue mich nur darauf, im Voraus zu planen. Ich wusste nur nicht, ob ich die Effizienz mit einem VARRAY mit einer maximalen Größe verlieren würde, die viel größer ist, als ich jetzt brauche. – Steven

+0

Lesen Sie hier: http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collections.htm#i35815 – tuinstoel

+0

Hinweis aus der obigen Referenz: "Sie können sich nicht auf die Reihenfolge und Indizes von verlassen Eine geschachtelte Tabelle bleibt stabil, da die geschachtelte Tabelle in der Datenbank gespeichert und von ihr abgerufen wird, da die Reihenfolge und die Indizes in der Datenbank nicht beibehalten werden. " Wenn dich das nicht stört, dann gehe darauf ein. VARRAY speichert auch nicht verwendete Array-Einträge nicht, so dass ein VARRAY (100000) mit einem Element nicht mehr Speicherplatz kostet als ein VARRAY (10) mit einem Element. – DCookie