[PYTHON] [Einführung in cx_Oracle] (Teil 11) Grundlagen der PL / SQL-Ausführung

Serialisierungstabelle

Serie: Einführung in den Inhalt von cx_Oracle

Überprüfungsumgebung

Führen Sie anonymes PL / SQL aus

Anonymes PL / SQL kann wie jede andere SQL-Anweisung mit der execute () -Methode des Cursor-Objekts ausgeführt werden. Unten ist ein Beispiel. Wie im Beispiel sind auch Bindungsvariablen verfügbar.

sample11a.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
begin
  :out_value := :in_value * 2;
end;
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                outValue = cursor.var(int)
                cursor.execute(SQL, [outValue, 111])
                print(outValue.getvalue())

Ausführung der gespeicherten Prozedur

Es gibt zwei Arten von Ausführungsmethoden zum Speichern gespeicherter Prozeduren.

Verwenden Sie die Methode Cursor.callproc ()

sample11b.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
create or replace procedure sample11b(in_value in number, out_value out number) is
begin
  out_value := in_value * 2;
end;
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                outValue = cursor.var(int)
                cursor.execute(SQL)
                cursor.callproc("sample11b", [222, outValue])
                print(outValue.getvalue())

Geben Sie, wie in der zweiten Zeile von unten gezeigt, den Namen der gespeicherten Prozedur an, die Sie im ersten Argument mit dem Typ str aufrufen möchten. Geben Sie für das zweite Argument das Argument für die gespeicherte Prozedur gemäß den Argumentspezifikationen der Prozedur an.

Führen Sie die SQL CALL-Anweisung mit der Methode Cursor.execute () aus

sample11c.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
create or replace procedure sample11b(in_value in number, out_value out number) is
begin
  out_value := in_value * 2;
end;
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                outValue = cursor.var(int)
                cursor.execute(SQL)
                cursor.execute("call sample11b(:a, :b)", [333, outValue])
                print(outValue.getvalue())

Sie müssen die Prozedurargumente als Bindevariablen angeben.

Was besser ist, callproc () oder execute () + CALL. Im Fall von callproc () unterstützt die DB-API callproc () die Angabe des Arguments mit dem Argumentnamen nicht. Cx_Oracle erweitert jedoch die DB-API, um sie zu unterstützen. Wenn Sie genau der DB-API entsprechend codieren möchten, verwenden Sie execute () + CALL. Cx_Oracle verfügt jedoch über einige proprietäre Erweiterungen, über die die DB-API nicht verfügt. Daher scheint es schwierig zu sein, diese strikt einzuhalten. Im Gegenteil, ich denke, dass die Klarheit der Codierung callproc () ist. Außerdem scheinen sich die Spezifikationen für den Aufruf gespeicherter Prozeduren und gespeicherter Funktionen in der CALL-Anweisung im Vergleich zu callproc () geringfügig zu unterscheiden. Wenn Sie über diese Punkte besorgt sind, empfehlen wir die Verwendung von callproc ().

Ausführung gespeicherter Funktionen

Es gibt zwei Arten von Ausführungsmethoden zum Speichern gespeicherter Prozeduren.

Verwenden Sie die Methode Cursor.callfunc ()

sample11d.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
create or replace function sample11d(in_value in number)
  return number is
begin
  return in_value * 2;
end;
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                cursor.execute(SQL)
                returnValue = cursor.callfunc("sample11d", int, [111])
                print(returnValue)

Wie in der zweiten Zeile von unten gezeigt, gibt die Funktion das Operationsergebnis zurück, sodass es als Variable empfangen wird (returnValue im Beispielfall). Das erste Argument der Methode callfunc () ist der Funktionsname, der im Typ str übergeben werden muss. Die zweite gibt den Datentyp des Rückgabewerts der Funktion an. Das dritte ist das Funktionsargument.

Führen Sie die SQL CALL-Anweisung mit der Methode Cursor.execute () aus

