SQL ciklus erre a problémára hogyan?

SQL ciklus erre a problémára hogyan?
2021-08-17T15:36:38+02:00
2021-08-26T10:09:26+02:00
2022-08-12T04:15:34+02:00
splash05
Ezt szeretném megvalósítani, de sajnos nem tudom milyen parancsokat használjak:

Definiálok egy fix kollekciót melynek értékei (11,28,56,91)

Majd a select * from tablename{i}  utasításon végigmenni egy for ciklussal, ahol az i a kollekció elemeit helyettesíti be a táblanévbe, tehát 4 tábla elemeit akarom megjeleníteni, amelyeknek ez a neve:
tablename11, tablename28, tablename56, tablename91
És mondjuk minden tábla tartalmaz 10 sor, így nyilván 40 sort fogok megjeleníteni.
Mutasd a teljes hozzászólást!
Még egyszer: olyan SQL kifejezés nincs, amibe dinamikusan tudsz táblaneveket beküldeni. Az SQL utasítást dinamikusan kell összeraknod (valami olyasmi végeredményed lesz, mint amit az előző hozzászólásomban írtam). Ha megvan az utasítás, akkor PL/SQL környezetben EXECUTE IMMEDIATE. Más környezetben másképp tudod átadni az SQL utasítást, de ehhez el kéne árulnod hogy hol fut a kódod (milyen nyelvű kód és milyen könyvtárral éri el az adatbázist).
Mutasd a teljes hozzászólást!

  • Nem világos, hogy mit jelent a "fix kollekció". Örökre fixen ezt a négy elemet kell? Vagy dinamikusan változik valamilyen feltétel alapján?

    Ha tényleg fix, vagyis mindig ez a négy tábla kell, akkor:

    SELECT * FROM tablename11 UNION ALL SELECT * FROM tablename28 UNION ALL SELECT * FROM tablename56 UNION ALL SELECT * FROM tablename91
    Ha "menet közben" kell eldönteni, akkor kénytelen leszel az SQL-t is dinamikusan összeállítani, mivel a táblanevek nem jöhetnek változóból. Ha tárolt eljárásból kell, akkor az EXECUTE IMMEDIATE lesz a barátod. Ha valami külső kódból éred el az adatbázist, akkor ott valószínűleg már megvannak az eszközök arra, hogy dinamikusan felépíts egy sztringet, aztán elküldd az adatbázisnak végrehajtásra.

    Szerk: De az, hogy számozott tábláid vannak, erősen azt sugallja, hogy a séma megérett az áttervezésre. Persze a gyakorlatban erre nincs mindig reális lehetőség, de ha még kezdeti fázisban vagy, érdemes átgondolni hogy nem lehetne-e ezt okosabban csinálni.
    Mutasd a teljes hozzászólást!
  • Bocsi, a fix-et úgy értettem, hogy egy sima kollekció. Természetesen lehet módosítani az értékeket. Azért kellene, mert a 4 tábla hasonló, de eltérő felépítésű attribútumlistát tartalmaz. 
    Igazából csak a szintaxisára lennék kíváncsi.
    Mutasd a teljes hozzászólást!
  • Még egyszer: olyan SQL kifejezés nincs, amibe dinamikusan tudsz táblaneveket beküldeni. Az SQL utasítást dinamikusan kell összeraknod (valami olyasmi végeredményed lesz, mint amit az előző hozzászólásomban írtam). Ha megvan az utasítás, akkor PL/SQL környezetben EXECUTE IMMEDIATE. Más környezetben másképp tudod átadni az SQL utasítást, de ehhez el kéne árulnod hogy hol fut a kódod (milyen nyelvű kód és milyen könyvtárral éri el az adatbázist).
    Mutasd a teljes hozzászólást!
  • szia, mi az adatbázis, mi a futtató környezet? (pl programozási nyelv, stb)

    Csak így magában az SQL nem támogatja, ahogy a fenti hozzászóló írja, kelleni fog mellé valami ami a ciklusodat kezeli.

    Ha fixen tudod a ciklust még a unionnal próbálkozhatsz, hogy 

    SELECT * FROM table1
    UNION
    SELECT * FROM table2
    UNION
    SELECT * FROM table3
    UNION
    SELECT * FROM table4
    UNION
    SELECT * FROM table5

    de ez sem ciklus hanem egyszerre kérdezi le az egészet, és a tábláknak a szerkezetének ugyanannak kell lennie.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd