Frage

Die immer interessante Ausgabe von NULL Vs Blank wird mich fahren jetzt etwas verrückt.

Ich habe zwei ESQL / C-Strukturen, die zwei Tabellen darstellen. Ich bin Lesen einer Zeile aus eine Tabelle in einem Cursor. Unter Verwendung der Werte von zwei Feldern von diesem holen, werde ich abrufen eine Zeile von einer anderen Tabelle. Ich weiß, bevor die Hand, die zweite wird auf jeden Fall eine Zeile zurückgeben holen.

Nun können zweite Tabelle leere Werte haben. Durch leer, ich mag Mittelwert '. Wenn ich eine Entladestation diese Zeichen zeigen sich als ‚\‘. Aber innerhalb des C-Programm, werden diese nicht geholt bekommen, glaube ich.

Alternativ bin ich nicht in der Lage zu sehen, ob diese Werte vorhanden sind. Unter der Annahme, I die Werte in den Abruf- char * Wert,

if (Wert [0] == '\ 0') oder if (Wert [0] == ' ‚)

funktioniert nicht. gdb zeigt so etwas wie value = "\ 000", ''. Aber ich bin nicht in der Lage dies aus dem C-Code zu überprüfen.

I geladen manuell die Tabelle durch ein Rohr getrennte Datei. Für den Rohling eingeführt wird, ich getippt | \ |.

Kann jemand bitte lassen Sie mich wissen, wo ich falsch.

War es hilfreich?

Lösung

Sie sollten verwenden eine Verknüpfung der Daten aus den beiden Tabellen in einem Arbeitsgang zu sammeln. DBMS sind dabei schließt sich sehr gut; wenn Sie schließt sich manuell in der Anwendung, Sie Dinge langsam nach unten, in der Regel dramatisch.

Datentypen sind von entscheidender Bedeutung -. Und nicht näher bezeichnete in der Frage

SQL-Typen

  • VARCHAR (n) - folgende Leerzeichen sind signifikant; die Länge Null-String ist nicht NULL.
  • CHAR (n) -. Nachgestellte Leerzeichen werden vom DBMS hinzugefügt und kann von Anwendungen entfernt werden

ESQL / C-Typen:

  • char - für CHAR-Daten; mit Leerzeichen aufgefüllt, um in voller Länge mit NUL '\ 0' Terminator.
  • fixchar - für CHAR-Daten; mit Leerzeichen aufgefüllt, um in voller Länge ohne NUL '\ 0' Terminator.
  • varchar - für VARCHAR-Daten; nicht mit Leerzeichen aufgefüllt.
  • Zeiger auf diese Art auch verwendet werden kann, die Sache nicht wieder (der Compiler nicht weiß, wie groß der Raum ist, dass der Zeiger auf).

Sie erwähnen auch ‚\‘ auf Lastdaten. Das ist eine spezielle Notation verwendet, um mit der Länge Null Nicht-Null-Wert VARCHAR Feldern anzuzeigen; das leere Feld gibt an, in dem Entladen Format einen NULL-Wert. (On-Disk, eine leere nicht-null VARCHAR belegt ein Byte, Wert 0x00 für Länge Null; a. NULL VARCHAR zwei Bytes einnimmt, Werte 0x01 0x00 für eine Länge von 1 und eine NULL (oder NUL) -Wert)

Nach dem, was Sie sagen, Sie haben möglicherweise leer (aber nicht NULL) VARCHAR (n) Werte in der zweiten Tabelle. Diese sollten als String-Werte zeigen, wo das erste Byte NUL ‚\ 0‘ in Ihrem C-Code - unabhängig davon, welche der Variablentypen Sie verwenden. Die Ausgabe von GDB steht im Einklang mit, dass; das erste Byte '\ 0' (oder '\ 000'); der Rest ist irrelevant.

Sie können wollen Indikatorvariablen suchen; diese Ihnen sagen, ob ein bestimmte Wert aus dem DB ausgewählt ist NULL oder nicht.

Wenn Sie immer noch Probleme haben, schreiben Sie den Code (vorzugsweise ein sehr kleines übersetzbar Programm, das zeigt das Problem - etwa bis zu 50 Zeilen oder so, oder ein kleines Fragment der Codes - 20 Zeilen sagen oder so).

Andere Tipps

In Informix-SE, wenn ich entladen eine Tabelle mit Spalten NULL-Werten werden die ungeladenen Spalten mit zwei Rohren Symbolen „||“ das Fehlen eines Werts für diese bestimmte Spalte Bedeutung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top