Workaround 1 - use an explicit cast
- Last UpdatedJan 04, 2023
- 1 minute read
- PI System
- PI SQL Client ODBC 2021
- Developer
Cast the comparison strings explicitly to . This will force Oracle to parameterize the condition. However, the remote query is still split into multiple remote queries and the is performed locally.
For example,
SELECT e."Name" Element, ea."Name" Attribute,
a."TimeStamp", a."Value", a."Value_Double"
FROM Element.Element@pi e
INNER JOIN Element.Attribute@pi ea ON ea."ElementID" = e.ID
INNER JOIN Element.Archive@pi a ON a."AttributeID" = ea.ID
WHERE a."TimeStamp" BETWEEN '25-APR-2019' AND '26-APR-2019'
AND e."Name" = cast('Houston' as NVARCHAR2(40))
AND ea."Name" = cast('Environment' as NVARCHAR2(40))
ORDER BY e."Name", ea."Name";
The trace file contains:
.
.
.
SQL text from hgopars, id=1, len=58 ...
00: 53454C45 43542022 4944222C 224E616D [SELECT "ID","Nam]
10: 65222046 524F4D20 22454C45 4D454E54 [e" FROM "ELEMENT]
20: 222E2245 4C454D45 4E542220 57484552 ["."ELEMENT" WHER]
30: 4520224E 616D6522 3D3F [E "Name"=?]
.
.
.
SQL text from hgopars, id=2, len=72 ...
00: 53454C45 43542022 4944222C 224E616D [SELECT "ID","Nam]
10: 65222C22 456C656D 656E7449 44222046 [e","ElementID" F]
20: 524F4D20 22454C45 4D454E54 222E2241 [ROM "ELEMENT"."A]
30: 54545249 42555445 22205748 45524520 [TTRIBUTE" WHERE ]
40: 224E616D 65223D3F ["Name"=?]
.
.
.
SQL text from hgopars, id=3, len=120 ...
00: 53454C45 43542022 41747472 69627574 [SELECT "Attribut]
10: 65494422 2C225469 6D655374 616D7022 [eID","TimeStamp"]
20: 2C225661 6C756522 2C225661 6C75655F [,"Value","Value_]
30: 446F7562 6C652220 46524F4D 2022454C [Double" FROM "EL]
40: 454D454E 54222E22 41524348 49564522 [EMENT"."ARCHIVE"]
50: 20574845 52452022 54696D65 5374616D [ WHERE "TimeStam]
60: 70223E3D 3F20414E 44202254 696D6553 [p">=? AND "TimeS]
70: 74616D70 223C3D3F [tamp"<=?]
.
.
.