sqlLiteralSubstitution (Eigenschaft)

Wenn Ihre Anwendung viele SQL-Anweisungen ausführt, die dieselbe Syntax verwenden und sich lediglich bei den Literalwerten unterscheiden, die sie enthalten, können Sie diese Anweisungen erfassen und konsolidieren, indem pureQuery die Literalwerte durch Parametermarken ersetzt.

Ihre Anwendung könnte beispielsweise INSERT-Anweisungen generieren, die syntaktisch identisch sind, aber Literalwerte enthalten, die von Benutzern in den Feldern eines Formulars bereitgestellt werden.

Abschnitte in diesem Thema

Beispiel

Wenn Sie die Clientoptimierungseigenschaften vor der Erfassung von SQL-Anweisungen definieren, setzen Sie die Eigenschaft sqlLiteralSubstitution auf ENABLE, wie im folgenden Beispiel gezeigt:

pdqProperties=captureMode (ON), pureQueryXml	(C:/workspace/capture_file.pdqxml), 
sqlLiteralSubstitution (ENABLE)

Wenn Ihre Anwendung eine Anweisung INSERT wie die erste Anweisung im nächsten Beispiel ausführt, erfasst pureQuery sie im Format der zweiten Anweisung:

insert into EMPLOYEES/*inserting new row into EMPLOYEES table*/values('Dong','Margaret',NULL,60000,12)

insert into EMPLOYEES values(?,?,?,?,?)

Bevor Sie die Anwendung ausführen, setzen Sie den Wert der Eigenschaft capturedOnly auf TRUE und behalten für sqlLiteralSubstitution den Wert ENABLE bei. Wenn Sie die Anwendung ausführen und die Anwendung die Anweisung insert into autoGeneratedKy(name, salary, deptno) values('ABC', 50000, 11 ) ausgibt, gleicht pureQuery die Anweisung mit der parametrisierten Version in der pureQueryXML-Datei ab und führt sie aus.

Sie können pureQuery jedoch anweisen, SQL-Anweisungen nicht mit parametrisierten Anweisungen in der Datei capture_file.pdqxml abzugleichen. Vor Ausführung der Anwendung setzen Sie sqlLiteralSubstitution auf DISABLE. Wenn Sie die Anwendung ausführen und diese die Anweisung INSERT aus dem vorherigen Absatz ausgibt, hängt es vom Wert der Eigenschaft capturedOnly ab, ob pureQuery die Anweisung ausführt.

Werte für der Eigenschaft sqlLiteralSubstitution festlegen

In der folgenden Tabelle werden die drei Werte der Eigenschaft sqlLiteralSubstitution und die zugehörigen Auswirkungen aufgelistet. In der Tabelle wird außerdem gezeigt, was passiert, wenn Sie keinen Wert für diese Eigenschaft festlegen.

Tabelle 1. Auswirkungen des Festlegens bzw. Nichtfestlegens eines Wert für die Eigenschaft sqlLiteralSubstitution
Wert Auswirkungen, wenn Sie Anweisungen zum ersten Mal erfassen Auswirkungen der inkrementellen Erfassung Auswirkungen der Ausführung der Anwendung
ENABLE pureQuery ersetzt Literalwerte durch Parametermarken.

pureQuery erfasst außerdem den Stack-Trace für die ursprünglichen SQL-Anweisungen. Wenn pureQuery Stack-Traces für alle ursprünglichen SQL-Anweisungen erfassen soll, müssen Sie möglicherweise den Wert der Eigenschaft maxStackTracesCaptured erhöhen.

pureQuery berücksichtigt im Hinblick auf den Wert der Eigenschaft maxNonParmSQLciki nicht die Anzahl der ursprünglichen SQL-Anweisungen.

Wenn pureQuery eine SQL-Anweisung nicht parametrisieren kann, wird eine Warnung protokolliert.
Die Auswirkungen sind mit denen identisch, die beim erstmaligen Erfassen von SQL-Anweisungen auftreten. pureQuery versucht, SQL-Anweisungen mit parametrisierten SQL-Anweisungen in einer pureQueryXML-Datei abzugleichen.
DISABLE pureQuery ersetzt Literalwerte nicht durch Parametermarken. pureQuery ersetzt Literalwerte nicht durch Parametermarken. pureQuery versucht nicht, SQL-Anweisungen mit parametrisierten SQL-Anweisungen in einer pureQueryXML-Datei abzugleichen.
NOT_SET (oder nicht angegeben) pureQuery ersetzt Literalwerte nicht durch Parametermarken. Wenn der Wert ENABLE lautete, als pureQuery zuletzt Anweisungen in der angegebenen pureQueryXML-Datei erfasst hat, ersetzt pureQuery Literalwerte durch Parametermarken.

Wenn der Wert DISABLE lautet, ersetzt pureQuery Literalwerte nicht durch Parametermarken.
Wenn der Wert ENABLE lautete, als pureQuery zuletzt Anweisungen in der angegebenen pureQueryXML-Datei erfasst hat, versucht pureQuery, SQL-Anweisungen mit parametrisierten SQL-Anweisungen in einer pureQueryXML-Datei abzugleichen.

Wenn der Wert DISABLE lautete, versucht pureQuery nicht, SQL-Anweisungen mit parametrisierten SQL-Anweisungen in einer pureQueryXML-Datei abzugleichen.

Casting

Ab Version 2.2.0.1 unterstützt pureQuery zwei Castingtypen beim Ersetzen von Literalwerten durch Parametermarken.

Funktion CAST
Wenn eine SQL-Anweisung die Funktion CAST verwendet, um einen Literalwert in einen Datentyp umzusetzen, ersetzt pureQuery diesen Wert durch eine Parametermarke.

Beispiel: Wenn in einer Anweisung die Klausel WHERE mySMALLINTcolumn=CAST(32767999 as INTEGER) enthalten ist, wird der Wert 32767999 beim Erfassen der Anweisung zu einer Parametermarke.

Ein anderes Beispiel: Wenn Sie die CAST-Funktion CAST(6 as DECIMAL(3,3)) verwenden, wird bei Erfassen der Anweisung nur die '6' zu einer Parametermarke.

Benutzerdefinierte externe Skalarfunktionen, die CAST genannt werden, werden nicht unterstützt.

Implizites Casting
pureQuery kann implizites Casting von Literalwerten ausführen. pureQuery kann beispielsweise erkennen, dass der Literalwert in der Anweisung select DEPTNAME from DEPARTMENT WHERE DEPTNO = '1' ein numerischer Typ ist. Wenn Sie Ihre Anwendung ausführen, kann pureQuery den Zeichenfolgewert '1' durch den numerischen Wert 1 ersetzen, bevor die Anwendung die Anweisung für eine Datenbank ausführt.

Da die Konvertierung auf Datenbankclients stattfindet, können Sie in Datenbankverwaltungssystemen SQL-Anweisungen ausführen, die implizites Casting nicht unterstützen.

pureQuery unterstützt folgende Typen des impliziten Castings:

Zeichenfolgen in numerische Typen konvertieren
select DEPTNAME from DEPARTMENT WHERE DEPTNO = '1'
select DEPTNAME from DEPARTMENT WHERE DEPTNO BETWEEN '20' AND '30'
Numerische Typen in Zeichenfolgen konvertieren
select DEPTNO from DEPARTMENT WHERE DEPTNAME = 123456
Zeichenfolgen in DATETIME-Konstanten konvertieren
INSERT INTO DEPARTMENT VALUES(1,5,56,'000010','A00','aa','2008-09-09')

Einschränkungen


Feedback