Posted By: bam-bam (bam-bam) on 'CZdatabases' Title: re:jak volat order function v Oracle? Date: Wed Sep 25 13:27:03 2002 Zdar, Nevite nekdo jak volat order function v oracle? Vim jak to vytvorit, ale nikde jsem nenasel jak to pouzit. Rekneme ze mam neco jako: Pouziju priklad, ktery maji na oracle webu: CREATE TYPE Customer_typ AS OBJECT ( id NUMBER, name VARCHAR2(20), addr VARCHAR2(30), ORDER MEMBER FUNCTION match (c Customer_typ) RETURN INTEGER ); CREATE TYPE BODY Customer_typ AS ORDER MEMBER FUNCTION match (c Customer_typ) RETURN INTEGER IS BEGIN IF id < c.id THEN RETURN -1; ELSIF id > c.id THEN RETURN 1; ELSE RETURN 0; END IF; END; END; vytvorim tabulku a vlozim nejaky data CREATE TABLE Customers OF Customer_typ ( id PRIMARY KEY); --load some data ted zkousim: select c.name, c.match(xxx) from Customers c; xxx - nevim co mam pouzit, myslel jsem neco jako select * from Customers where id = 1; apod, ale to je blbost, zkousel jsem i ref ale to nefunguje nevite nekdo jak na to? DIk Zaba Tak to musim trochu obsirneji. Kdyz das funkci objektu jako member tak ta funkce je urcena jako "porovnavaci funkce". Proste urcuje kterej objekt je vetsi nez druhej objekt. Je to proto ze v objektu muze byt vice promenych a oracle samozrejme nevi podle jake se to ma porovnavat (muze se to porovnavat treba podle ruznych kombinaci) Vyjdu z tech typu co jsi tady napsal Vytvorim tabulku s timto objektem CREATE TABLE zakaznik (sloupec1 varchar2(20), sloupec2 customer_typ) Naplnim nejaka data insert into zakaznik values('aa',customer_typ(1,'AA','AAA')) insert into zakaznik values('bb',customer_typ(2,'BB','BBB')) insert into zakaznik values('cc',customer_typ(3,'CC','CCC')) A ted davam dotaz SELECT sloupec1, sloupec2 FROM zakaznik order by sloupec2 A vidim ze se mi to radi podle te funkce. Pro vyskouseni muzes v ty funkci jenom prehodi +1 a -1 a uvidis ze se ti to zacne radit jinak. Muzes tak umoznit velmi slozite razeni. Treba kdyz jsou krestni jmena od A-G tak radit podle prijmeni a kdyz jsou od G-Z tak radit podle adresy. A tak podobne. V pl/sql se to pouzije i pri porovnani dvou instanci objektu a>b. V tabulkach se to pouzije pri dotazech kde pouzijes distinct, group by nebo order by . Jestli by ti to nebylo jeste jasny tak se ozvi Mylit se je lidske,ale neco dokonale zasmodrchat je mozne jen pomoci pocitace. /Artur Bloch/