Posted By: medved (A~z na v~eky Mikov~ce.) on 'CZdatabases' Title: Re: Embedded SQL, Ccko a Select z neznameho poctu sloupcu Date: Sun Nov 21 23:26:20 1999 > > > predem neznamych typu hodnot (dostanu nazev tabulky, ale nebudu vedet, > jak > > > vypada) - pomoci ESQL v Ccku pod Oraclem (a tak, aby to bylo portabilni > na > > > Postgres)? > > OK, ted mne napadlo, ze jsme zapomnel uvest jeste jeden podstatny fakt: ja > (=muj modul) ty databazove tabulky budu take vytvaret. Takze budu mit > prehled, co se mi vytvorilo (=mohu si to nekam ulozit, treba i do > databaze/vyhrazene tabulky). Pokud mas konreolu nad db schematem, tak to je jina. > > Hmmm. Kompatibilne to asi nepujde. > > :-) musi to jit, prece nebudu predelavat model;-) Obecne (bez kontroly db schematu) by to univerzalne (Oracle/PostgreSQL) neslo :-( > > Potrebujes totiz provest dotaz na metadata u dane databaze (abys ziskal > > informaci o strukture tabuklky). > > OK, to bych mohl obejit tou poznamkou nahore. Asi jsem tim hodne zmenil > podminky, co? Budiz mi omluvou, ze mne to napadlo az po napsani prvniho > postu. Jo, presne tohle doporucuju -tento zpusob pouzivaji i nektere 4GL nastroje (PowerBuilder...) A je to dokonce v souladu s ideou relacnich databazi - to ze pristupujes k informacim o strukture tabulky stejnym zpusobem, jako k tabulce samotne (pomoci stejnego SQL) > > ODBC rozhrani standardizuje takovyto dotaz, ale Embedded SQL myslim ne => > > musis manuelnet provest select do systemovych tabulek a zpracovat > vysledek. > > (neco jeko select * from syscolumns where table_name = 't1' [syntaxe je > > temer urcite blbe - metadata jsou zavisla na dodavateli]) > > Mimochodem, umoznuje ESQL vyber urciteho sloupce (jako standardni vec, tj. > "vyber 3. sloupec")? Nebo je to jen zalezitost kazde konkretni databaze? Ted Ti nerozumim. Muzes provest dotaz do databaze nad tabulkou s 50ti soulpci tak aby se Ti vratil treba 5., 7. a 13. sloupec (provedes SELECT <jmeno 5. sloupce>, <7. sloupce>, <13. sloupce> from ...). Vysledek, tzv. result set, je x radku, kazdy o 3 sloupcich. Postupne musis jednotlive radky nacitat do kurzoru (to je ten fetch) a muzes se odkazovat na dejme tomu 3. sloupec v danem radku result setu (ktery odpovida 13. sloupci v tabulce). Tohle jsou obecne vlastnosti Embedded SQL a SQL. Nektere databaze Ti jeste umozni nechat si do result setu nacpat treba jen prvnich 10 radku vysledku, ale to opravdu jak ktera databaze. > > Potom provedes select pres objevene sloupce. > > Jo, to zni hodne hezky:-), akorat ze tam nebudu mit ten datovy typ. Systemova metadata obsahuji i identifikaci datoveho typu sloupce v tabulce. > > Dalsi moznosti je provest select * a potom pri fetchi testovat, zda se > > bodnota 'vejde' do urciteho datoveho typu (to by bylo univerzalni). > > V tomhle vidim trochu problem: pokud vim, tak dochazi k implicitni konverzi. > Sice dostanu nastavenej priznak, ze se mi to neveslo, ale to se mi muze stat > jak u textovyho retezce, tak i u data prepisovanyho na text, ne? Jak tyhle > dve veci od sebe oddelim? Na druhou stranu pro moje potreby by mi stacilo > odlisovat pouze mezi dvema datovymi typy: int a real. Testovat ve spravnem poradi :-) Nejdrive Int a kdyz se to do nej nevejde, tak je to real... > > > P.S. Stacilo by mi, kdybych dostal celej radek jako textovej retezec... > > BTW a neda se nejak docilit aspon tohohle? Nektere databaze umoznuji provadet konverze datovych typu na strane serveru. Ale musis pro to znat nazev sloupce tabulky. Nejde udelat 'SELECT CONVERT(CHAR(50), *) FROM tabulka', ale pouze 'SELECT CONVERT(CHAR(50), sloupec_1), CONVERT(CHAR(50), sloupec_2),... FROM tabulka) Ale pochybuju, ze by Oracle a PostgreSQL meli stejne konvertovaci funkce (resp., ze PostgreSQL vubec nejake ma ;-))). > snake > P.S. to Pajasoft: Pajiku, diky, ten post zahral na srdci:-) Bye Medved Si vis pacem, para bellum.