Diferente velocidad en sql que en pl/sql

Jose
02 de Julio del 2004
Tengo la siguiente select que si la lanzo directamente desde sql es rápida:
SELECT /*+ORDERED*/SUM(B.IMPORTE) IMPORTE,
SUM(B.CANTIDAD * DECODE(A.DIVISIBLE,'N',1,NVL(A.UNIDADU,1)) ) CANTIDAD
FROM CTARTI01 A, GTELEINV01 B, GTPROINV01 P, GTUBICAC01 U
WHERE B.CDEMPRES = U.CDEMPRES AND
B.CODUBIC = U.CODUBIC AND
B.FECHA BETWEEN U.FEEXIINI AND SYSDATE AND
NVL(B.CODPROC,B.CODPROC) = P.CODPROC AND
P.CALCPREC = 1 AND
A.CDEMPRES = B.CDEMPRES AND
A.CODART = B.CODART AND
A.CDEMPRES = 'Z' AND
A.CODART >= 0 AND
DECODE(A.DIVISIBLE,'N',A.CODART,A.CODARTU) = 8003261

pero si la lanzo en un bloque pl/sql o creo una función/procedimiento de base de datos se vuelve lenta (unas 8 veces mas lenta)

¿Existe alguna causa para ello? Yo suponía que trasladar a la base de datos suponía agilizar y no empeorar la respuesta.

Rodolfo Reyes
02 de Julio del 2004
Al mandar a ejecutar codigo desde el SQL Plus, casi siempre te dara un tiempo de repuesta mas rapido, comparado con un procedimiento almacenado o un trozo de codigo en un programa. El utilizar procedimientos almacenados te da mas velocidad que se tuvieras el codigo escrito en el programa. Pero si tu procedimiento fuera mas grande o llamaras al mismo dentro de un ciclo para que se ejecutara N veces, entonces si tendría que ser mar rapido que ejecutarlo en SQL Plus.