Een ogenblik geduld aub...
De website wordt geladen...
Twitter LinkedIn Vimeo YouTube Facebook
Knowledge Base
Instellingen voor retourneren van een recordset vanuit een Call Procedure (OLEDB) stap.
Id: 000028 | Datum: 17-10-2017 | Producten: TaskCentre
Middels de Call Procedure (OLEDB) stap van Taskcentre is het mogelijk om een stored procedure uit te voeren binnen een SQL database. Een van de functionaliteiten die deze stap heeft is het teruggeven van een recordset bij het uitvoeren van deze stap. Men kan op het tabblad "Recordset" van deze stap het hiervoor benodigde vinkje aanzetten om van deze instelling gebruik te maken.



(Afbeelding 1: De instelling binnen de Call Procedure (OLEDB) stap welke aangeeft dat deze procedure een recordset retourneert

Het is mogelijk dat men een procedure uitvoert welke geen recordset retourneert terwijl dit wel de verwachting was. Dit document detailleert de benodigde opzet van de stored procedure om een recordset correct te retourneren.

Oorzaak


Bij het uitvoeren van een stored procedure verwacht Orbis Taskcentre dat de eerste executie binnen de stored procedure de recordset retourneert die men wil gebruiken. Een executie is hierbij een actie op de database zoals een UPDATE, INSERT of SELECT. Neem onderstaande inhoud van een stored procedure als voorbeeld:

INSERT INTO Products VALUES ('ORBTC10','Orbis Taskcentre 10 taken editie')
INSERT INTO Products VALUES ('ORBTC25','Orbis Taskcentre 25 taken editie')
Select * FROM Products


In de bovenstaande query worden drie executies uitgevoerd. De eerste twee executies zijn de INSERT statement, gevolg door een derde executie is de vorm van de SELECT statement. Daar de eerste INSERT statement geen regels retourneert zal Taskcentre geen recordset vinden wanneer deze stored procedure aangeroepen wordt. Wanneer men de query echter omdraait zal Taskcentre wel resultaten vinden.

Select * FROM Products
INSERT INTO Products VALUES ('ORBTC10','Orbis Taskcentre 10 taken editie')
INSERT INTO Products VALUES ('ORBTC25','Orbis Taskcentre 25 taken editie')


Bij de bovenstaande query zijn de SELECT en INSERT statements omgedraaid. Daar de SELECT statement nu de eerste executie binnen de procedure is zal Taskcentre correct een recordset retourneren binnen de taak. Echter: door het omdraaien van de volgorde van de procedure veranderd ook de werking van de procedure. In deze situatie voegen we regels aan een tabel nadat we deze eerst opgehaald hebben. We zullen in de geretourneerde recordset dus niet de beschikking krijgen over de nieuwe data. Dit kan functioneel gezien onwenselijk zijn, waardoor een alternatieve oplossing een beter resultaat kan geven.

Oplossing


Binnen SQL bestaat de NOCOUNT functie welke men aan en uit kan zetten binnen een procedure. Deze NOCOUNT functie onderdrukt het retourneren van het aantal regels dat een executie oplevert wanneer deze uitgevoerd wordt.

Deze NOCOUNT kan ingezet worden om Taskcentre een recordset van een specifieke executie op te laten halen. Neem als voorbeeld onderstaande query:

SET NOCOUNT ON
INSERT INTO Products VALUES ('ORBTC10','Orbis Taskcentre 10 taken editie')
INSERT INTO Products VALUES ('ORBTC25','Orbis Taskcentre 25 taken editie')
SET NOCOUNT OFF

Select * FROM Products


In de bovenstaande query zetten we NOCOUNT aan voordat we regels gaan toevoegen in de database, en zetten we deze wederom uit zodra we de SELECT willen gebruiken om regels op te halen. Alle interacties met de database die omsloten worden door een NOCOUNT tellen niet als een executie vanuit het perspectief van Orbis Taskcentre: In de bovenstaande query zal de SELECT statement als eerste interactie met de database gezien worden, waardoor de "This procedure returns a recordset" optie correct data van de SELECT zal retourneren.
ID: 000028
Datum: 17-10-2017
Heeft betrekking op de volgende producten:
TaskCentre
Heeft u vragen, of wellicht ondersteuning nodig? Neem dan via onze Orbis Portal contact op met onze helpdesk.
LinkedIn Vimeo YouTube