Heim > Betrieb und Instandhaltung > Betrieb und Wartung von Linux > Gespeicherte Oracle-Paging-Prozedur

Gespeicherte Oracle-Paging-Prozedur

WBOY
Freigeben: 2023-05-20 09:53:37
Original
701 Leute haben es durchsucht

Oracle ist ein leistungsstarkes Datenbankverwaltungssystem, das erweiterte Funktionen wie gespeicherte Prozeduren unterstützt und es Programmierern erleichtert, komplexe Geschäftslogik zu schreiben. In einigen spezifischen Szenarien ist es erforderlich, Paging-Abfragen für eine große Datenmenge durchzuführen. Um dies zu erreichen, können wir eine paginierte gespeicherte Prozedur schreiben. In diesem Artikel wird erläutert, wie gespeicherte Oracle-Paging-Prozeduren geschrieben werden.

1. Anforderungsanalyse

Bei der Website-Entwicklung stoßen wir häufig auf Situationen, in denen die von Benutzern übermittelten Daten auf Seiten angezeigt werden müssen. Beispielsweise führt die Abfrage aller Datensätze in einer Tabelle zu einem erheblichen Leistungsdruck auf die Datenbank und beeinträchtigt die Benutzererfahrung, wenn alle Datensätze gleichzeitig abgefragt werden. Daher ist die Anzeige von Daten in Seiten eine bessere Lösung. Lassen Sie uns die Anforderungen analysieren:

  1. Ermitteln Sie die Gesamtzahl der Datensätze
  2. Berechnen Sie die Position des Startdatensatzes und des Enddatensatzes basierend auf der Größe jeder Seite und dem aktuelle Seitenzahl# 🎜🎜#
  3. Fragen Sie die erforderlichen Daten basierend auf dem Startdatensatz und dem Enddatensatz ab
2. Design gespeicherter Prozeduren

Basierend auf Nach der obigen Bedarfsanalyse können wir die folgende gespeicherte Oracle-Paging-Prozedur entwerfen:

CREATE OR REPLACE PROCEDURE pagination(p_table_name IN VARCHAR2,
                                        p_page_num IN NUMBER,
                                        p_page_size IN NUMBER,
                                        p_total_num OUT NUMBER,
                                        p_cursor OUT SYS_REFCURSOR) IS
  v_start_pos NUMBER;
  v_end_pos NUMBER;
  v_sql_query VARCHAR2(1000);
BEGIN
  SELECT COUNT(*) INTO p_total_num FROM p_table_name;
  v_start_pos := (p_page_num - 1) * p_page_size + 1;
  v_end_pos := v_start_pos + p_page_size - 1;
  v_sql_query := 'SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM ' || p_table_name || ') A WHERE ROWNUM <= ' || v_end_pos || ') WHERE RN >= ' || v_start_pos;
  OPEN p_cursor FOR v_sql_query;
END;
/
Nach dem Login kopieren

Der obige Code erstellt eine gespeicherte Prozedur namens Paginierung, die 4 Parameter empfangen kann: Tabellenname, Seitennummer und jeweils die Größe Seite und Gesamtzahl der Datensätze. Unter diesen ist p_cursor der Ausgabeparameter, mit dem der Cursor der Abfrageergebnisse zurückgegeben wird.

