Passagem de argumentos por posição e não por nome

Documentação mencionou que vários parâmetros podem ser passados para os procedimentos armazenados em qualquer ordem e que a ligação que você especificar, usando corretamente DBVARNAME mapas Valor atributos para suas variáveis de dados correspondente, mas este não é o caso na prática. Você deve sempre passar parâmetros para procedimentos armazenados em exatamente na mesma ordem em que aparecem na interface do procedimento armazenado, caso contrário, ColdFusion gera uma exceção. Muitos, mas não todos, os servidores de banco de dados pode retornar conjuntos de resultados de procedimentos armazenados. Para aqueles que podem, CFPROCRESULT liga os conjuntos de resultados a consultas ColdFusion, o que os torna disponíveis para uso em suas aplicações ColdFusion apenas como se fossem retornado de uma chamada CFQUERY. E apesar de alguns servidores de banco de dados pode retornar vários conjuntos de resultados de uma chamada CFSTOREDPROC único, o motorista com ColdFusion que acessa o banco de dados deve apoiar essa capacidade também. Para Oracle, você precisa de um driver JDBC Tipo 4, como a que vem padrão com o ColdFusion MX Enterprise, ou o driver OCI livre da Oracle se você estiver executando o ColdFusion MX Professional. Olhar para trás por um momento para o código. Você estará de volta um conjunto único resultado deste procedimento armazenado, e você limita esse conjunto de resultados de uma consulta ColdFusion objeto GetGeorgiaCompanies nomeado usando a tag CFPROCRESULT seguinte:

  

CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS recCompany TIPO IS RECORD (% TYPE vCompanyName Company.CompanyName, vZipCode Company.ZipCode% TYPE); recEmployee TIPO IS RECORD (% TYPE vLastname Employee.Lastname, vFirstname employee.firstname% TYPE); TIPO curCompanies IS REF recCompany CURSOR RETURN; curEmployees TIPO IS REF CURSOR RETURN recEmployee; sp_GetCompaniesEmployees PROCEDIMENTO (EM vState Char, vName EM Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END;
/ CREATE OR REPLACE PACKAGE BODY pkg_CompaniesEmployees AS sp_GetCompaniesEmployees PROCEDIMENTO (EM vState Char, vName EM Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees) AS BEGIN OPEN rsCompanies FOR SELECT CompanyName, ZipCode FROM Empresas WHERE State = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC; OPEN rsEmployees FOR SELECT FirstName, LastName FROM Employee WHERE LastName LIKE sp_GetCompaniesEmployees.vName | | 'ORDER%' BY Sobrenome ASC, Nome ASC; sp_GetCompaniesEmployees END; pkg_CompaniesEmployees END; /

Primeiro, um pacote Oracle é apenas o seu nome indica: um grande pacote ou recipiente para componentes individuais, neste caso, quatro definidos pelo usuário tipos de dados e um procedimento armazenado. Um pacote tem duas partes: um cabeçalho, onde definidos pelo usuário tipos de dados e as interfaces em quaisquer procedimentos armazenados e funções contidas no pacote são definidas, eo corpo, onde os procedimentos armazenados e as próprias funções são programadas. Assim, a primeira tarefa na criação de um pacote Oracle é a definição de sua interface, o que você faz usando o seguinte código:

CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS recCompany TIPO IS RECORD (% TYPE vCompanyName Company.CompanyName, vZipCode Company.ZipCode% TYPE); recEmployee TIPO IS RECORD (% TYPE vLastname Employee.Lastname, vFirstname employee.firstname% TYPE); TIPO curCompanies IS REF recCompany CURSOR RETURN; curEmployees TIPO IS REF CURSOR RETURN recEmployee; sp_GetCompaniesEmployees PROCEDIMENTO (EM vState Char, vName EM Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END; /

Mas, para ver exatamente o que deve conter, no cabeçalho, você precisa olhar para a frente, no corpo do pacote Oracle para o cursor real que contém o primeiro conjunto de resultados da consulta, como segue:

RsCompanies OPEN FOR SELECT CompanyName, ZipCode FROM Empresas WHERE State = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC;

Cada linha recuperados para este cursor contém duas colunas da tabela Empresa: CompanyName e ZipCode, o que define a dimensão da variável de cursor que faz referência a este cursor. Em seguida, você precisa de um tipo de dados que é desta dimensão. Felizmente, a Oracle tem a capacidade de criar usuário complexos tipos de dados definidos chamadas registros. Você aproveitar esta potencialidade e criar um tipo de dados de discos chamada recCompany que detém a ZipCode CompanyName e colunas de cada linha recuperada da tabela Empresa, como segue:

RecCompany TIPO IS RECORD (% TYPE vCompanyName Company.CompanyName, vZipCode Company.ZipCode% TYPE); 

Os elementos constitutivos do tipo de dados recCompany também devem ter seus tipos de dados definidos. Appending% TYPE retorna dados para um elemento de seu tipo de dados, para a definição recorde anterior é equivalente ao seguinte código:

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

Depois de ter um tipo de dados da mesma dimensão que as linhas a serem incluídas pelo cursor, você pode definir uma variável de cursor para se referir ao cursor, da seguinte forma: TIPO curCompanies IS REF CURSOR RETURN recCompany; que esta definição está dizendo é TIPO "Definir uma variável cursor nomeado curCompanies que retorna linhas que têm a mesma dimensão que o tipo de dados recCompany." Você repete a mesma programação para a variável de cursor segunda-curEmployees e você está pronto para passar para a interface do cabeçalho do pacote em o procedimento armazenado. A interface do procedimento armazenado que retorna os dois conjuntos de resultados é semelhante à que os procedimentos armazenados que você criou, na medida em que contém parâmetros de tipos específicos de dados. Você declarar dois parâmetros de entrada que são usados nas cláusulas WHERE de suas duas consultas, além de você declarar dois parâmetros de saída dos dados REF CURSOR tipos que você definiu como segue:

rsCompanies OUT curCompanies, rsEmployees OUT curEmployees

O bloco de código inteiro que define a interface para o procedimento armazenado é o seguinte:

Sp_GetCompaniesEmployees PROCEDIMENTO (EM vState Char, vName EM Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees);

Ele define a interface do sp_GetCompaniesEmployees procedimento armazenado. Finalmente, você tem o seguinte código:

Pkg_CompaniesEmployees END; /

Conclui que a definição formal da interface no pacote Oracle pkg_CompaniesEmployee.

um artigo submetido por Jan Hardy


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Passagem de argumentos por posição e não por nome" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 443 users browsing the articles directory