Ich stoße auf ein Problem, das ich noch nicht erklären konnte. Ich habe Code, der eine Nummer nimmt, den nationalen Zeichencode für die Nummer mit NCHR erhält und dann eine RAWTOHEX-Konvertierung durchführt.Oracle Unicode-Unterstützung in 10g und 11g Unterschiede
Es funktionierte in 10g seit Jahren. Als wir auf 11g aufrüsten, werden verschiedene Werte zurückgegeben. Ich kochte es alle bis auf wenige Aussagen und eine Demonstration Skript erstellt:
SET SERVEROUTPUT ON;
DECLARE
rawVar RAW(2000);
nVar NVARCHAR2(1000);
BEGIN
nVar := NCHR(1112);
SELECT RAWTOHEX(nVar) INTO rawVar FROM DUAL;
DBMS_OUTPUT.PUT_LINE('rawVar: ' || rawVar);
END;
/
Wenn in 10g ausgeführt, die ouptut ist „0458“. In 11g (vom selben Computer und mit derselben Oracle-Client-Software) lautet die Ausgabe "00040058". Der Upstream-Prozess, der auf die Ausgabe angewiesen ist, erwartet "0458".
Interessanterweise (für mich), wenn ich die Definition von nVar zu einem VARCHAR2 anstelle eines NVARCHAR2 ändern, bekomme ich "0458" als Ausgabe auf 11g.
Kann jemand bitte helfen zu erklären, warum die Ergebnisse unterschiedlich sind? Ich habe Oracle Release Notes und Support-System durchsucht, aber keine Antworten gefunden.
Vielen Dank im Voraus.
könnten Sie dies aus einer SQL-Umgebung ausführen: Wählen Sie nchr (1112) nchr, raltohex (nchr (1112)) rth aus Dual; – dpbradley
Beide Umgebungen sreutrn das gleiche, NCHR ist "?" und RTH ist "0458" – elmnoise
So scheint es, dass die Konvertierung in Varchar in der dbms_output den Wert beeinflusst - ist das ähnlich, wie Ihr Upstream-Prozess den Wert erhält? – dpbradley