Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> hardware >> Mouse & tastiere >> .

Cosa sono i cursori?

I cursori sono oggetti di database che consentono di accedere e manipolare i dati una riga alla volta da un set di risultati restituito da una query SQL. Pensa a loro come puntatori che navigano attraverso le righe in un set di risultati.

Ecco una rottura di ciò che sono e perché sono usati:

Concetti chiave:

* Set di risultati: Una raccolta di righe restituite da una query SQL. Quando si esegue un'istruzione `select`, il server di database genera un set di risultati.

* Elaborazione riga per riga: I cursori consentono di recuperare ed elaborare ogni riga del set di risultati individualmente. Ciò è in contrasto con le operazioni SQL standard che in genere operano sull'intero risultato impostato contemporaneamente.

* puntatore/iteratore: Un cursore funge essenzialmente da puntatore o iteratore che tiene traccia della riga corrente accessibile. È possibile spostare il cursore in avanti per accedere alle righe successive.

Perché usare i cursori?

I cursori vengono generalmente utilizzati quando è necessario eseguire operazioni complesse su ogni riga di un set di risultati difficili o impossibili da ottenere con le istruzioni SQL standard. Gli scenari comuni includono:

* Aggiornamenti/eliminati condizionali: Potrebbe essere necessario aggiornare o eliminare una riga in base ai valori trovati in altre righe dello stesso set di risultati o in altre tabelle.

* Calcoli basati su righe precedenti: Potrebbe essere necessario calcolare una media totale, media mobile o altro valore cumulativo che dipende dai valori nelle righe precedenti.

* Integrazione con sistemi esterni: Potrebbe essere necessario recuperare i dati da un database e quindi utilizzare tali dati per interagire con applicazioni esterne o API, elaborando ogni riga singolarmente.

* Logica complessa all'interno delle procedure memorizzate: I cursori vengono spesso utilizzati nelle procedure memorizzate quando è necessario implementare una logica aziendale complessa che richiede l'iteratura attraverso un set di risultati.

* Reporting: La generazione di report personalizzati o l'esecuzione di una formattazione di dati complesse si basa spesso sull'elaborazione riga per riga.

Come funzionano i cursori (semplificati):

1. Dichiarare il cursore: Dichiari prima un cursore, specificando l'istruzione `Select` che genererà il set di risultati con cui funzionerà il cursore.

2. Apri il cursore: L'apertura del cursore esegue l'istruzione `Select` e crea il set di risultati. Il cursore è posizionato prima della prima riga.

3. Fetch Rows: Si utilizza un'istruzione `Fetch` per recuperare i dati dalla riga corrente e spostare il cursore nella riga successiva.

4. Elabora i dati: All'interno di un ciclo, si elaborano i dati recuperati da ogni riga. Ciò potrebbe comportare l'aggiornamento di altre tabelle, l'esecuzione di calcoli o la chiamata di procedure esterne.

5. Chiudi il cursore: Dopo aver elaborato tutte le righe, si chiude il cursore, rilasciando le risorse che stava utilizzando.

6. Deallocass il cursore: Infine, si occupi il cursore.

Esempio (concettuale - La sintassi specifica varia per database):

`` `sql

- Dichiarare un cursore

Dichiarare cursore my_cursor per

Selezionare Employee_id, stipendio dai dipendenti in cui Dipartimento_ID =10;

- Apri il cursore

Apri my_cursor;

- Prendi la prima riga

Fetch Avanti da my_cursor in @emp_id, @salary;

- Loop attraverso il set di risultati

Mentre @@ fetch_status =0 - controlla se il fetch ha avuto successo

INIZIO

- Elabora i dati (esempio:sollevare lo stipendio se al di sotto di una soglia)

Se @Salary <50000

INIZIO

Aggiorna i dipendenti Impostare lo stipendio =stipendio * 1.10 dove dipendente_id =@emp_id; - Aumenta lo stipendio del 10%

FINE;

- Prendi la riga successiva

Fetch Avanti da my_cursor in @emp_id, @salary;

FINE;

- Chiudi il cursore

Chiudi my_cursor;

- Dealloca il cursore

Deallocay my_cursor;

`` `

Considerazioni e svantaggi importanti:

* Impatto sulle prestazioni: I cursori possono essere significativamente più lenti rispetto alle operazioni SQL basate su set, soprattutto quando si tratta di set di risultati di grandi dimensioni. L'elaborazione riga per riga è intrinsecamente meno efficiente rispetto ai dati di elaborazione nei lotti. Quando possibile, prova a ottenere il risultato desiderato utilizzando query SQL standard.

* Complessità: I cursori possono rendere il tuo codice più complesso e più difficile da mantenere.

* Problemi di bloccaggio: I cursori possono contenere blocchi sulle risorse del database per periodi più lunghi, portando potenzialmente a problemi di contesa e prestazioni.

* Alternative: Prima di ricorrere ai cursori, esplorare alternative come:

* Operazioni SQL basate su set: Spesso puoi ottenere lo stesso risultato con una domanda SQL intelligente.

* Procedure memorizzate con tabelle temporanee: Crea una tabella temporanea per tenere il set di risultati intermedi e quindi eseguire operazioni sulla tabella temporanea.

* Utilizzo del codice dell'applicazione (ad es. Python, Java) per elaborare i dati: Recupera l'intero set di risultati nell'applicazione ed esegui l'elaborazione riga per riga lì. Questo a volte può essere più efficiente rispetto all'uso dei cursori.

In sintesi, i cursori sono uno strumento potente ma spesso meno efficiente per l'elaborazione riga per riga nei database. Usali solo quando necessario e considera attentamente le implicazioni delle prestazioni. Sforzati di utilizzare le operazioni SQL basate su set quando possibile.

 

hardware © www.354353.com