PLSQL - hoe output tabel als select genereren

Pagina: 1
Acties:

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Ik wil geen dmbsoutout (want dat lukt niet) maar een soort "select * from r_bn" genereren. Hoe pak ik dat het beste aan. Ik heb geen create rechten. Ik wil dus in één keer alle velden als een tabel naar het scherm schrijven, zodat ik die met knippen en plakken kan verder verwerken. Iemand een idee?

DECLARE
r_bn declaraties%rowtype;
cursor c_decl is select distinct bn from declaraties order by bn;
BEGIN
for r_decl in c_decl loop
select * into r_bn from declaraties where declaraties.bn = r_decl.bn;

dbms_output.put_line(r_bn); --- dit deel werkt niet
select * from r_decl ; --- deze truuk werkt dus ook niet

end loop;
END;

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • whoami
  • Registratie: December 2000
  • Nu online
Sorry dat ik het niet snap hoor, maar kan je even wat duidelijker zin?

https://fgheysels.github.io/


  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Sorry, ik zal proberen duidelijker te zijn. Ik heb een record variabele (r_bn) aangemaakt en daar bepaalde gegevens in weggeschreven.
Nu zoek ik alleen nog een manier om het eindresultaat (veldnamen+inhoud) te tonen
Iets als select * from r_bn


Hopelijk iets duidelijker en anders hoor ik het wel :)

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


Verwijderd

hmmm...
kon ff zo snel niet verzinnen hoe dit op te lossen (ik neem aan dat je dit dynamisch wilt)
misschien dat je hier iets aan hebt?

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Dynamisch hoeft niet, ik ben al blij als het werkt en het liefst met simpel soort select.

Maar ik ben bang dat ik een denkfout heb gemaakt. Ik dacht dat het eindresultaat uit meerdere geselecteerde rijen zou bestaan. Maar ik begin te vermoeden dat die recordvariabele "r_decl" aan het eind van de loop Uit 1 regel bestaat (de laatste verwerkingsregel) klopt dat?

In dat geval zal ik het eerst elke rij in een array/virtuele_tabel moeten wegschrijven. Helaas is mijn kennis nog niet zover, komt nog wel :)

Maar stel dat het lukt, dan heb ik in principe een virtuele tabel.
Kan ik dan wel een select * from virtuele_tabel erop loslaten. Of blijft het ingewikkeld?

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Heb je wel 'set serverout on' gedaan?
Dat kan de oorzaak zijn dat dbms_output geen uitvoer geeft.

Who is John Galt?


  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Sorry had ik beter moeten aangeven, dbmsoutput werkt prima.

Ik gebruik toad en dan heb je twee tabbladen onderin je sql venster.
Bij tabblad data komen de resultaten van select x from Y te staan.
Bij tabblad dmbsoutput de resultaten uit een: (declare, begin, end;)

Maar ik wil eigenlijk tussen die begin en end; een select statement proppen en het resultaat van die select op het tabblad data laten verschijnen (indien mogelijk).
Anders moet ik dbmsoutput_putline(r_bn.veld1 || r_bn.veld2 || r_bn.veld3 ||... r_bn.veld25 ) doen en dat moet slimmer kunnen lijkt mij.

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ah, we hebben het over TOAD ;)
Wat jij wilt is SQL binnen PL/SQL uitvoeren, dat kan niet.

Who is John Galt?


  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Hm , dat is vervelend, want ik heb wel zoiets nodig.

Kan ik het dan wel in 2 gedeelten opsplltsen 1 procedure die de array genereert. En daarna met daarna een los sql statement en uit de array laten selecteren?

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Kun je er niet gewoon 1 SQL statement van maken?

Who is John Galt?


Verwijderd

Volgens mij wil je iets van:

select *
from declaraties
group by bn
order by bn

Binnen TOAD kun je dan gewoon de query uitvoeren

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
justmental schreef op 03 augustus 2002 @ 00:00:
Kun je er niet gewoon 1 SQL statement van maken?
Ja dat kan, het wordt dan in dit geval een subquerie (of een eventueel een join op 2 tabellen) maar dat is zo verschrikkelijk traag, minimaal 10 minuten of zo.

Dus wilde ik eens met variabalen proberen om te kijken of dat wat uitmaakte en dat lijkt inderdaad heel veel te schelen. Allleen kan ik er dus geen select overheen doen. Hoe ironisch.

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

ErikRo schreef op 03 augustus 2002 @ 09:50:
[...]
Ja dat kan, het wordt dan in dit geval een subquerie (of een eventueel een join op 2 tabellen) maar dat is zo verschrikkelijk traag, minimaal 10 minuten of zo.

Dus wilde ik eens met variabalen proberen om te kijken of dat wat uitmaakte en dat lijkt inderdaad heel veel te schelen. Allleen kan ik er dus geen select overheen doen. Hoe ironisch.
Dan is het toegangspad van je query niet goed.
Misschien is het handiger om die te optimizen.

Who is John Galt?


Verwijderd

Cursors creeeren in SQLServer iig een temptable, en ik denk dat dat op oracle niet anders is, dus dat je daar geen rechten op hebt omdat je ook geen create rechten hebt.

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
justmental schreef op 04 augustus 2002 @ 13:07:
[...]
Dan is het toegangspad van je query niet goed.
Misschien is het handiger om die te optimizen.
Wat bedoel je hier precies mee?
Ik had er al eens een oracle specialist naar laten kijken, maar die zei dat dat normaal was. Omdat hij nou eenmaal 20 miljoen regels uit tabel 1 moet vergelijken met het resultaat van de andere querie over tabel 2. (of de join truuk maakt niet uit)
Hij zegt dus niet het resultaat van Q2 is 19.000.002. Ik pak de index erbij spring in één keer naar regel 19.000.002.
Wat hij wel doet als in de where 19.000.002 zet.

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant

Pagina: 1