Dient dem Einfügen von Werten in die Tabelle „AnyValues“ der Tabelle „tempdb“. (Wird z.B. für „ra_InsertRating_Pu“ oder fo_SearchPostings_Pu benötigt.)
Anmerkung:
Grundsätzliche Vorgehensweise der mi_InsertTemp...-Prozeduren für Tabellen der Datenbank „tempdb“: In den „Listen-Parametern“ werden Werte (durch '¶' getrennt bzw. durch eine in einem Parameter der Art „Separator“ anzugebende Zeichenkette) übergeben, aus denen die jeweilige Prozedur einen Datensatz bildet und in die zugehörige Tabelle einfügt. Der erste Datensatz wird aus den jeweils ersten Elementen der „Listen-Parameter“ zusammengesetzt, der zweite Datensatz aus den jeweils zweiten Elementen usw. Das bedeutet insbesondere, daß alle „Listen-Parameter“ die GLEICHE Anzahl Elemente enthalten müssen, sonst gibt es einen Fehler („-500“).
Hintergrund:
Für stored procedures gibt es leider keine „array“-Parameter. Als work-around werden sogenannte permanente, temporäre Tabellen (in der speziellen Datenbank „tempdb“) verwendet. Da mehrere Prozesse diese Tabellen gleichzeitig verwenden können, gibt es in jeder dieser Tabellen eine Spalte „spid“, damit jeder Prozeß seine (eindeutige) „Server-Process-ID“ („SELECT spid“) zusammen mit den gewünschten Daten speichern kann. So wird verhindert, daß Prozesse (versehentlich oder absichtlich) auf Daten anderer Prozesse zugreifen können.
Hinweis:
Ist in „ValueList“ die „Separator“-Zeichenkette zweimal direkt hintereinander enthalten oder endet der Wert auf „Separator“, dann enthält die Liste quasi ein „leeres Element“. Dies wird IMMER als '' interpretiert, weil die „Value“-Spalte von „tempdb.dbo.AnyValues“ keine „NULL“-Werte erlaubt.
Anmerkung zum Parameter „CheckByteLengthForStrings“ :
Die Werte in „ValueList“ sind „string“-Werte und haben daher eine maximale Länge, nämlich 1000 Bytes (nicht etwa Zeichen). Falls ein Element diese Grenze überschreitet, würde das Einfügen in „tempdb.dbo.AnyValues“ zwar trotzdem gelingen, aber es würden unbemerkt Zeichen (am Ende) abgeschnitten und somit verloren gehen. Mit „CheckByteLengthForStrings“ kann daher gesteuert werden, ob dieses unbemerkte „truncate“n ok ist („0“) oder ob vorher geprüft und gegebenenfalls ein Fehler geworfen werden soll („1“).
HTTP-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | miscellaneous |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.1 (2013-08-07) |
Name 1) | Standard-Wert | Beschreibung 2) | SQL-Datentyp3) | ab Version |
---|---|---|---|---|
IDList | Liste von IDs (durch <Separator> getrennt) - die angegebenen Werte werden in der Spalte „ID“ gespeichert | varchar(16384) | 3.5.0 | |
ValueList | Liste von (beliebigen) Werten (durch <Separator> getrennt) - die angegebenen Werte werden in der Spalte „Value“ gespeichert | varchar(16384) | 3.5.0 | |
Delete | 0 | „0“ : Keine Daten vorher löschen „1“ : Alle Datensätze zur „spid“ vorher löschen | bit | 3.5.0 |
Separator | '¶' | Gibt an, durch welche Zeichenkette die Werte in den „Listen-„Parametern (“…List“) getrennt sind | varchar(4) | 4.0.1 |
CheckByteLengthForStrings | 0 | Gibt an, ob für die einzelnen Elemente in „ValueList“ geprüft werden soll, ob die maximale Anzahl Bytes überschritten ist („1“) oder nicht („0“) | bit | 7.0.0 |
Die Prozedur hat keine Rückgaben.
Die Prozedur hat keine Output-Parameter.
Code | Beschreibung | Quelle 4) |
---|---|---|
-500 | Falsche Parameter | nur direkt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
7.0.1 | 2013-08-07 | Anpassungen aufgrund der Datentyp-Erweiterung der „Value“-Spalte der Tabelle „tempdb.dbo.AnyValues“ ⇒ auch Anpassung der Doku bzgl. „CheckByteLengthForStrings“ |
7.0.0 | 2013-06-04 | Neuer Parameter „CheckByteLengthForStrings“ |
6.5.3 | 2013-03-18 | Fehler durch die letzte Änderung behoben : Entgegen der Doku gab es einen Fehler [„-500“], wenn in „ValueList“ ein „leeres Element“ übergeben wurde [In diesem Zusammenhang wurde auch die Doku präzisiert : Grund erläutert für das Verhalten] |
6.5.0 | 2012-09-17 | 1. Die „…List“-Parameter wurden erweitert [von „255“ auf „16384“] 2. „Separator“ wurde erweitert [von „1“ auf „4“] 3. Anpassungen an den aktuellen Quellcode-Standard 4. Etwas optimierte Abarbeitung |
4.0.14 | 2004-06-03 | 1. Neue Möglichkeit ''-Werte für „Value“ eintragen zu können. ⇒ Entsprechende Überarbeitung der Doku ! 2. Es gab bisher keinen Fehler [entgegen der Doku], wenn in „ValueList“ MEHR Elemente angegeben wurden, als im Parameter „IDList“ ! |
4.0.9 | 2004-03-03 | Fehler : An einer Stelle wurde mitten in der Transaktion ein „return(-500)“ geworfen - ohne ein „rollback tran“ ! |
4.0.1 | 2003-05-16 | Neuer Parameter „Separator“ |
3.5.13 | 2001-12-06 | |
3.5.0 | 2000-11-23 | Erstmalig in dieser Version erstellt |
Es handelt sich um eine Methode zum Füllen von Schnittstellentabelle wie in Hintergrundinformationen zu Engine-Prozeduren erläutert. Die Methode kann ausschließlich per engine/execute in einem gemeinsamen Batch mit komplementären Prozeduren verwendet werden.
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="mi_InsertTempdb_AnyValues"> <Parameters/> </Procedure> </Batch> </ListOfBatches>