Vytvoreni pretypovavaci fce v PgSQL
Karel Zak
zakkr na zf.jcu.cz
Středa Srpen 23 14:09:53 CEST 2000
> > > Da se nejak napsat pretypovavaci funkce CHAR->INT a
> > hlavne, donutit
> >
> >
> > test=# CREATE FUNCTION mycast( bpchar ) RETURNS int
> > test-# AS 'SELECT $1::text::int' LANGUAGE 'SQL';
> > CREATE
> > test=# select mycast( '10' );
> > mycast
> > --------
> > 10
> > (1 row)
> >
> Tohle je dobry, ale kdyz se mi nelibi syntax s volanim funkce, ale
mela by se vam libit, jinak jeste blize SQL standardum je cast( '10' AS int)
> chtel bych pouzit syntaxi se ctyrteckou? Jde to, nebo je to natvrdo
> zakodovany, ze ctyrtecka funguje jen pro standardni typy?
Ne, pro jakykoliv typ --- viz manual a CREATE TYPE...
> Dejme tomu, ze vytvorim nejaky novy typ, aby to bylo kompatibilni s
> beznymy typy rekneme velmi presny float treba na 50 platnych mist, napr. pro
Jen neobjevovat ameriku (viv. type numeric) :-)
> astronomicke vypocty, nazveme ho ASTRO. A ted bych chtel PgSQL vybavit sadou
> pretypovavacich funkci (ASTRO <-> INT, ASTRO <-> FLOAT, ...) tak, aby je
> umel automaticky, pouzivat ve vyrazech, kde se kombinuji typy.
> Tedy aby sel napsat vyraz ASTRO = ASTRO + INT, bez nutnosti nejakeho
> explicitniho pretypovavani. Urcite by to slo tak, ze bych definoval sadu
> operatoru pro ruzne kombinace typu, ale napr. C++ kdyz nenajde vhodny
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ano. Udelate si typ a udelate si operatory (viz. CRAETE OPERATOR), to plati
i pro to vase puvodni ORDER BY ( '>' '<' '=' by mohlo stacit ?) .
Je to v manualech.
> operator, se jeste pokousi pretypovavat operandy a pretypovavci funkce se
> daji taky doplnovat, jak je na tom PgSQL.
PgSQL ... vzdy velmi dobre :-)
Presne todle je duvodem "pomalosti" PostgreSQL oproti MySQL. Tedy zcela
dynamicke datove typy/funkce/operatory.
Karel
Další informace o konferenci Test