Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sta moze da vrati stored procedura ?

[es] :: Oracle :: Sta moze da vrati stored procedura ?

[ Pregleda: 3588 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gdjuric
Goran Djuric
Sabac

Član broj: 66464
Poruke: 32
212.200.144.*

Sajt: www.amalteja.co.yu


Profil

icon Sta moze da vrati stored procedura ?09.01.2007. u 15:34 - pre 209 meseci
Prelazim iz sveta MS-SQL-a u Oracle i pokusavam da prenesem iskustva ali neke stvari ipak sasvim drugacije funkcionisu... Evo konkretnog pitanja, zeleo sam da napisem stored proceduru kojoj prosledjujem neke parametre a koja vraca odgovor kao bilo koji select upit, to radim iz svog C# programa, ali svejedno je odakle pozivam st.proc. ... zar ne ?

Medjutim, primeri koje sam pogledao svugde opisuju samo vracanje skalarnih vrednosti a ne tabele kao izlazne vrednosti iz stored procedure?! Pomagajte, verovatno je u pitanju banalnost ...

Ja sada u stor. proc. punim neku definisanu tabelu, a potom sledecom komandom citam sadrzaj te namenski napravljene tabele za privremeno spremanje rezultata. Nemoguce da je to tako zamisljeno ...

hvala.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Sta moze da vrati stored procedura ?09.01.2007. u 18:14 - pre 209 meseci
Mozes vratiti npr. REF CURSOR, objekt, neku PL/SQL tabelu i sl.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

gdjuric
Goran Djuric
Sabac

Član broj: 66464
Poruke: 32
212.200.144.*

Sajt: www.amalteja.co.yu


Profil

icon Re: Sta moze da vrati stored procedura ?11.01.2007. u 14:55 - pre 209 meseci
Hmmm ... mozda nisam bio jasan, u MSSQL-u moze da se u stored proceduri bez problema stavi jednostavan select upit i procedura to vrati bez problema. Ako zelis parametre ... opet nema problema, dobijes odgovor u obliku recordset-a i to offline obradjujes.

Oracle jednostavno ne prihvata obican select u stored proceduri! Da li to znaci da stored proceduru koristim da obavi posao i rezultat smesti u neku privremenu tabelu, a potom postavim upit da procitam sadrzaj te privremene tabele, ili sam promasio nesto totalno jednostavno ?

Dakle, kako formirati i koristiti parametrizovane upite u Oracle-u?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Sta moze da vrati stored procedura ?11.01.2007. u 16:25 - pre 209 meseci
Čovek ti je lepo odgovorio, ali se ti nisi potrudio da pogledaš literaturu.
Ono što MS SQL zove record set to je u Oracle svetu REF CURSOR.

Drugi deo pitanja nje jasan - kakav to upit želiš da ti Oracle uradi: da li se samo radi postavljanje parametara u predefinisane WHERE klauzulue ili želiš da dinamički napraviš upit koji se u Oracle PL/SQL bloku može izvršiti preko EXECUTE IMMEDIATE komande.

Budi konkretniji pa ćeš i dobiti bolje odgovore.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.it-austria.net.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Sta moze da vrati stored procedura ?11.01.2007. u 16:37 - pre 209 meseci
Da si procitao barem osnovne informacije o REF CURSOR-u, shvatio bi zasto sam ga naveo.
Pored REF CURSOR-a mozes koristiti i PIPELINED funkcije, record set u obliku PL/SQL tabele i td.

Kad procitas informacije o tome, javi mi da li sam dobro shvatio tvoje pitanje ili ne.

Nema na cemu.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

gdjuric
Goran Djuric
Sabac

Član broj: 66464
Poruke: 32
212.200.144.*

Sajt: www.amalteja.co.yu


Profil

icon Re: Sta moze da vrati stored procedura ?12.01.2007. u 08:06 - pre 209 meseci
ok, ok ... nemojte se odmah ljutiti :) , hvala u svakom slucaju na dobroj nameri da mi pomognete.

Ref cursor sam registrovao kao deo odgovora naravno, ali po analogiji sa MS-SQL svetom sam mislio da mi to ne treba posto ne zelim pojedinacni pristup slogovima, vec mi jednostavno treba odgovor iz st.procedure kao iz obicnog select upita. Pa zar treba da se bakcem sa cursor-om da bi dobio rezultat koji zelim, da sekvencijalno citam i bez ikakve dodatne obrade punim lokalnu tabelu?

Hajde da ja sad ne postavljam pitanje i sam sebi dajem odgovor, vec jednostavno evo konkretnog primera, pa mi recite iz vaseg iskustva kakvo bi vi resenje primenili:

PRIMER : Zelim da deo poslovne logike koja sluzi za izvestaj o prometu odredjenog artikla (donekle slozeniji upit koji kupi podatke iz vise tabela i ima parametar sifra artikla) prebacim iz aplikacije na nivo baze podataka. Recimo, zelim da koristim ovakvo resenje iz razlicitih aplikacija (klasicna i web). U c# programiranju koristim ado.net klase i to je jednostavno, definisem dataset i u njemu tabelu koju napunim pozivom sql komande koja moze biti obican select upit, a moze biti i poziv st.procedure. Problem je sto u Oracle-u sadrzaj st.procedure ne moze da bude obican select upit, ako sam ja dobro razumeo!

Hvala unapred.

Citam naravno literaturu ali licno iskustvo je neprocenjivo pa sam postavio pitanje nadajuci se skracenju procesa :), pitanje je zapravo zasto je nesto tako jednostavno u MSSQL-u nemoguce u Oracle svetu? - Stored procedura koja sadrzi na primer: 'select * from dual' ?
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.it-austria.net.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Sta moze da vrati stored procedura ?12.01.2007. u 09:07 - pre 209 meseci
Ok, sad si bolje razjasnio svoju situaciju. :)

Ja za vracanje kompletnog record seta koristim "user defined" PL/SQL tabele, a evo ti ukratko i ugrubo jedan primjer:

Code:

CREATE OR REPLACE PACKAGE pkGetRecordSet
AS
TYPE typTabelaSaArtiklima IS TABLE OF artikli%ROWTYPE;

PROCEDURE spGetRecordSet(pSifraArtikla IN VARCHAR2, pRecordSet OUT typTabelaSaArtiklima);

END pkGetRecordSet;
/

CREATE OR REPLACE PACKAGE BODY pkGetRecordSet
AS

CREATE OR REPLACE PROCEDURE spGetRecordSet(pSifraArtikla IN VARCHAR2, pRecordSet OUT typTabelaSaArtiklima)
AS
  ltArtikli typTabelaSaArtiklima;
BEGIN
  SELECT *
    BULK COLLECT INTO ltArtikli
    FROM artikli
  WHERE sifra_artikla = pSifraArtikla;

  pRecordSet := ltArtikli;
EXCEPTION
  WHEN OTHERS THEN NULL; -- ili vrati neku gresku, po volji ti ...
END spGetRecordSet;

END pkGetRecordSet;
/



i onda pozivas proceduru sa

Code:

DECLARE
  varijablaZaRecordSet pkGetRecordSet.typTabelaSaArtiklima;
BEGIN
  pkGetRecordSet.spGetRecordSet('ABC123', varijablaZaRecordSet);
END;


Je l' to to sta ti treba?
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

[es] :: Oracle :: Sta moze da vrati stored procedura ?

[ Pregleda: 3588 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.