2012-03-24 12 views
6

Soy nuevo en PL/SQL probando algunos ejemplos de práctica.
tengo algunas preguntas acerca de PL/SQL PROCEDURE & FUNCTION:¿cuándo debería ir para el procedimiento o la función en PL/SQL?

Cuando debería ir para los PROCEDURE o FUNCTION?

Medios, cualquier tarea que estoy haciendo uso de FUNCTION la misma tarea va a hacer mediante el uso de PROCEDURE. ¿por qué debería ir a la función? ¿Hay alguna ventaja de FUNCTION sobre el PROCEDURE en PL/SQL?

FUNCTION debe devolver el valor. ¿Es esta la única ventaja para usar una función o hay otras ventajas de las funciones?

Respuesta

5

Una función definida por el usuario, con ciertas limitaciones, se puede utilizar en las sentencias SELECT y en las declaraciones PL/SQL IF, mientras que PROCEDURE no.

Puede SELECT de un FUNCTION es decir CAST como una tabla utilizando tubería y PIPE ROW declaraciones, sino que es una característica avanzada de PL/SQL puede utilizar mucho más tarde.

Consulte la documentación del desarrollador de Oracle en línea, ya que es gratuito y muy buena: Developing and Using Stored Procedures

+0

¿Cuáles son esas limitaciones? un Procedimiento puede hacer todo lo que la función puede y mucho más. por ejemplo, puede devolver una tabla (s) como parámetro (s) de refinctor. Soy escéptico al usar funciones que no podrían arrojar resultados determinísticos, como los parámetros de función que implican fecha/hora. En un procedimiento, no tienes tales limitaciones. Fila de tubería es una de las declaraciones más simples. Su respuesta es más desalentadora que alentar a la audiencia novata. – TonyP

+2

@TonyP Para alguien que no conoce los conceptos básicos de PL/SQL, no voy a ampliar los detalles de la configuración de Function pragma y otros - http://docs.oracle.com/cd/B12037_01/appdev.101/b10807 /13_elems039.htm- Mi respuesta para proporcionar orientación para el aprendizaje adicional y no una ventanilla única Clif toma nota de la versión de todo. – tawman

+0

@jonearles Gracias por la función editar en pipeline * – tawman

2
  1. Una función devolverá un valor, tienen A "value" ser una de muchas cosas, incluyendo mesas de PL/SQL, cursores árbitro etc. Agregando para eso, es posible usar una función en las declaraciones de SQL, mientras que los procedimientos no pueden ser utilizados.
  2. Los procedimientos se utilizan para ejecutar la lógica de negocios, donde podemos devolver varios valores del procedimiento utilizando los parámetros OUT o IN OUT.
  3. Personalmente utilizo la función para los cálculos - Por ejemplo: verificar una condición específica, como recuperar un valor basado en la condición, verificar la condición para verdadero o falso.
  4. Puede tener declaraciones DML (insertar, actualizar, eliminar) en una función. Pero no se puede llamar a dicha función en una consulta SQL. * Por ejemplo: si tiene una función que está actualizando una tabla, no puede invocar esa función en ninguna consulta SQL.

    select myFunction(field) from sometable; --will throw error. 
    

Es en su opción de utilizar procedimiento o función que depende de su requisito y confortabilidad.

+0

Puede usar DML y DDL en una función utilizada en una instrucción SQL, pero necesita declararla AUTONOMOUS_TRANSACTION. (Aunque probablemente sería una muy mala idea hacer tal cosa.) –

+2

punto 5 es incorrecto. Puede hacer ddl en las funciones de la misma manera que en los procedimientos. –

+0

@FlorinGhita: Gracias, voy a editar esto en mi respuesta –

0

ventajas principales:

  1. función que debe devolver un valor en tanto que el procedimiento puede o no puede devolver un valor.
  2. Función utilizada principalmente para calcular valores. Donde como procedimiento se usa principalmente para la lógica comercial ejecutiva.
  3. Función para recuperar un valor donde como procedimiento para manupliate a values.
  4. Función debe devolver solo un valor, pero acepta muchos tipos de devolución.
-1

Hay más ventajas de utilizar el procedimiento sobre la función:

  1. Si queremos ejecutar la instrucción SQL de forma dinámica utilizando ejecutará la sentencia inmediata entonces usamos Procedimiento .No se puede hacer dentro de la función.

  2. El procedimiento se puede ejecutar de forma independiente, mientras que una función debe ser parte de una instrucción ejecutable, ya que no se puede ejecutar de forma independiente.

-1

función debe devolver un valor que se utiliza en el propósito de cálculo que se utilizan. Función debe devolver solo un valor, pero acepta muchos tipos de devolución. función podemos usar la declaración de selección. procedimiento puede devolver o no un valor. procedimiento es que podemos usar operaciones de dml. procedimiento que podemos ejecutar solo.

+1

Es muy difícil de entender lo que está tratando de decir. –

-3

Por supuesto, puede ejecutar sql dinámico en una función. Escribe una función simple para hacer la prueba y verás que funciona.

Puede utilizar la función o el procedimiento la mayor parte del tiempo. Las diferencias son si desea usarlos en una declaración de SQL o en una declaración de IF y luego usar una función. De lo contrario, use lo que mejor se adapte a usted y la aplicación de llamada.

+0

Lo has entendido mal – Bren

4

Me gustaría aclarar que la respuesta para saber si debe usar un procedimiento almacenado o una función depende completamente de los requisitos de su empresa y del flujo de trabajo de diseño, siempre que tenga claro el objetivo de su programa. Si no está seguro acerca de su objetivo, tal como está su pregunta, no sería útil ninguna cantidad de procedimientos y funciones de codificación.

Debe tener en cuenta que los procedimientos almacenados y las funciones tienen diferentes propósitos en la programación PL/SQL. Estos son los siguientes:

  1. Los procedimientos almacenados:

    a. Los procedimientos almacenados representan bloques con nombre (a diferencia de los bloques anónimos) que son capaces de aceptar parámetros y trabajar en ellos.

    b. Los procedimientos almacenados definen un flujo de trabajo de procedimiento independiente donde puede realizar una serie de DML y/u otras operaciones.

    c. Los procedimientos almacenados no tienen que devolver un valor. Por lo tanto, no se pueden llamar desde dentro de una declaración SQL. Los procedimientos almacenados se deben ejecutar desde un bloque PL/SQL con nombre o anónimo.

    d. Fondo:

    • Un procedimiento no tiene que devolver un valor (Esto también puede ser un demérito).
    • Se puede utilizar para realizar una serie de operaciones DML o DDL (sí, esto es posible a través de SQL dinámico con algunas restricciones).
    • Se puede llamar simplemente como una instrucción independiente desde un bloque PL/SQL. por ejemplo,

      myProcedure (x, y); 
      

    e.Deméritos:

    • No se puede llamar desde una consulta SQL - DML o una declaración SELECT.
    • No se puede utilizar en los índices.
  2. Funciones:

    a. Las funciones se denominan bloques que son capaces de aceptar parámetros y devolver un valor.

    b. Las funciones también definen un flujo de trabajo de procedimiento, pero cuando se usa en sentencias de SQL, no puede realizar ningún DML o DDL.

    c. Una función debe invocarse desde una instrucción SQL o PL/SQL donde se utiliza el valor devuelto por la función, es decir, asignado a una variable, pasado como parámetro, etc.

    d. Méritos:

    • Se puede utilizar en una consulta SQL - DML o una declaración SELECT.
    • Se puede utilizar en índices basados ​​en función si la función es determinista (lo que significa que para un conjunto definido de entradas, la función devuelve el mismo resultado cada vez que se llama).

    e. Deméritos:

    • Si la función que se llama desde una consulta SQL contiene cualquier DML, la consulta falla.
    • Es obligatorio que una función devuelva un valor. Por lo tanto, una llamada a función no puede ser una declaración independiente como una llamada a procedimiento.

Para mayor referencia, visite Oracle Docs.

0

Cuando quiera devolver algún valor y tener que usar ese valor aún más, vaya a la función. Si desea devolver algún valor como resultado final, proceda con el procedimiento.

Cuestiones relacionadas