Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:mi_inserttemp_characconditions

mi_InsertTemp_CharacConditions

Dient dem Einfügen von Werten in die Tabelle „CharacteristicConditions“ der Tabelle „tempdb“. (Wird z.B. für im_SearchProductTreeNodes_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.

Wichtiger Hinweis:
Ist in einem „…List“-Parameter „Separator“ zweimal direkt hintereinander enthalten oder ist „Separator“ die ERSTE/LETZTE Zeichenkette des „…List“-Parameters, dann enthält die Liste quasi ein „leeres Element“. Sind die Werte nun „strings“, ist nicht klar, ob dies als „NULL“ oder '' zu interpretieren ist !
Daher wurde folgende Konvention getroffen :
Bei „string“-Spalten, die auch „NULL“ sein dürfen, wird ein leeres Element als '' interpretiert, bei allen anderen bedeutet es „NULL“. Betroffen sind in diesem Fall die Parameter

  • Operator1List
  • Condition1List
  • Operator2List
  • Condition2List

Möchte man nun aber für eine „string“-Spalte „NULL“ einfügen, muß man für den entsprechenden „…List“-Parameter „NULL“ angeben !
Somit kann man in diesem Fall leider nur GENAU EINEN Datensatz übergeben - wegen der Bedingung, daß die Anzahl Elemente in den „…List“-Parametern gleich sein muß.

Anmerkung zum Parameter „CheckByteLengthForStrings“ :
Die Werte in den Listen „Operator…List“ und „Condition…List“ sind „string“-Werte und haben daher eine maximale Länge, und zwar hinsichtlich der Anzahl Bytes (nicht etwa Anzahl Zeichen). Bei den „Operator…“-Werten ist die maximale Byte-Länge „2“ und bei den „Condition…“-Werten sind es „2500“ bzw. „1000“ Bytes. Falls ein Element diese Grenze überschreitet, würde das Einfügen in „tempdb.dbo.CharacteristicConditions“ zwar trotzdem gelingen, aber es würden unbemerkt Zeichen (am Ende) abgeschnitten und somit verlorengehen. 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“).

Beispiele :
1. Ein Aufruf mit „ CharacteristicIDLIst = '1¶2' “ und „ Operator1List = NULL “ liefert einen Fehler.
2. „ CharacteristicIDLIst = '1' “ und „ Operator1List = NULL “ ist korrekt; es wird (andere Fehler einmal ausgeschlossen) genau ein Datensatz mit „CharacteristicID = 1“ eingefügt, wobei die Spalte „Operator1“ mit „NULL“ belegt wird.
3. Übergibt man „ CharacteristicIDLIst = '1¶2' “ und „ Operator1List = '<¶' “ führt dies (sofern keine anderen Fehler vorhanden sind natürlich) dazu, daß zwei Datensätze eingetragen werden, wobei der zweite in der Spalte „Operator1“ dann den Wert '' (und nicht etwa „NULL“) enthält !

HTTP-MethodPOST
HTTP-AuthOptional
Aliasmi_InsertTempdb_CharacteristicConditions
Tags
Engine-Kategoriemiscellaneous
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.2 (2013-08-29)

Parameter

Name 1) Standard-Wert Beschreibung 2) SQL-Datentyp3) ab Version
CharacteristicIDList Liste von (Merkmal-)IDs (durch <Separator> getrennt) - die angegebenen Werte werden in der Spalte „CharacteristicID“ gespeichert
varchar(16384)3.5.20
BasicFieldTypeIDList Liste von IDs von Basis-Feld-Typen (durch <Separator> getrennt) - die angegebenen Werte werden in der Spalte „BasicFieldTypeID“ gespeichert
varchar(16384)3.5.20
Operator1List Liste (durch <Separator> getrennt) der einzufügenden Vergleichsoperatoren (für den ersten Teil der Bedingung) - die angegebenen Werte werden in der Spalte „Operator1“ gespeichert
varchar(16384)3.5.20
Condition1List Liste (durch <Separator> getrennt) der einzufügenden Vergleichswerte (für den ersten Teil der Bedingung) - die angegebenen Werte werden in der Spalte „Condition1“ gespeichert
varchar(16384)3.5.20
Operator2List (Optional) Liste (durch<Separator> getrennt) der einzufügenden Vergleichsoperatoren (für den zweite Teil der Bedingung) - die angegebenen Werte werden in der Spalte „Operator2“ gespeichert
varchar(16384)3.5.20
Condition2List (Optional) Liste (durch <Separator> getrennt) der einzufügenden Vergleichswerte (für den zweiten Teil der Bedingung) - die angegebenen Werte werden in der Spalte „Condition2“ gespeichert
varchar(16384)3.5.20
EstimatedRowsAffectedList Liste von Zahlen (durch <Separator> getrennt), die die geschätzte Anzahl Datensätze, die die angegebene(n) Bedingunge(n) erfüllen, angibt - die angegebenen Werte werden in der Spalte „EstimatedRowsAffected“ gespeichert
varchar(16384)3.5.20
Delete0 „0“ : Keine Daten vorher löschen
„1“ : Alle Datensätze zur „spid“ vorher löschen
bit3.5.20
Separator'¶' Gibt an, durch welche Zeichenkette die Werte in den „Listen-„Parametern (“…List“) getrennt sind
varchar(4)4.0.1
CheckByteLengthForStrings0 Gibt an, ob für die einzelnen Elemente in den „Operator…List“- und „Condition…List“-Parametern geprüft werden soll, ob die maximale Anzahl Bytes überschritten ist („1“) oder nicht („0“)
bit7.0.0

