Übergeben von Parametern nach Position statt nach NamenVerschiedene Unterlagen erwähnt, die Parameter für gespeicherte Prozeduren in beliebiger Reihenfolge übergeben werden können, dass die Bindung, die Sie angeben, indem Sie DBVARNAME korrekt Karten Preis-Attribute auf die entsprechenden Datenbank-Variablen, aber das ist nicht der Fall in der Praxis. Sie sollten jedoch stets die Übergabe von Parametern an gespeicherte Prozeduren in genau der gleichen Reihenfolge, wie sie in der Schnittstelle der gespeicherten Prozedur zu erscheinen, sonst wirft ColdFusion eine Ausnahme. Viele, aber nicht alle können Datenbank-Server Ergebnismengen Rückkehr von gespeicherten Prozeduren. Für diejenigen, die können CFPROCRESULT bindet die Ergebnismengen von ColdFusion-Abfragen, die sie zur Nutzung in Ihrem ColdFusion-Anwendungen, wie wenn sie aus einem CFQUERY Aufruf zurückgegeben wurden macht. Und obwohl einige Datenbank-Server können mehrere Ergebnismengen aus einer Hand CFSTOREDPROC Telefonkonferenz zurückzukehren, hat der Fahrer mit dem ColdFusion greift auf die Datenbank muss eine solche Möglichkeit auch bieten. Für Oracle, benötigen Sie einen JDBC-Treiber Typ 4, wie die, dass die Schiffe Standard mit ColdFusion MX Enterprise oder die freie OIC-Treiber von Oracle, wenn Sie bei Verwendung von ColdFusion MX Professional. Für einen Moment zurück Schau dir den Code. Sie erwartet wieder nur ein Ergebnis von dieser gespeicherten Prozedur, und Sie verpflichtet, die Ergebnismenge einer Abfrage ColdFusion Objekt mit dem Namen GetGeorgiaCompanies indem Sie die folgenden CFPROCRESULT tag:
CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS TYPE recCompany IS RECORD (vCompanyName Company.CompanyName% TYPE, vZipCode Company.ZipCode% TYPE); TYPE recEmployee IS RECORD (vLastname Employee.Lastname% TYPE, vFirstname Employee.Firstname% TYPE); curCompanies TYPE REF IS CURSOR RETURN recCompany; TYPE curEmployees IS REF CURSOR RETURN recEmployee PROCEDURE sp_GetCompaniesEmployees (IN Char, vName IN Char vState, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); END pkg_CompaniesEmployees; / CREATE OR REPLACE PACKAGE BODY pkg_CompaniesEmployees AS VERFAHREN sp_GetCompaniesEmployees (IN Char, vName IN Char vState, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees) AS BEGIN OPEN rsCompanies FOR SELECT CompanyName, PLZ AUS Firma WHERE State = sp_GetCompaniesEmployees.vState ORDER BY PLZ ASC; OPEN rsEmployees FOR SELECT Vorname, Nachname FROM Mitarbeiter WHERE Name LIKE sp_GetCompaniesEmployees.vName | | '%' ORDER BY Nachname ASC, Vorname ASC; END sp_GetCompaniesEmployees; pkg_CompaniesEmployees END; / Erstens, ein Oracle-Paket ist genau das, was der Name schon sagt: ein großes Paket oder Container für einzelne Komponenten, in diesem Fall vier benutzerdefinierte Datentypen und einer gespeicherten Prozedur. Ein Paket besteht aus zwei Teilen: einem Kopf, in denen Benutzer-Datentypen und die Schnittstellen in jede gespeicherte Prozeduren und Funktionen in dem Paket enthalten sind definiert, und die Stelle, wo die gespeicherten Prozeduren und Funktionen selbst programmiert sind. Also die erste Aufgabe bei der Schaffung einer Oracle-Pakets ist es, die Schnittstelle, die Sie tun, indem Sie den folgenden Code zu definieren: CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees AS TYPE recCompany IS RECORD (vCompanyName Company.CompanyName% TYPE, vZipCode Company.ZipCode% TYPE); TYPE recEmployee IS RECORD (vLastname Employee.Lastname% TYPE, vFirstname Employee.Firstname% TYPE); curCompanies TYPE REF IS CURSOR RETURN recCompany; TYPE curEmployees IS REF CURSOR RETURN recEmployee PROCEDURE sp_GetCompaniesEmployees (IN Char, vName IN Char vState, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END; / Aber um genau zu sehen, was die Header enthalten muss, müssen Sie den Blick nach vorne in den Körper des Oracle-Pakets zur aktuellen Cursorposition, dass die erste Abfrage-Ergebnis-Set enthält, wie folgt: OPEN rsCompanies FOR SELECT CompanyName, PLZ AUS Firma WHERE State = sp_GetCompaniesEmployees.vState ORDER BY PLZ ASC; Jede Zeile in diesem Cursor abgerufen enthält zwei Spalten aus der Tabelle Firma: Firma und Postleitzahl, die die Dimension der Cursor-Variable, die auf dieser Cursor zu definieren. Weiter Sie einen Datentyp, dieser Dimension müssen. Glücklicherweise hat Oracle die Möglichkeit, Benutzer zu erstellen, um komplexe Datentypen genannt Datensätze. Sie profitieren von dieser Funktion erstellen Sie einen Eintrag Datentyp namens recCompany, dass der Firmenname und PLZ Spalten jeder Zeile aus der Tabelle abgerufen Unternehmen hält, wie folgt: TYPE recCompany IS RECORD (vCompanyName Company.CompanyName% TYPE, vZipCode Company.ZipCode% TYPE); Die Bestandteile des recCompany Datentyp müssen auch die Datentypen definiert. Anhängen% TYPE auf ein Datenelement gibt den Datentyp, die vorstehenden record Definition entspricht dem folgenden Code ein: TYPE recCompany IS RECORD (vCompanyName VARCHAR2 (40), vZipCode VARCHAR2 (10)); Nachdem Sie den Datentyp der gleichen Größenordnung wie die Zeilen, indem Sie den Cursor enthalten sein, können Sie eine Cursor-Variable zu definieren, um den Cursor beziehen, wie folgt: TYPE curCompanies IS REF CURSOR RETURN recCompany, was diese Art Definition sagt, ist "Definieren Sie eine Cursor-Variable mit dem Namen curCompanies, die Zeilen die gleiche Dimension wie die recCompany Datentyp haben." wiederholen Sie das gleiche Programmiermodell für den zweiten Cursor-Variable-curEmployees-und Sie sind bereit zum Übergang in die Paket-Header-Schnittstelle ist in der gespeicherten Prozedur. Die Schnittstelle der gespeicherten Prozedur, die Ihre beiden Ergebnismengen ist vergleichbar mit der gespeicherten Prozeduren, die Sie erstellt haben, in die es enthält Parameter für bestimmte Datentypen. Sie erklären die beiden Eingabeparameter, die in der WHERE-Klauseln Ihrer beiden Abfragen verwendet werden, erklären Sie, plus zwei Output-Parametern des REF CURSOR-Datentypen, die Sie wie folgt definiert: rsCompanies OUT curCompanies, rsEmployees OUT curEmployees Der gesamte Code-Block, dass die Schnittstelle in der gespeicherten Prozedur definiert ist wie folgt: VERFAHREN sp_GetCompaniesEmployees (IN Char, vName IN Char vState, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); Es definiert die Schnittstelle der sp_GetCompaniesEmployees gespeicherten Prozedur. Schließlich haben Sie die folgenden Code ein: Pkg_CompaniesEmployees END; / Es schließt die formale Definition der Schnittstelle in das pkg_CompaniesEmployee Oracle-Paket. Ein Artikel eingereicht von Jan Hardy Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Parameterübergabe nach Position und nicht nach Namen" übersetzt wurde durch eine automatische Software. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 168 users browsing the articles directory |
|
|