Passaggio di parametri da posizione piuttosto che in base al nome

Documentazione di vario genere ha detto che i parametri possono essere passati alla stored procedure in qualsiasi ordine e che il legame che si specifica utilizzando DBVARNAME correttamente le mappe Rapporto attribuisce ai loro variabili database corrispondente, ma non è questo il caso, in pratica. Si dovrebbe sempre passare i parametri a stored procedure esattamente nello stesso ordine in cui compaiono nell'interfaccia della stored procedure, altrimenti, ColdFusion genera un'eccezione. Molti, ma non tutti, i server di database possono restituire i set di risultati da stored procedure. Per coloro che possono, CFPROCRESULT lega i set di risultati di query ColdFusion, che li rende disponibili per l'uso nelle applicazioni ColdFusion proprio come se fossero restituiti da una chiamata CFQUERY. E anche se alcuni server di database possono restituire più set di risultati da una chiamata CFSTOREDPROC unico, il pilota con il quale ColdFusion accede al database deve supportare tale capacità pure. Per Oracle, avete bisogno di un driver JDBC di tipo 4, come quella che le navi standard con ColdFusion MX Enterprise, o il driver OIC libero da Oracle se si sta eseguendo ColdFusion MX Professional. Guardare indietro per un momento il codice. Si dovrebbe ritornare solo un insieme di risultati di questa stored procedure, e vincolato che set di risultati di una query ColdFusion oggetto GetGeorgiaCompanies denominato utilizzando il seguente tag CFPROCRESULT:

  

CREATE OR pkg_CompaniesEmployees FOGLIO Sostituisci recCompany TIPO RECORD IS (tipo% vCompanyName Company.CompanyName, vZipCode% Company.ZipCode TIPO); recEmployee TIPO IS RECORD (TIPO Employee.Lastname vLastname%, vFirstname% Employee.Firstname TIPO); TIPO curCompanies IS REF CURSOR recCompany RETURN; curEmployees TIPO IS REF CURSOR recEmployee RETURN; sp_GetCompaniesEmployees PROCEDURA (vState IN Char, vName IN Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END;
/ CREATE OR REPLACE PACKAGE pkg_CompaniesEmployees CORPO COME sp_GetCompaniesEmployees PROCEDURA (vState IN Char, vName IN Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees) AS BEGIN OPEN rsCompanies PER SELECT CompanyName, ZipCode DA Azienda Dove Stato = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC; OPEN rsEmployees PER SELECT Nome, Cognome FROM Impiegato WHERE Nome LIKE sp_GetCompaniesEmployees.vName | | 'ORDER%' BY LastName ASC, FirstName ASC; sp_GetCompaniesEmployees END; pkg_CompaniesEmployees END; /

In primo luogo, un pacchetto Oracle è proprio quello che il suo nome: un grande pacchetto o un contenitore per i singoli componenti, in questo caso, quattro definiti dall'utente tipi di dati e una stored procedure. Un pacchetto consta di due parti: un colpo di testa, dove definiti dall'utente tipi di dati e le interfacce in qualsiasi stored procedure e funzioni contenute nel pacchetto sono definiti, e il corpo, in cui la stored procedure e le funzioni stesse sono programmate. Così il primo compito di creare un pacchetto Oracle è quello di definire la sua interfaccia, che si esegue utilizzando il seguente codice:

CREATE OR pkg_CompaniesEmployees FOGLIO Sostituisci recCompany TIPO RECORD IS (tipo% vCompanyName Company.CompanyName, vZipCode% Company.ZipCode TIPO); recEmployee TIPO IS RECORD (TIPO Employee.Lastname vLastname%, vFirstname% Employee.Firstname TIPO); TIPO curCompanies IS REF CURSOR recCompany RETURN; curEmployees TIPO IS REF CURSOR recEmployee RETURN; sp_GetCompaniesEmployees PROCEDURA (vState IN Char, vName IN Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees); pkg_CompaniesEmployees END; /

Ma per vedere esattamente quello che deve contenere l'intestazione, è necessario guardare avanti, nel corpo del pacchetto Oracle-to il cursore reale che contiene il primo set di risultati di query, come segue:

OPEN rsCompanies PER SELECT CompanyName, ZipCode DA Azienda Dove Stato = sp_GetCompaniesEmployees.vState ORDER BY ZipCode ASC;

Ogni riga recuperati in questo cursore contiene due colonne della tabella Azienda: CompanyName e ZipCode, che definiscono la dimensione della variabile cursore che fa riferimento a questo cursore. Successivo, è necessario un tipo di dati che è di questa dimensione. Fortunatamente, Oracle ha la capacità di creare utente complesse tipi di dati definiti chiamato record. A trarre vantaggio di questa funzionalità e di creare un tipo di dati RECORD denominata recCompany che detiene la CompanyName e le colonne ZipCode di ogni riga recuperata dalla tabella azienda, come segue:

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

Gli elementi costitutivi del tipo di recCompany persone devono avere inoltre i tipi di dati definiti. Aggiungendo TIPO% ad un elemento di dati restituisce il tipo di dati, quindi la definizione precedente record è equivalente al seguente codice:

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

Dopo aver ottenuto un tipo di dati della stessa dimensione del file da inserire dal cursore, è possibile definire un cursore variabile per fare riferimento al cursore, come segue: TIPO curCompanies IS REF CURSOR recCompany RETURN; Che questa definizione TYPE sta dicendo è "Definire una variabile cursore denominato curCompanies che restituisce righe che hanno la stessa dimensione come il tipo di recCompany dati." si ripete la stessa programmazione per la seconda variabile cursore curEmployees-e si è pronti a passare alla interfaccia l'intestazione del pacchetto in la stored procedure. L'interfaccia di stored procedure che restituisce i due set di risultati è simile a stored procedure che si è creato, in quanto contiene i parametri di tipi di dati specifici. Si dichiara due parametri di input che vengono utilizzati nelle clausole WHERE delle tue due domande, più si dichiara due parametri di output dei tipi di dati REF CURSOR che si è definito come segue:

rsCompanies OUT curCompanies, rsEmployees OUT curEmployees

L'intero blocco di codice che definisce l'interfaccia nella stored procedure è il seguente:

Sp_GetCompaniesEmployees PROCEDURA (vState IN Char, vName IN Char, rsCompanies OUT curCompanies, rsEmployees OUT curEmployees);

Esso definisce l'interfaccia del sp_GetCompaniesEmployees stored procedure. Infine, avete il seguente codice:

Pkg_CompaniesEmployees END; /

Si conclude la definizione formale dell'interfaccia nel pacchetto Oracle pkg_CompaniesEmployee.

un articolo presentato da Jan Hardy


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo "Passaggio di parametri di posizione, piuttosto che per nome" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 249 users browsing the articles directory