Rückgabe

Die Prozedur hat keine Rückgaben.

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 4)
-500Falsche Parameternur direkt

XML-Schema

Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.

Historie

7.0.2 2013-08-29Anpassung im Fall „CheckByteLengthForStrings = 1“, weil die „Condition…“-Spalten von
„tempdb.dbo.CharacteristicConditions“ erweitert wurden ⇒ Auch Anpassung der Doku
7.0.0 2013-06-041. Datentyp der „…List“-Parameter wurde jeweils erweitert [von „255“ auf „16384“]
2. Neuer Parameter „CheckByteLengthForStrings“
6.5.3 2013-03-181. „Separator“ wurde erweitert [von „1“ auf „4“]
2. Anpassungen an den aktuellen Quellcode-Standard
3. Etwas optimierte Abarbeitung
4.0.14 2004-06-031. Neu-Kodierung der Prozedur aufgrund der Möglichkeit „NULL“-Werte bzw. ''-Werte in einigen Spalten eintragen zu können
2. Es gab bisher keinen Fehler, wenn in einem „…List“-Parameter MEHR Elemente angegeben wurden, als in „BasicFieldTypeIDList“ !
4.0.1 2003-05-16Neuer Parameter „Separator“
3.5.20 2002-07-22Erstmalig in dieser Version erstellt

Code-Snippets

Engine Playground

Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:

cURL

Unformatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/mi_InsertTemp_CharacConditions?CharacteristicIDList=<value>&BasicFieldTypeIDList=<value>&Operator1List=<value>&Condition1List=<value>&Operator2List=<value>&Condition2List=<value>&EstimatedRowsAffectedList=<value>'

Mit xmllint 5) formatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/mi_InsertTemp_CharacConditions?CharacteristicIDList=<value>&BasicFieldTypeIDList=<value>&Operator1List=<value>&Condition1List=<value>&Operator2List=<value>&Condition2List=<value>&EstimatedRowsAffectedList=<value>' | xmllint --format -
dStore_php
use dStore_php\WebService;
 
$service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80);
 
$request = new WebService\Requests\Engine\Procedure\Request(
			new WebService\Requests\AccessData('default'),
	'mi_InsertTemp_CharacConditions',
		array(
			'CharacteristicIDList' => '<value>',
			'BasicFieldTypeIDList' => '<value>',
			'Operator1List' => '<value>',
			'Condition1List' => '<value>',
			'Operator2List' => '<value>',
			'Condition2List' => '<value>',
			'EstimatedRowsAffectedList' => '<value>',
			// 'Delete' => 0,
			// 'Separator' => '¶',
			// 'CheckByteLengthForStrings' => 0
		)
);
 
$service->execute($request);
 
			$xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument();
			$ResultSet = $xml_result->getRowsAsArray();
engine/execute

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_InsertTemp_CharacConditions">
			<Parameters>
				<Parameter Name="CharacteristicIDList"><!-- varchar value --></Parameter>
				<Parameter Name="BasicFieldTypeIDList"><!-- varchar value --></Parameter>
				<Parameter Name="Operator1List"><!-- varchar value --></Parameter>
				<Parameter Name="Condition1List"><!-- varchar value --></Parameter>
				<Parameter Name="Operator2List"><!-- varchar value --></Parameter>
				<Parameter Name="Condition2List"><!-- varchar value --></Parameter>
				<Parameter Name="EstimatedRowsAffectedList"><!-- varchar value --></Parameter>
				<!-- <Parameter Name="Delete">0</Parameter> -->
				<!-- <Parameter Name="Separator">'¶'</Parameter> -->
				<!-- <Parameter Name="CheckByteLengthForStrings">0</Parameter> -->
			</Parameters>
		</Procedure>
	</Batch>
</ListOfBatches>
1)
Pflichtparameter sind unterstrichen
4)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
5)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/mi_inserttemp_characconditions.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)