2011-09-01 22 views
14

Traté de ver la diferencia entre el procedimiento pl/sql y la función y encontré el enlace http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030. Primero déjame decirte lo que un desarrollador generalmente hace con el procedimiento pl/sql y la funciónPL/Sql procedimiento vs función?

1) Quería obtener un cierto valor de retorno. Puede lograrlo tanto con la función como con el procedimiento. Con la función si quiere devolver un único valor, puede usar la declaración de devolución. Si desea devolver múltiples valores, puede lograrlo con el parámetro inout. De forma similar, puede obtener el valor de retorno con el parámetro inout from procedure (no con declaración de devolución)

Pero no hace ninguna diferencia para el desarrollador mientras sea capaz de alcanzar su intentención con declaración de retorno o parámetro inout.

por lo que aquí también pueden reemplazarse entre sí.

2) Puede usar DML en Función y procedimiento. Entonces aquí también puede usar cualquiera de estos para cambiar el estado de databse.

Así que no obtengo ningún razonamiento concreto sobre cuál utilizar, ya que ambos pueden reemplazarse entre sí.

La única razón por la que encontré razonable hasta cierto punto es que las funciones se pueden llamar desde SQL, el procedimiento no puede

Podría alguien explicar cuál usar cuándo y por qué?

+0

Véase también [Funciones vs Procedimientos almacenados] (https://forums.oracle.com/forums/thread.jspa?messageID=547397) en Oracle.com – Vache

+0

@Mohit - Creo que se ha formulado una pregunta similar antes . Posible Dup http://stackoverflow.com/questions/1179758/function-vs-stored-procedure-in-sql-server –

+0

@Vache encontré esta declaración Hay una diferencia más entre el procedimiento almacenado y las funciones que almacenan procedimientos compilados únicamente una vez y puede repetirse una y otra vez sin compilarse cada vez, esto mejora el rendimiento y ahorra tiempo; por otro lado, las funciones se compilan cada vez que se llaman en https://forums.oracle.com/forums/thread.jspa?messageID = 547397 no estoy seguro si es realmente cierto? –

Respuesta

8

Ya ha encontrado la diferencia principal. Usted crea una función si desea usarla en SQL. Crea un procedimiento, cuando quiere usarlo solo en PL/SQL.

+0

Así que puedo asumir que siempre debo usar el procedimiento hasta que, a menos que quiera usarlos en la consulta SQL –

+7

, creo que es una buena regla empírica. Lo expresaría de forma un poco diferente: si necesita transformar cero o más valores de entrada en un valor de salida, use una función. Si desea manipular datos en la base de datos, use un proceso almacenado. –

+0

También usaría una función si solo quiero usar PL/SQL. De esta manera, si necesito reutilizar la lógica en SQL en el futuro, es completamente trivial. El uso de procedimientos tiene una sola ventaja: le permite devolver más de un parámetro. – borjab

3

Lo que hago. Use funciones si no hay efectos secundarios, procedimientos de lo contrario.

Además, solo las funciones pueden ser "puras" (adecuadas para índices de función) y "pipeline".

1

Hay dos diferentes principal:

1:Use Procedure to take some action. But use function to return some value. 
2:You can call function from sql query but Procedure can't. 
3:Best practice to use Procedure then function if possible. 

Gracias.

1

un procedimiento y una función tienen la misma estructura, excepto que:

Un encabezado de la función debe incluir una cláusula RETURN que especifica el Tipo de datos del valor de retorno. Un encabezado de procedimiento no puede tener una cláusula RETORNO.

Una función debe tener al menos una instrucción RETURN en su parte ejecutable. En un procedimiento, la declaración RETURN es opcional. Para más detalles, vea Declaración de DEVOLUCIÓN.

Para obtener más información, consulte: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDDCFHD

+0

Sí, creo que esta es la mejor respuesta. También debe pensar en usar funciones cuando no desee usar los parámetros del modo OUT e IN OUT. Si hay alguna razón para usar estos parámetros, debe pensar seriamente en utilizar un procedimiento almacenado. – Rattlesnake

0

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#i4079

general de PL/SQL subprogramas Un subprograma PL/SQL es un bloque/SQL denominada PL que se puede invocar con un conjunto de parámetros. Un subprograma puede ser un procedimiento o una función. Normalmente, utiliza un procedimiento para realizar una acción y una función para calcular y devolver un valor.

Cuestiones relacionadas