sample11e.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
create or replace function sample11d(in_value in number)
  return number is
begin
  return in_value * 2;
end;
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                outValue = cursor.var(int)
                cursor.execute(SQL)
                cursor.execute("call sample11d(:inValue) into :outValue", [222, outValue])
                print(outValue.getvalue())

Dies entspricht im Wesentlichen der Ausführung einer gespeicherten Prozedur. Beachten Sie, dass für gespeicherte Funktionen eine INTO-Klausel erforderlich ist, um den Rückgabewert zu erhalten.

Welche der beiden oben genannten Ausführungsmethoden besser ist, entspricht im Grunde der Idee einer gespeicherten Funktion. Der Unterschied besteht darin, dass die DB-API kein callfunc () enthält.

Recommended Posts

[Einführung in cx_Oracle] (Teil 11) Grundlagen der PL / SQL-Ausführung
[Cx_Oracle Primer] (Teil 3) Grundlagen zum Durchsuchen von Tabellen
[Einführung in cx_Oracle] (Teil 2) Grundlagen zum Verbinden und Trennen mit Oracle Database
[Einführung in cx_Oracle] (Teil 7) Umgang mit Bindevariablen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
[Einführung in cx_Oracle] (Teil 4) Abrufen und Scrollen der Ergebnismenge
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
[Einführung in Data Scientist] Grundlagen von Python ♬
[Einführung in cx_Oracle] (16.) Umgang mit LOB-Typen
[Einführung in cx_Oracle] (5.) Umgang mit japanischen Daten
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Einführung in PyQt4 Teil 1
[Python3] Herstellen einer Verbindung zur Oracle-Datenbank und Ausführen von SQL [cx_Oracle]
[Einführung in cx_Oracle] (13.) Verbindung über Verbindungspool (Client-Seite)
Einführung in die Anomalieerkennung 1 Grundlagen
[Einführung in cx_Oracle] (8.) Version cx_Oracle 8.0
Einführung in Ansible Teil In'Inventory '
Serie: Einführung in den Inhalt von cx_Oracle
Python x GIS-Grundlagen (1)
Einführung in Ansible Teil ④'Variable '
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
Python x GIS-Grundlagen (3)
Einführung in Ansible Teil 2 'Grundlegende Grammatik'
Einführung in Python Hands On Teil 1
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
Grundlagen von Python x GIS (Teil 2)
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
Einführung in Ansible Teil 1'Hallo Welt !! '
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
[Einführung in Datenwissenschaftler] Grundlagen der Wahrscheinlichkeit und Statistik ♬ Wahrscheinlichkeits- / Wahrscheinlichkeitsvariable und Wahrscheinlichkeitsverteilung
Web-WF Python Tornado Teil 3 (Einführung in Openpyexcel)
[Einführung in cx_Oracle] (12.) DB-Ausnahmebehandlung
[Einführung in cx_Oracle] (17.) Datumsbehandlung
Jupyter Notebook Grundlagen der Verwendung
Grundlagen von PyTorch (1) - Verwendung von Tensor-
Kaggle: Einführung in das manuelle Feature Engineering Teil 1
[Einführung in cx_Oracle] (Teil 9) Zuordnung von DB- und Python-Datentypen (Version 8 oder höher)
[Einführung in die Udemy Python3 + -Anwendung] 26. Kopie des Wörterbuchs
[Ansible Installationsverfahren] Von der Installation bis zur Ausführung des Playbooks
Einstellung zur Ausgabe des Protokolls zur Ausführung von cron
[Einführung in die Udemy Python3 + -Anwendung] 19. Kopie der Liste
So messen Sie die Ausführungszeit mit Python Teil 1
Einführung in Python "Re" 1 Erstellen einer Ausführungsumgebung
Grundlagen des Lernens mit einem Lehrer Teil 3 - Multiple Regression (Implementierung) - (Anmerkungen) -
So messen Sie die Ausführungszeit mit Python Part 2
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken