2 Replies Latest reply on Nov 25, 2017 2:30 AM by L. Fernigrini

    Funciones y Procedimientos

    OmarACY

      Dejando de lado que las funciones regresan un valor y los procedimientos no, en que casos es conveniente usar uno u otro, ya que como respuesta en los procedimientos también podemos regresar con un parámetro OUT, cuales serian los casos en los que ustedes usarían uno u otro?

        • 1. Re: Funciones y Procedimientos
          L. Fernigrini

          Algunas diferencias a destacar (asumiendo que las funciones son funciones comunes y no pipelined):

           

          1) Las funciones (ya sean provistas por Oracle o definidas por el usuario) pueden incluirse dentro de una sentencia SQL (SELECT, UPDATE, DELETE, etc.) mientras que los procedimientos no pueden ser incluidos como parte de una sentencia SQL.

           

          2) Las funciones devuelven 1 y sólo 1 valor, ya sea escalar (1 fecha, 1 número, etc.) o un registro o array, mientras que los procedimientos pueden tener 0, 1 o N parámetros de salida. Las funciones también pueden tener parámetros de salida (aunque es algo muy poco utilizado), en cuyo caso no se pueden utilizar en sentencias SQL.

           

          Aquí hay un post (en ingles) donde se discute el mismo tema, la explicación de las diferencias de la única respuesta es muy completa:

           

          Difference between stored procedure and Function

           

          En cuanto a para que utilizaría cada una de ellas, básicamente usaría:

           

          a) Las funciones cuando se desea encapsular código que realiza algún calculo o búsqueda que se utiliza frecuentemente y necesito incluir dentro de sentencias SQL. Por ejemplo, dado un código de producto y un código de cliente, una función puede calcular el precio unitario de dicho producto para el cliente en particular, tomando el precio estándar de la tabla de productos, y teniendo en cuenta las condiciones impositivas, descuentos, etc. del cliente.

           

          b) Los procedimientos para encapsular código que permita realizar operaciones o procesos que requieren múltiples pasos y son utilizados desde distintos lugares. Por ejemplo, puedo tener un procedimiento llamado ActualizarStock, que recibe un tipo (Factura, Nota de Crédito, Remito, etc) y nro de comprobante como entrada, y realiza las siguientes operaciones:

          1. Recorre los ítems del comprobante, actualizando la cantidad en stock en la tabla de stock, restando sumando o la cantidad de cada ítem del comprobante al stock de cada producto en la sucursal.
          2. Controla que el stock restante en la sucursal sea superior al mínimo establecido por sucursal de ese producto o tipo de producto. De no ser así, genera un pedido de reposición a Casa Central.
          3. Controla que el stock restante en Casa Central (en caso de de haber realizado un pedido de reposición) sea superior al mínimo establecido para la casa central. De no ser así, genera un pedido de compra al proveedor del producto (o pedidos de cotización a cada proveedor, su hubiera mas de uno)

           

          En este ejemplo, realizo el mismo conjunto de operaciones cada vez que se genera un comprobante. Puedo ir por distintos "caminos" dentro del mismo procedimiento, incluso ejecutando otros procedimientos (por ejemplo, el generar pedido de reposición, orden de compra o cotización serían seguramente tres procedimientos distintos que se llaman desde el principal, pero también podrían ser llamados directamente desde el modulo de compras de mi sistema sin que sea "disparado" automáticamente por una operación de venta).

           

           

          Saludos,

           

          Lisandro

          • 2. Re: Funciones y Procedimientos
            L. Fernigrini

            Otro articulo concentrado en explicar como crear procedimientos o funciones, pero que tiene una buena definicion resumida de que es una funcion y que es un procedimiento:

             

            https://www.red-gate.com/simple-talk/sql/oracle/oracle-for-absolute-beginners-part-6-procedures-and-functions/

             

            A procedure is a named PL/SQL block that carries out one or more actions.

            A function is a named PL/SQL block that returns a value.