For at bruge hqc's eksempel, mener du så noget i stil med følgende ?
CREATE VIEW <viewnavn> AS SELECT CASE WHEN fx_Prod_Rap_Status (XX.DateTime, YY.Line) = 'SET' THEN '1' ELSE NULL END kolonne1, CASE WHEN fx_Prod_Rap_Status (XX.DateTime, YY.Line) = 'PRC' THEN '0' ELSE NULL END kolonne2, ....osv FROM xx, yy WHERE ..<en eller anden join condition>
Som jeg læser koden foretager jeg det samme funktionskald flere gange, hvor mit mål er kun et kald. Og derefter indsætter jeg værdien i en variabel, som jeg kan lave en case på.
Optimizeren er ikke "noget man finder". Den sørger for den optimale søgevej til de data der efterspørges - kort fortalt, men ellers er det et ret omfattende emne du er inde på ...... I relation til ovenstående menes blot at Oracle formentlig selv finder ud af at det ikke er nødvendig at kalde den samme funktion 4 gange med de samme parametre. Jeg ville nok sige "muligvis" isf. "formentlig", men hvis det er en simpel funktion og som udføres relativt få gange er det ligegyldig, men hvis du vil være sikker på at den kun udføres een gang, brug da inline view som beskrevet (se selvfølgelig bort fra sidste tomme select)
Meget kort fortalt, så er optimizeren den del af Oracle, der beslutter hvorledes et givent statement udføres, hvilke indexes der skal bruges, i hvilken rækkefølge tabellerne skal læses, osv. Normalt behøver man ikke at bekymre sig om optimizerens virkemåde, men man KAN forsøge at hjælpe den med de såkaldte 'hints'.
Hvad hgc's kode angår, så select'en i sidste linie nok en tastefejl... (han har i øvrigt ret - hans inline view vil, alt andet lige, køre hurtigere...)
Burde du ikke lukke den her, og gi' hgc nogen point?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.