Pro*C

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Pro*C [pɹoʊˈsiː]/Pro*C++ [-ˈplʌs ˈplʌs] ist ein Precompiler des Unternehmens Oracle für die Programmiersprache C und C++. Mittels des Precompilers ist es möglich, SQL-Ausdrücke und normale C oder C++ Quellcode-Elemente miteinander zu vermischen. Dies gilt jedoch ausschließlich für DML-Befehle; DDL- und DCL-Befehle müssen nach wie vor beispielsweise mit dem Programm SQL*Plus ausgeführt werden. Die daraus resultierende Datei wird schließlich in gültigen Quellcode übersetzt, um diesen mit einem herkömmlichen Compiler übersetzen zu können. Intern werden die im Quellcode eingebetteten SQL-Ausdrücke durch den Precompiler in normale Oracle Funktionsaufrufe umgewandelt.

Schema des Prozesses, wie er notwendig ist, um ein Pro*C-Programm zu erstellen.

Unterstützte Konzepte

[Bearbeiten | Quelltext bearbeiten]

Mittels Pro*C ist es möglich, mit einer Datenbank innerhalb eines C-Programms auf verschiedenen Arten zu kommunizieren. Verglichen mit Ansätzen wie beispielsweise SQLJ ist Pro*C so eine flexible Lösung, um Datenbankanwendungen zu erstellen. Nachfolgend sind die aktuellen Eigenschaften genannt, die ein Pro*C Compiler unterstützt.

Dynamisches SQL – Varianten

[Bearbeiten | Quelltext bearbeiten]

Dynamisches SQL wird in verschiedene Varianten aufgeteilt. Je nach Variante ist es möglich, eine richtige SQL-Abfrage auszuführen. Die geeignete Methode ermittelt man mit Hilfe eines Entscheidungsbaums.

Entscheidungsbaum, der hilft, zu entscheiden, welche dynamische SQL Methode zu benutzen ist.

Diese Methode ermöglicht es, ein Programm zu schreiben, welches dynamische SQL-Ausdrücke ausführt oder neue Ausdrücke erstellt. Jeder Ausdruck wird unmittelbar mittels des EXECUTE IMMEDIATE Befehls ausgeführt. Der SQL-Ausdruck darf allerdings keine Abfrage (SELECT Ausdruck) und keine Platzhalter für Input-Host-Variablen enthalten. Der nachfolgende Ausdruck ist ein gültiger Ausdruck für die Methode 1:

'DELETE FROM EMP WHERE DEPTNO = 20'
'GRANT SELECT ON EMP TO scott'

Wird Methode 1 benutzt, so wird der SQL-Ausdruck, der ausgeführt werden soll, bei jeder Ausführung analysiert.

Diese Methode ermöglicht es, ein Programm zu schreiben, welches dynamische SQL-Ausdrücke ausführt oder neue Ausdrücke erstellt. Anschließend ist es möglich, die einzelnen SQL-Ausdrücke mittels PREPARE oder EXECUTE Befehl zu verarbeiten. Der SQL-Ausdruck darf allerdings nicht eine Abfrage (SELECT Ausdruck) enthalten. Die Anzahl der Platzhalter für die Host-Variablen und deren Datentypen müssen zum Zeitpunkt der Übersetzung bekannt sein. Das nachfolgende Beispiel würde einem dynamischen SQL-Ausdruck dieser Kategorie entsprechen:

'INSERT INTO EMP (ENAME, JOB) VALUES (:emp_name, :job_title)'
'DELETE FROM EMP WHERE EMPNO = :emp_number'

Wird Methode 2 verwendet, so wird der SQL-Ausdruck nur einmal analysiert. Trotzdem kann der Ausdruck mehrmals mit unterschiedlichen Host-Variablen ausgeführt werden. SQL-DDL Ausdrücke wie beispielsweise CREATE oder GRANT werden ausgeführt, wenn diese PREPAREd, also vorbereitet werden.

Diese Methode ermöglicht es, ein Programm zu schreiben, welches dynamische SQL-Ausdrücke ausführt oder neue Ausdrücke erstellt. Anschließend ist es möglich, die einzelnen SQL-Ausdrücke mittels PREPARE Befehl und den Cursor-Befehlen DECLARE, OPEN, FETCH und CLOSE zu verarbeiten. Die Anzahl der Select-List-Elemente, die Anzahl der Platzhalter für die Input-Host-Variablen sowie die Datentypen der Input-Host-Variablen müssen zum Zeitpunkt der Übersetzung bekannt sein. Das nachfolgende Beispiel entspricht einem solchen SQL-Ausdruck:

'SELECT DEPTNO, MIN(SAL), MAX(SAL) FROM EMP GROUP BY DEPTNO'
'SELECT ENAME, EMPNO FROM EMP WHERE DEPTNO = :dept_number'

Diese Methode ermöglicht es, ein Programm zu schreiben, welches dynamische SQL-Ausdrücke ausführt oder neue Ausdrücke erstellt. Anschließend wird der SQL-Ausdruck mittel Deskriptoren verarbeitet. Die Anzahl der Select-List Elemente, die Anzahl der Platzhalter für die Input-Host-Variablen sowie die Datentypen der Input-Host-Variablen können bis zum Zeitpunkt der Ausführung unbekannt sein. Der nachfolgende Quelltext fällt in diese Kategorie:

'INSERT INTO EMP (<unknown>) VALUES (<unknown>)'
'SELECT <unknown> FROM EMP WHERE DEPTNO = 20'

Methode 4 wird für dynamische SQL-Ausdrücke benötigt, bei welchen die Anzahl der Select-List Elemente oder die Anzahl der Input-Host-Variablen unbekannt ist.

  • Simon Watt: Pro*C/C++ Programmer's Guide, 11g Release 2 (11.2). Oracle Corporation, 2009 (PDF EPUB HTML – E10825-01).