Überprüfung der Dezimalstellen und Nachkommastellen bei Fließkommazahlen

Hallo,

ich möchte eine Domain erstellen, die eine Fließkommazahl auf Gesamtstellen und Nachkommastellen überprüft.

Beispiel:

zulässige Gesamtstellen: 3
zulässige Nachkomma stellen: 2
gültiger Wert: 3.43
nicht gültiger Wert: 343.3444

ich hatte mir das so gedacht:

CREATE DOMAIN check_numeric AS NUMERIC CHECK( VALUE = NUMERIC(3,2));

nur das funktioniert nicht…

besser wären auch 2 Domainen, d.h. eine für die Gesamtstellen und eine für die Nachkommastellen
was gibt es da für Möglichkeiten?

gruß
jazzhunter

Kannst Du uns erklären, für was man das braucht?

Andreas

Ich bin dabei XML-Schema in ein Postgres-DB-Schema umzuwandeln

Beispielsweise habe ich im XML-Schema folgenden simpleType

<simpleType name="celsiusType">
        <restriction base="decimal">
            <totalDigits value="4"/>
            <fractionDigits value="1"/>
            <minInclusive value="36.4"/>
            <maxInclusive value="40.5"/>
        </restriction>
    </simpleType>

Nun wird hier celsiusType zum Attribut celsiustype und die Restriktionen sollen in der DB auch erhalten bleiben, deswegen brauche ich da ne check-Klausel, bzw. DOMAIN

übrigens: Falls ihr openSource-Programme kennt, die XML-Schemata in DB-Schema umwandeln können, dann nennt mir bitte diese, ich hab während meiner Recherche nichts brauchbares gefunden

grüße jazzhunter

Aufgrund der zahlreichen Datenbankformate und ihrer Restriktionen wird das so ein Produkt in vernünftig kaum geben. PostgreSQL kann im übrigen mit XML umgehen vieleicht hift das ja. Für kompliziertere Dinge würde ich dir Python mit lxml und SqlAlchemy empfehlen. Man kommt schnell rein, auch als Anfänger, es gibt gute Bücher und viel Onlinedoku dazu und es ist sehr vielseitig.

Grüße Uwe



test=# create or replace function check_input(numeric) returns bool as $$begin if length(regexp_replace($1::text,'^.*\.','')) <= 2 then return true; else return false; end if; end; $$language plpgsql;
CREATE FUNCTION
Time: 0,341 ms
test=*# create table bla (f numeric check(check_input(f)));
CREATE TABLE
Time: 5,806 ms
test=*# insert into bla values (1.12);
INSERT 0 1
Time: 0,562 ms
test=*# insert into bla values (1.123);
ERROR:  new row for relation "bla" violates check constraint "bla_f_check"
test=!#

vielleicht so?


Andreas

hey danke erstmal für eure hilfe, das hilft mir schon weiter

grüße
jazzhunter