Hi, hab folgendes Prob:
Ich entwickle öfters Stored Procedures und da werden die abfragen immer zusammgestellt und mit parametern gefüllt bis sie letztendlich ausgeführt werden.
Nun denn, wenn diese Query bei aufruf der procedure ausgeführt wird und sie fehlerhaft ist, ist die abfrage verloren und man kann in den strings suchen wo wohl ein fehler seien könnte.
Das is suboptimal und deswegen habe ich eine Procedure geschrieben, welche die abfrage eben abspeichert und man im nachhineien mit einem kleinen tool bequem abfragen kann. Unter Oracle läuft das alles super nur unter MS SQL gibst probleme.
Zur Funktionsweise:
Normalerweise wird ein Rollback ausgeführt womit alle möglichen änderungen der aufrufenden procedure rückgängig gemacht wird.
Die schleife trennt die query wieder in 4000er blöcke zum abspeichern.
Dann ein Commit damit die Abfrage auch gespeichert bleibt.
Dann ein Provozierter Fehler damit der ganze Aufruf abbricht.
Nun zum Problem: Das Rollback will er nicht nehmen ohne vorher ein begin transaction zu haben. Das gibst aber ja nich. Kommentier ich es aus und will nur ein commit machen kriege ich die meldung ich sollte ein begin transaction haben. Gut, wenn das auskommentiert ist und ich rufe die methode auf kommt folgende meldung:
">>>>> Query gespeichert <<<<<<
Server: Nachr.-Nr. 2812, Schweregrad 16, Status 62, Zeile 30
Die gespeicherte Prozedur Select id from Nothing konnte nicht gefunden werden."
Also angeblich beim while... Das Commit bringt aber garnichts, denn in der Tabelle steht nüscht!
Wie gesagt, unter Oracle läuft der kram. Hoffentlich kann jemand was mit meiner beschreibung anfangen und mir helfen...
Ich entwickle öfters Stored Procedures und da werden die abfragen immer zusammgestellt und mit parametern gefüllt bis sie letztendlich ausgeführt werden.
Nun denn, wenn diese Query bei aufruf der procedure ausgeführt wird und sie fehlerhaft ist, ist die abfrage verloren und man kann in den strings suchen wo wohl ein fehler seien könnte.
Das is suboptimal und deswegen habe ich eine Procedure geschrieben, welche die abfrage eben abspeichert und man im nachhineien mit einem kleinen tool bequem abfragen kann. Unter Oracle läuft das alles super nur unter MS SQL gibst probleme.
Code:
CREATE TABLE mtemp.msp_savequery(
StoredProcID int,
LfdNr int,
Query VARCHAR(4000)
);
if exists (select name from sysobjects
where name = N'MSP_SAVEQUERY2'
and type = 'P')
drop procedure MTEMP.MSP_SAVEQUERY2
go
CREATE PROCEDURE mtemp.MSP_SAVEQUERY2(
@StoredProcID int,
@query varchar)
AS
begin
declare
@v_x int,
@v_lfdnr int,
@errorCommand varchar(200)
set @v_x = 1
set @v_lfdnr = 0
-- Rollback
-- BEGIN TRANSACTION
WHILE @v_x < Len(@query)
begin
INSERT INTO mtemp.msp_savequery VALUES(
@StoredProcId,
@v_lfdnr,
substring(@query,@v_x,4000)
);
set @v_x = @v_x+4000;
set @v_lfdnr = @v_LfdNr +1;
END
COMMIT
print '>>>>> Query gespeichert <<<<<<'
set @errorCommand = 'Select id from Nothing'
exec @errorCommand
END
Zur Funktionsweise:
Normalerweise wird ein Rollback ausgeführt womit alle möglichen änderungen der aufrufenden procedure rückgängig gemacht wird.
Die schleife trennt die query wieder in 4000er blöcke zum abspeichern.
Dann ein Commit damit die Abfrage auch gespeichert bleibt.
Dann ein Provozierter Fehler damit der ganze Aufruf abbricht.
Nun zum Problem: Das Rollback will er nicht nehmen ohne vorher ein begin transaction zu haben. Das gibst aber ja nich. Kommentier ich es aus und will nur ein commit machen kriege ich die meldung ich sollte ein begin transaction haben. Gut, wenn das auskommentiert ist und ich rufe die methode auf kommt folgende meldung:
">>>>> Query gespeichert <<<<<<
Server: Nachr.-Nr. 2812, Schweregrad 16, Status 62, Zeile 30
Die gespeicherte Prozedur Select id from Nothing konnte nicht gefunden werden."
Also angeblich beim while... Das Commit bringt aber garnichts, denn in der Tabelle steht nüscht!
Wie gesagt, unter Oracle läuft der kram. Hoffentlich kann jemand was mit meiner beschreibung anfangen und mir helfen...