Passage de paramètres par la position plutôt que par nom

Divers documents a mentionné que les paramètres de mai être transmis à des procédures stockées dans n'importe quel ordre et que la liaison que vous spécifiez en utilisant correctement les cartes DBVARNAME Valeur confère à leurs variables de base de données correspondantes, mais ce n'est pas le cas en pratique. Vous devriez toujours passer des paramètres à les procédures stockées exactement de la même ordonnance, tels qu'ils apparaissent dans l'interface de la procédure stockée, sinon, ColdFusion lève une exception. Beaucoup, mais pas tous, les serveurs de base de données peut retourner les ensembles de résultats à partir de procédures stockées. Pour ceux qui peuvent, CFPROCRESULT lie ces ensembles de résultats à des requêtes ColdFusion, ce qui les rend disponibles pour les utiliser dans vos applications ColdFusion, comme s'ils étaient de retour d'un appel CFQUERY. Et bien que certains serveurs de bases de données peut renvoyer plusieurs ensembles de résultats à partir d'un seul appel CFSTOREDPROC, le conducteur avec lequel ColdFusion accède à la base de données doit soutenir une telle capacité en tant que bien. Pour Oracle, vous avez besoin d'un pilote JDBC de type 4, tels que celui qui est livré de série avec ColdFusion MX Enterprise, ou la version gratuite d'Oracle OCI pilote si vous utilisez ColdFusion MX Professional. Regarder en arrière un instant sur le code. Vous devrait être de retour un seul ensemble de résultats de cette procédure stockée, et vous avez lié ce jeu de résultats à une requête ColdFusion objet GetGeorgiaCompanies nommés en utilisant le tag CFPROCRESULT suivantes:

  

CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS recCompany TYPE EST RENDU (vCompanyName TYPE Company.CompanyName%, vZipCode Company.ZipCode% TYPE); recEmployee TYPE EST RENDU (vLastname Employee.Lastname% TYPE, vFirstname Employee.Firstname% TYPE); TYPE curCompanies IS REF CURSOR recCompany RETURN; curEmployees TYPE IS REF CURSOR recEmployee RETURN; sp_GetCompaniesEmployees PROCÉDURE (vState DANS Char, vName DANS Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END;
/ CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees CORPS sp_GetCompaniesEmployees PROCÉDURE (vState DANS Char, vName DANS Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees) AS BEGIN OPEN rsCompanies FOR SELECT CompanyName, CodePostal FROM entreprise WHERE State = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC; OPEN rsEmployees FOR SELECT Prenom, Nom FROM Employee WHERE LastName LIKE sp_GetCompaniesEmployees.vName | | 'ORDER% "par ASC Nom, Prénom ASC; sp_GetCompaniesEmployees END; pkg_CompaniesEmployees END /

Tout d'abord, un package Oracle est exactement ce que son nom l'indique: un gros paquet ou un conteneur pour les composants individuels, dans ce cas, quatre types définis par l'utilisateur des données et une procédure stockée. Une série a deux parties: un en-tête, le cas définis par l'utilisateur des types de données et les interfaces dans toutes les procédures stockées et les fonctions contenues dans le paquet sont définis, et le corps, où les procédures stockées et les fonctions se sont programmées. Ainsi, la première tâche dans la création d'un package Oracle est de définir son interface, ce qui vous faire en utilisant le code suivant:

CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS recCompany TYPE EST RENDU (vCompanyName TYPE Company.CompanyName%, vZipCode Company.ZipCode% TYPE); recEmployee TYPE EST RENDU (vLastname Employee.Lastname% TYPE, vFirstname Employee.Firstname% TYPE); TYPE curCompanies IS REF CURSOR recCompany RETURN; curEmployees TYPE IS REF CURSOR recEmployee RETURN; sp_GetCompaniesEmployees PROCÉDURE (vState DANS Char, vName DANS Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END /

Mais pour voir exactement ce que doit contenir l'en-tête, vous devez penser à l'avenir dans le corps du package Oracle au curseur réel qui contient la première série résultat de la requête, comme suit:

OUVERT POUR rsCompanies SELECT CompanyName, CodePostal FROM entreprise WHERE State = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC;

Chaque ligne récupérées dans ce curseur contient deux colonnes de la table de l'entreprise: CompanyName et CP, qui définissent la dimension de la variable de curseur qui fait référence à ce curseur. Ensuite, il vous faut un type de données qui est de cette dimension. Heureusement, Oracle a la capacité de créer des complexes des utilisateurs types de données définis appelés enregistrements. Vous profitez de cette capacité et de créer un type de données nommée RECORD recCompany qui détient la CompanyName et ZipCode colonnes de chaque ligne extraite de la table de l'entreprise, comme suit:

RecCompany TYPE EST RENDU (vCompanyName TYPE Company.CompanyName%, vZipCode Company.ZipCode% TYPE); 

Les éléments constitutifs du type de données recCompany doivent également avoir leurs types de données définis. Appending TYPE% pour atteindre un élément de données retourne son type de données, donc la définition enregistrement précédent est équivalent au code suivant:

RecCompany TYPE EST RENDU (VARCHAR2 vCompanyName (40), VARCHAR2 vZipCode (10));

Après que vous ayez un type de données de la même dimension que les rangs pour être maîtrisé par le curseur, vous pouvez définir un curseur variable pour faire référence au curseur, comme suit: TYPE curCompanies IS REF CURSOR recCompany RETURN; Ce que cette définition de type est dit est , "Définir une variable curseur nommé curCompanies qui retourne des lignes qui ont la même dimension que le type de données recCompany." Vous répétez la même programmation pour la variable-curEmployees deuxième curseur, et vous êtes prêt à passer à l'interface de l'en-tête de paquet en la procédure stockée. L'interface de la procédure stockée qui renvoie vos deux ensembles de résultats est similaire à la procédure stockée que vous avez créé, en ce qu'elle contient des paramètres de types de données spécifiques. Vous déclarez deux paramètres d'entrée qui sont utilisées dans les clauses WHERE de vos deux questions, plus vous déclarez deux paramètres de sortie des types de données REF CURSOR que vous avez défini comme suit:

rsCompanies OUT curCompanies, rsEmployees OUT curEmployees

Le bloc de code en entier qui définit l'interface dans la procédure stockée est la suivante:

Sp_GetCompaniesEmployees PROCÉDURE (vState DANS Char, vName DANS Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees);

Il définit l'interface de la sp_GetCompaniesEmployees procédure stockée. Enfin, vous avez le code suivant:

Pkg_CompaniesEmployees END /

Il conclut par la définition formelle de l'interface dans le paquet pkg_CompaniesEmployee Oracle.

un article présenté par Jan Hardy


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Passage de paramètres par la position plutôt que par nom" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 207 users browsing the articles directory   


  

|