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.

Search the boards