Citat:
darkosos:da li ima nesto sto moze da garantuje da ce u oba slucaja result set biti isti?
Ne postoji ništa što može da ti garantuje da će redosled slogova (tj. result set, ako tabela u slučaju iz tvog selecta ima više od 1000 slogova) biti isti.
To važi za Oracle i za svaku drugu relacionu bazu i nikada neće biti promenjeno.
Tabela je po definiciji skup slogova (a skup je neuređen).
Može se zamisliti hiljadu scenarija zašto je to tako. Kao prvo, način na koji baza čita slogove u slučaju tvog upita nije dokumentovan. Na primer, kod Oracle baze, optimizator će napraviti neki execution plan i odlučiti kako da pristupi blokovima iz baze. Neki od tih blokova biće na disku, neki u data bufferu. Između dva čitanja baze neki blokovi u data bufferu će biti izbačeni, pa će svaki upit imati drugačiji physical IO u odnosu na logical IO. Upit može da ima PARALLEL EXCUTION pa će paralelni procesi različitom brzinom i različitim redosledom da čitaju blokove. Disk kontroler može da ima optimizacione potprograme koji će blokove sa diskova čitati u različitom redoslodu u zavisnosti od trenutne pozicije glava (znači redosled čitanja blokova sa diska ne zavisi samo od tog jednog upita nego od svih procesa na serveru koji pokušavaju da pristupe disku).
Možeš da probaš tvoj upit 1000 puta i on može 999 puta da da isti result set, ali će se desiti da bar jednom ne uradi na isti način. Ako sad testiraš program u potpunoj izolaciji od ostatka sveta, sve ostalo pogasiš, onda će možda i svih 1000 testova dati isti rezultat, ali probaj to na živom sistemu i onda nemaš nikakvu garanciju.