Hallo,
Welche Zeile ist das (bin mit dem iPad hier).
Eine genaue Beschreibung wird es erst mit
FB 3.0 geben.
Jetzt hilft hier nur, Ausgaben in eine Log-Tabelle zu schreiben.
Dort steht dann der letzte erfolgreiche gelesene String drin,
der nächste ist das Problemkind.
Woher kennt mein Vorredner die ganze SP???
Heiko
Hier noch mal die komplette SP mit längeren VARCHAR Feldern:
Code:
create or alter procedure sp_sortstring (
wert varchar(100))
returns (
result varchar(100))
as
declare variable laenge smallint;
declare variable pos smallint;
declare variable zeichen char(1);
declare variable temp varchar(100);
declare variable rest varchar(100);
begin
result = null;
laenge = char_length(:wert);
if (:laenge > 0) then
begin
pos = 1;
while (:pos <= :laenge) do
begin
zeichen = substring(:wert from :pos for 1);
if (:zeichen in ('0','1','2','3','4','5','6','7','8','9', '.')) then
temp = coalesce(:temp, '')||:zeichen;
else
begin
-- Rest hinten
rest = substring(:wert from :pos for 100);
break;
end
pos = :pos + 1;
end
end
if (coalesce(:temp, '') <> '') then
begin
-- Zahl vor Punkt auffüllen
pos = position('.', :temp);
if (:pos = 0) then
result = lpad(:temp, 10, '0')||'.'||lpad('0', 10, '0');
else
result = lpad(substring(:temp from 1 for :pos -1), 10, '0')||'.'||
lpad(substring(:temp from :pos + 1 for :laenge), 10, '0');
result = :result||coalesce(:rest, '');
end
else
Result = :rest;
suspend;
end
Ich habe auch in der Zeile die Zeile
Code:
rest = substring(:wert from :pos for 100);
von 10 auf 100 geändert.
Walter,
du solltest dennoch die SP überprüfen.
Ich fülle jetzt die numerischen Teile bis 10 Stellen auf.
aus 14.5 mache ich 0000000014.0000000005
Auch das funktioniert evtl. nur korrekt, wenn deine numerischen Teile nie länger als 10 sind.
(hab jetzt nicht im Kopf, ob lpad dann abschneidet, den Wert so lässt oder eine
Exception wirft.
Wenn du z.B. einen Wert 123456789012.3a hättest - hättest du u.U. ein neues Problem.
Ich kann nur eine Vorlage liefern, nicht die fehlerfreie Lösung.
Frank