<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Pro%2AC</id>
	<title>Pro*C - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Pro%2AC"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Pro*C&amp;action=history"/>
	<updated>2026-05-21T15:58:20Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Pro*C&amp;diff=432854&amp;oldid=prev</id>
		<title>imported&gt;Wiki Gh!: Komma</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Pro*C&amp;diff=432854&amp;oldid=prev"/>
		<updated>2022-11-07T10:03:05Z</updated>

		<summary type="html">&lt;p&gt;Komma&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Pro*C&amp;#039;&amp;#039;&amp;#039; [{{IPA|pɹoʊˈsiː}}]/&amp;#039;&amp;#039;&amp;#039;Pro*C++&amp;#039;&amp;#039;&amp;#039; [{{IPA|-ˈplʌs ˈplʌs}}] ist ein [[Precompiler]] des Unternehmens [[Oracle]] für die Programmiersprache [[C (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 [[Data Manipulation Language|DML]]-Befehle;  [[Data Definition Language|DDL]]- und [[Data Control Language|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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Proc-precompiler-process.png|mini|Schema des Prozesses, wie er notwendig ist, um ein Pro*C-Programm zu erstellen.]]&lt;br /&gt;
&lt;br /&gt;
== Unterstützte Konzepte ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* [[Embedded SQL]], statisch, erfordert einen Precompiler&lt;br /&gt;
* [[PL/SQL| PL SQL]], statisch, erfordert einen Precompiler&lt;br /&gt;
* Host Arrays&lt;br /&gt;
* [[SQL#Statisches und dynamisches SQL|Dynamisches SQL]]&lt;br /&gt;
&lt;br /&gt;
== Dynamisches SQL – Varianten ==&lt;br /&gt;
&lt;br /&gt;
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 [[Entscheidungsbaum]]s.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Proc-dynamicsql-decission-tree.png|mini|Entscheidungsbaum, der hilft, zu entscheiden, welche dynamische SQL Methode zu benutzen ist.]]&lt;br /&gt;
&lt;br /&gt;
=== Methode 1 ===&lt;br /&gt;
&lt;br /&gt;
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 &amp;#039;&amp;#039;EXECUTE IMMEDIATE&amp;#039;&amp;#039; Befehls ausgeführt. Der SQL-Ausdruck darf allerdings keine Abfrage (&amp;#039;&amp;#039;SELECT&amp;#039;&amp;#039; Ausdruck) und keine Platzhalter für Input-Host-Variablen enthalten. Der nachfolgende Ausdruck ist ein gültiger Ausdruck für die Methode 1:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;DELETE FROM EMP WHERE DEPTNO = 20&amp;#039;&lt;br /&gt;
 &amp;#039;GRANT SELECT ON EMP TO scott&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Wird Methode 1 benutzt, so wird der SQL-Ausdruck, der ausgeführt werden soll, bei jeder Ausführung analysiert.&lt;br /&gt;
&lt;br /&gt;
=== Methode 2 ===&lt;br /&gt;
&lt;br /&gt;
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 &amp;#039;&amp;#039;PREPARE&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;EXECUTE&amp;#039;&amp;#039; 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 [[Compiler|Übersetzung]] bekannt sein. Das nachfolgende Beispiel würde einem dynamischen SQL-Ausdruck dieser Kategorie entsprechen:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;INSERT INTO EMP (ENAME, JOB) VALUES (:emp_name, :job_title)&amp;#039;&lt;br /&gt;
 &amp;#039;DELETE FROM EMP WHERE EMPNO = :emp_number&amp;#039;&lt;br /&gt;
&lt;br /&gt;
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 &amp;#039;&amp;#039;CREATE&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;GRANT&amp;#039;&amp;#039; werden ausgeführt, wenn diese &amp;#039;&amp;#039;PREPARE&amp;#039;&amp;#039;d, also vorbereitet werden.&lt;br /&gt;
&lt;br /&gt;
=== Methode 3 ===&lt;br /&gt;
&lt;br /&gt;
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 &amp;#039;&amp;#039;PREPARE&amp;#039;&amp;#039; Befehl und den Cursor-Befehlen &amp;#039;&amp;#039;DECLARE&amp;#039;&amp;#039;, &amp;#039;&amp;#039;OPEN&amp;#039;&amp;#039;, &amp;#039;&amp;#039;FETCH&amp;#039;&amp;#039; und &amp;#039;&amp;#039;CLOSE&amp;#039;&amp;#039; 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:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;SELECT DEPTNO, MIN(SAL), MAX(SAL) FROM EMP GROUP BY DEPTNO&amp;#039;&lt;br /&gt;
 &amp;#039;SELECT ENAME, EMPNO FROM EMP WHERE DEPTNO = :dept_number&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Methode 4 ===&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;!-- Runtime --&amp;gt; unbekannt sein. Der nachfolgende Quelltext fällt in diese Kategorie:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;INSERT INTO EMP (&amp;lt;unknown&amp;gt;) VALUES (&amp;lt;unknown&amp;gt;)&amp;#039;&lt;br /&gt;
 &amp;#039;SELECT &amp;lt;unknown&amp;gt; FROM EMP WHERE DEPTNO = 20&amp;#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur| Autor=Simon Watt | Titel=Pro*C/C++ Programmer&amp;#039;s Guide, 11g Release 2 (11.2) | Verlag=Oracle Corporation | Kommentar=E10825-01 | Online=[http://docs.oracle.com/cd/E11882_01/appdev.112/e10825.pdf PDF] [http://docs.oracle.com/cd/E11882_01/appdev.112/E10825-01.epub EPUB] [http://docs.oracle.com/cd/E11882_01/appdev.112/e10825/toc.htm HTML] | Jahr=2009}}&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Pro C}}&lt;br /&gt;
[[Kategorie:Datenbanksprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Wiki Gh!</name></author>
	</entry>
</feed>