3. Beschreibung der gespeicherten Prozedur

    SELECT COUNT(*) INTO p_total_num FROM p_table_name;
  1. Diese Anweisung wird verwendet, um die Gesamtzahl der Datensätze abzufragen in der Tabelle und speichern Sie das Ergebnis in p_total_num. Mithilfe dieser Variablen können wir die Gesamtzahl der Seiten und den Datensatzbereich der aktuellen Seite berechnen.
  2. v_start_pos := (p_page_num - 1) * p_page_size + 1;
  3. Diese Anweisung wird verwendet, um die Position des Startdatensatzes zu berechnen, die aus der Seitenzahl und der Größe jedes einzelnen Datensatzes berechnet wird Seite.
  4. v_end_pos := v_start_pos + p_page_size - 1;
  5. Diese Anweisung wird verwendet, um die Position des Enddatensatzes zu berechnen, der auch aus der Seitenzahl und der Größe jeder Seite berechnet wird.
  6. v_sql_query := 'SELECT
  7. FROM (SELECT A., ROWNUM RN FROM (SELECT * FROM ' || p_table_name || ') A WHERE ROWNUM <= ' | |. v_end_pos ||. ') WHERE RN >= ' ||. v_start_pos;Diese Anweisung wird zum Abfragen von Daten innerhalb des angegebenen Bereichs in der Tabelle verwendet. ROWNUM ist eine Oracle-spezifische Pseudospalte, die die Zeilennummer jedes Datensatzes darstellt. Wir haben ROWNUM verwendet, um den Abfrageumfang einzuschränken, und die RN-Spalte durch verschachtelte Abfragen hinzugefügt, um die Zeilennummer des aktuellen Datensatzes darzustellen. Schließlich ist der Bereich der Abfrageergebnisse basierend auf der Startposition und der Endposition begrenzt.
  8. OPEN p_cursor FOR v_sql_query
  9. Diese Anweisung wird verwendet, um die Abfrageanweisung auszuführen und die Ergebnisse im Cursor p_cursor zu speichern. Dieser Cursor kann für nachfolgende Datenoperationen und -übertragungen verwendet werden.
4. Testfall

Um zu überprüfen, ob die gespeicherte Prozedur korrekt ist, können wir eine Testtabelle erstellen und einige Daten in die Tabelle einfügen: # 🎜🎜 #
CREATE TABLE test(
  id NUMBER(10) PRIMARY KEY,
  name VARCHAR2(50)
);

DECLARE 
  v_id NUMBER;
BEGIN
  FOR i IN 1..100 LOOP
    v_id := i;
    INSERT INTO test(id,name) VALUES(v_id,'name'||v_id);
  END LOOP;
  COMMIT;
END;
/
Nach dem Login kopieren

Als nächstes können wir den folgenden Code ausführen, um unsere gespeicherte Prozedur zu testen:

DECLARE
  v_page_num NUMBER := 1;
  v_page_size NUMBER := 10;
  v_total_num NUMBER;
  v_cursor SYS_REFCURSOR;
  v_id NUMBER;
  v_name VARCHAR2(50);
BEGIN
  pagination('test',v_page_num,v_page_size,v_total_num,v_cursor);
  
  DBMS_OUTPUT.PUT_LINE('Total number of records: ' || v_total_num);
  LOOP
    FETCH v_cursor INTO v_id,v_name;
    EXIT WHEN v_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('Id: '||v_id ||', Name: '|| v_name);
  END LOOP;
  CLOSE v_cursor;
END;
/
Nach dem Login kopieren

Der obige Code gibt die ID- und Namenswerte von 1 bis 10 Datensätzen aus.

Aus den Testergebnissen geht hervor, dass die von uns geschriebene gespeicherte Paging-Prozedur den Datensatzbereich korrekt berechnen kann und auch die Abfrageergebnisse korrekt sind. Diese gespeicherte Prozedur kann den Druck auf die Datenbank beim Abfragen von Daten effektiv verringern und gleichzeitig Leistungsprobleme vermeiden, die durch das gleichzeitige Abfragen zu vieler Daten verursacht werden.

Darüber hinaus können wir die Parameter und Abfrageanweisungen in der gespeicherten Prozedur entsprechend den tatsächlichen Anforderungen anpassen, um sie an komplexere Abfrageszenarien anzupassen.

5. Zusammenfassung

In Oracle-Datenbanken sind gespeicherte Prozeduren eine sehr wichtige Funktion, die uns beim Schreiben komplexer Geschäftslogik- und Datenoperationsprozesse helfen und die Betriebseffizienz der Datenbank verbessern kann und Wartbarkeit. In diesem Artikel wird erläutert, wie Sie gespeicherte Oracle-Paging-Prozeduren schreiben, Anforderungen analysieren, Algorithmen entwerfen und Code schreiben. Auf der Grundlage des Verständnisses gespeicherter Oracle-Prozeduren wird eine einfache gespeicherte Paging-Prozedur implementiert. Durch das Studium der Fälle in diesem Artikel wird es den Lesern helfen, die Methoden und Techniken zum Schreiben gespeicherter Oracle-Prozeduren besser zu beherrschen.

Das obige ist der detaillierte Inhalt vonGespeicherte Oracle-Paging-Prozedur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage