Pasar parámetros de posición en lugar de por su nombre

Documentación diversa ha mencionado que los parámetros se puede pasar a los procedimientos almacenados en cualquier orden y que el carácter vinculante que especifique mediante DBVARNAME correctamente mapas de valor de los atributos de su correspondiente base de datos variables, pero este no es el caso en la práctica. Usted siempre debe pasar parámetros a procedimientos almacenados en el mismo orden en que aparecen en la interfaz del procedimiento almacenado, de lo contrario, ColdFusion produce una excepción. Muchos, pero no todos, los servidores de bases de datos pueden devolver conjuntos de resultados de los procedimientos almacenados. Para aquellos que pueden, CFPROCRESULT une los conjuntos de resultados a las consultas de ColdFusion, que pone a disposición para su uso en las aplicaciones de ColdFusion como si fueran devueltos de una llamada CFQUERY. Y aunque algunos servidores de base de datos puede devolver varios conjuntos de resultados de una llamada CFSTOREDPROC único, el conductor con el que accede a la base de datos de ColdFusion debe apoyar esa capacidad también. Para Oracle, se necesita un controlador JDBC de tipo 4, como el que buques de calidad con ColdFusion MX Enterprise, o el controlador de la OCI libre de Oracle si se está ejecutando ColdFusion MX Professional. Mire hacia atrás por un momento en el código. Usted espera que vuelva a un solo conjunto de resultados de este procedimiento almacenado, y te diriges ese conjunto de resultados a una consulta de ColdFusion objeto GetGeorgiaCompanies llamada mediante la etiqueta CFPROCRESULT siguientes:

  

CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS recCompany TIPO ES RECORD (TIPO vCompanyName% Company.CompanyName, vZipCode% Company.ZipCode tipo); recEmployee TIPO ES RECORD (TIPO Employee.Lastname vLastname%, vFirstname% Employee.Firstname tipo); TIPO curCompanies IS REF CURSOR recCompany RETURN; curEmployees TIPO ES REF CURSOR recEmployee RETURN; sp_GetCompaniesEmployees PROCEDIMIENTO (vEstado de Char, vNombre de Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END;
CREATE OR REPLACE PACKAGE BODY pkg_CompaniesEmployees AS sp_GetCompaniesEmployees PROCEDIMIENTO (vEstado de Char, vNombre de Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees) AS BEGIN OPEN rsCompanies FOR SELECT CompanyName, código postal de la Compañía cuando el Estado = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC; OPEN rsEmployees PARA SELECT FirstName, LastName FROM Employee WHERE Apellido LIKE sp_GetCompaniesEmployees.vName | | 'ORDER%' ASC por Apellidos, Nombre ASC; sp_GetCompaniesEmployees END; pkg_CompaniesEmployees END; /

En primer lugar, un paquete de Oracle es precisamente lo que su nombre implica: un gran paquete o contenedor para componentes individuales, en este caso, cuatro definidas por el usuario tipos de datos y un procedimiento almacenado. Un paquete consta de dos partes: una cabecera, donde el usuario define los tipos de datos y las interfaces en los procedimientos almacenados y funciones contenidas en el paquete están definidos, y el cuerpo, cuando los procedimientos almacenados y funciones están programadas a sí mismos. Así que la primera tarea en la creación de un paquete de Oracle es definir su interfaz, la que se hace mediante el siguiente código:

CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS recCompany TIPO ES RECORD (TIPO vCompanyName% Company.CompanyName, vZipCode% Company.ZipCode tipo); recEmployee TIPO ES RECORD (TIPO Employee.Lastname vLastname%, vFirstname% Employee.Firstname tipo); TIPO curCompanies IS REF CURSOR recCompany RETURN; curEmployees TIPO ES REF CURSOR recEmployee RETURN; sp_GetCompaniesEmployees PROCEDIMIENTO (vEstado de Char, vNombre de Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END; /

Pero para ver exactamente lo que debe contener la cabecera, es necesario mirar hacia el futuro-en el cuerpo del paquete de Oracle para el cursor real que contiene el primer conjunto de resultados de la consulta, como sigue:

OPEN rsCompanies FOR SELECT CompanyName, código postal de la Compañía cuando el Estado = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC;

Cada fila recuperado en este cursor contiene dos columnas de la tabla de la empresa: CompanyName y código postal; que definir la dimensión de la variable de cursor que hace referencia este cursor. Después, usted necesita un tipo de datos que es de esta dimensión. Afortunadamente, Oracle tiene la capacidad de crear el usuario complejos tipos de datos definidos llamados registros. Tomar ventaja de esta capacidad y crear un tipo de datos ACTA recCompany nombre que tiene el CompanyName y columnas Código postal de cada fila recuperan de la tabla de la empresa, como sigue:

RecCompany TIPO ES RECORD (TIPO vCompanyName% Company.CompanyName, vZipCode% Company.ZipCode tipo); 

Los elementos constitutivos del tipo de datos recCompany también deben tener sus tipos de datos definidos. Anexar% TYPE devuelve los datos a un elemento de su tipo de datos, por lo que la definición de registro anterior es equivalente al siguiente código:

RecCompany TIPO ES RECORD (VARCHAR2 vCompanyName (40), VARCHAR2 vZipCode (10));

Después de que haya un tipo de datos de la misma dimensión que las filas a ser contenida por el cursor, se puede definir una variable de cursor para hacer referencia a el cursor, de la siguiente manera: TIPO curCompanies IS REF CURSOR RETURN recCompany; Lo que esta definición de tipo está diciendo es "Definir una variable de cursor llamado curCompanies que devuelve las filas que tienen la misma dimensión que el tipo de datos recCompany." repetir la misma programación de la variable de cursor segunda curEmployees y está listo para pasar a la interfaz de la cabecera del paquete en la el procedimiento almacenado. La interfaz del procedimiento almacenado que devuelve a sus dos conjuntos de resultados es similar a los procedimientos almacenados que haya creado, ya que contiene los parámetros de tipos de datos específicos. Usted declara dos parámetros de entrada que se utilizan en las cláusulas WHERE de sus dos preguntas, más que declarar dos parámetros de salida de los tipos REF CURSOR datos que se definen como sigue:

rsCompanies OUT curCompanies, rsEmployees OUT curEmployees

El bloque de código completo que define la interfaz en el procedimiento almacenado es la siguiente:

Sp_GetCompaniesEmployees PROCEDIMIENTO (vEstado de Char, vNombre de Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees);

Define la interfaz de la sp_GetCompaniesEmployees procedimiento almacenado. Por último, usted tiene el siguiente código:

Pkg_CompaniesEmployees END; /

Llega a la conclusión de la definición formal de la interfaz en el paquete de Oracle pkg_CompaniesEmployee.

un artículo presentado por Jan Hardy


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Paso de parámetros de posición en lugar de por su nombre", fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 336 users browsing the articles directory