[ gewra @ 07.02.2008. 11:02 ] @
Treba da napravim procueduru koja vraca dummy podatke i ne kreira nista nad bazom na kojoj je pustena.
U ms sql-u sam to radio sam temp tabelama, tako sto u proceduri kreiram temp tabelu insertujem neke podatke u nju i zatim izvrsim select nad temp tabelom.
Kako to da uradim u oracle-u? Mozda Global Temporary table ili...
Jos jedanput napominjem da nad bazom na kojom pustam procduru ne smem (naravno osim te procedure) da napravim ni jedan objekat...

Hvala, Ivan!
[ aldabic @ 07.02.2008. 12:02 ] @
Ako vec ima global temporary tabela, iskoristi ih. Ako ih neka, ne mozes ih praviti (i to je objekat u bazi)..

Kako mislis dummy podatke? Procedura ne vraca nista kao OUT parametar , nego puni neke druge tabele?

Ja koristim neke global tabele tipa tmp1, tmp2, tmp3, sa kolonama c01-c20 (varchar2), n01-n20 (number), d01-d20 (date), pa ih koristim u raznim programima da nesto izracunam, pripremium report i sl..

[ gewra @ 07.02.2008. 12:46 ] @
Procedura treba da vrati result set tipa
FirstName LastName PersonalId.....
Paja Patak 15695333
Miki Maus 1528669
..............

E sad nigde u bazi ne postoje ovi podaci (jednostavno dummy podaci) i procedura treba da predstavlja neki interfejs prema nekom web servisu, nije ni bitno u ostalom.

Dakle poenta je da ne smem da napravim nikakav objekat koji ce ostati nakon izvrsavanja procedure u bazi osim te same procedure.

u tsql-u je procedura izgledala kao

CREATE PROCEDURE retrieveCustomerDetails
AS
BEGIN
CREATE TABLE #CUSTOMER
(
FirstName varchar(50) NOT NULL,
LastName varchar(50) NOT NULL,
............
)

INSERT INTO #Customer
VALUES('Paja', 'Patak')
.
.
.
SELECT * FROM #CUSTOMER

DROP TABLE #CUSTOMER
END

Dakle ovo mi treba na oracle-u!!!
[ aldabic @ 07.02.2008. 12:52 ] @
Mozes da koristis record:

type proba_record is record (
p_redni_broj number(2),
p_pitanje varchar2(100)
);
type proba_i is table of proba_record index by binary_integer;

procedura:

procedure proba(klijent in number, result in out proba_i) is
cursor c1 is
select redni_broj, pitanje
from proba_tabela;
cur1 c1%rowtype;
i number(4);
begin
open c1;
i:=0;
loop
fetch c1 into cur1;
if c1%notfound then
exit;
end if;
i:=i+1;
result(i).p_pitanje:=cur1.pitanje;
result(i).p_redni_broj:=cur1.redni_broj;
end loop;
close c1;
exception when others then raise_application_error(-20101,sqlerrm);
end;

onda od nekud pozoves proceduru:

DECLARE
bk_data TEST_SCORE.SCORE_I;
BEGIN
test_score.unos_score(klijent, bk_data);
PLSQL_TABLE.POPULATE_BLOCK(bk_data, 'B1'); -- popunis blok u formsu
END;