Ich habe eine VB6-App, die eine Oracle (12) PL/SQL-gespeicherte Prozedur aufruft. Es verwendet ein ADODB-Verbindungsobjekt.Wie verhindern, dass die Parameter von VB6 zu Oracle mit ADO getrimmt werden
String-Parameter, die von der App übergeben werden, können nachstehende Leerzeichen enthalten. Wenn Oracle sie empfängt, sind alle nachgestellten Leerzeichen verschwunden.
Ich möchte die nachgestellten Leerzeichen bleiben. Ich habe überall gesucht und kann keine Referenz online auf Verhalten von VB, ADO oder Oracle finden, die besagt, dass nachfolgende Leerzeichen in Parameter getrimmt werden sollen.
In Oracle sind die Parameter der gespeicherten Prozedur als varchar2 definiert. In VB6 verwende ich CreateParameter(), um die Parameter als adVarChar hinzuzufügen (ich habe andere String-Typen ausprobiert und es hilft nicht). Der Anruf gibt den Namen, Typ, Richtung, Größe und Wert an.
Kurz vor dem Aufruf von Execute kann ich die Command.Parameters-Auflistung überprüfen und überprüfen, dass alle nachfolgenden Leerzeichen vorhanden sind.
Oracle-Referenzen geben explizit an, dass mit dem varchar2-Datentyp die folgenden Leerzeichen nicht ignoriert werden.
Kann jemand beschreiben, ob es eine Option in VB oder der Datenbank gibt, die dies verursacht, und kann ausgeschaltet werden?
Können Sie bitte Ihren Code zeigen? –
IIRC, die abschließenden Leerzeichen werden im DB gespeichert und sind dort, wenn Sie den Wert abrufen. Es sind _comparons_, wo sie ignoriert werden, dh der SQL-Sprachstandard besagt, dass 'Foo' gleich 'Foo' ist, wenn WHERE-Klausel und CASE-Typ überprüft werden. –
Ah, hier ist eine Dokumentation zu diesem Thema. Es stammt von Sql Server und nicht von Oracle, aber es bezieht sich wiederum auf den ansi-Standard, dem wahrscheinlich auch Oracle folgt (Ansi SQL-92, Abschnitt 8.2,, Allgemeine Regeln # 3) https://support.microsoft .com/de-de/kb/316626 In Sql Server können Sie dies umgehen, indem Sie anstelle eines Gleichheitsvergleichs einen LIKE-Vergleich durchführen. Keine Ahnung, ob Oracle das gleiche Verhalten hat. –