У меня есть хранимая процедура, которая, когда я вызываю ее из графического интерфейса MSSQL Server. Она возвращает результаты правильно. Но когда я вызываю ту же процедуру из своего кода C++, она выполняется правильно, но не дает результатов выходного параметра.
Я попробовал хранимую процедуру, просто возвращая выходные данные, не делая ничего другого, это удалось, но приведенная ниже хранимая процедура терпит неудачу. Я думаю, что во время выполнения хранимой процедуры происходит что-то не так.
Вот моя хранимая процедура:
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'putFileinFTandJT' AND type = 'P')
DROP PROCEDURE putFileinFTandJT
GO
CREATE PROCEDURE putFileinFTandJT
/* Put incoming file in File Table & Job Table */
/* IN */ @input varchar(max),
/* IN */ @flName varchar(max),
/* IN */ @uid INT,
/* IN */ @jbid INT,
/* OUT */@t INT OUTPUT,
/* OUT */@t1 INT OUTPUT
AS
DECLARE @orgFileID INT = -1;
DECLARE @temp1 INT;
DECLARE @newFileID INT;
DECLARE @versionCnt INT = 0;
/* SET autocommit = 0; */
EXEC getDirId @input,@temp1 OUTPUT ;
if @temp1 = -1
EXEC putDir @uid,@input,@temp1 OUTPUT;
select @orgFileID = FileID from FileTable where DirID=@temp1 and FileName=@flName and VersionNumber = 0;
IF @orgFileID = -1
BEGIN
set @orgFileID = 0;
insert into FileTable(FileName,DirID,IsDirectory,UserID,VersionNumber,isduplicate) values(@flName,@temp1,0,@uid,0,0);
END
ELSE
BEGIN
select @versionCnt = count(*) from VersionTable where FileID = @orgFileID;
insert into FileTable(FileName,DirID,IsDirectory,UserID,VersionNumber,isduplicate) values(@flName,@temp1,0,@uid,@versionCnt + 1,0);
SET @versionCnt = @versionCnt + 1;
END
select @newFileID = FileID from FileTable where FileName = @flName and DirID = @temp1 and VersionNumber = @versionCnt;
insert into JobTable values(@jbid,@newFileID);
commit;
set @t = @newFileID;
set @t1 = @orgFileID;
У меня есть хранимая процедура, которая, когда я вызываю ее из графического интерфейса MSSQL Server. Она возвращает результаты правильно. Но когда я вызываю ту же процедуру из своего кода C++, она выполняется правильно, но не дает результатов выходного параметра. Я попробовал хранимую процедуру, просто возвращая выходные данные, не делая ничего другого, это удалось, но приведенная ниже хранимая процедура терпит неудачу. Я думаю, что во время выполнения хранимой процедуры происходит что-то не так. Вот моя хранимая процедура:
[code]IF EXISTS (SELECT name FROM sysobjects WHERE name = 'putFileinFTandJT' AND type = 'P') DROP PROCEDURE putFileinFTandJT GO CREATE PROCEDURE putFileinFTandJT /* Put incoming file in File Table & Job Table */
/* IN */ @input varchar(max), /* IN */ @flName varchar(max), /* IN */ @uid INT, /* IN */ @jbid INT, /* OUT */@t INT OUTPUT, /* OUT */@t1 INT OUTPUT
AS DECLARE @orgFileID INT = -1; DECLARE @temp1 INT; DECLARE @newFileID INT; DECLARE @versionCnt INT = 0;
/* SET autocommit = 0; */ EXEC getDirId @input,@temp1 OUTPUT ; if @temp1 = -1 EXEC putDir @uid,@input,@temp1 OUTPUT;
select @orgFileID = FileID from FileTable where DirID=@temp1 and FileName=@flName and VersionNumber = 0; IF @orgFileID = -1 BEGIN set @orgFileID = 0; insert into FileTable(FileName,DirID,IsDirectory,UserID,VersionNumber,isduplicate) values(@flName,@temp1,0,@uid,0,0); END ELSE BEGIN select @versionCnt = count(*) from VersionTable where FileID = @orgFileID; insert into FileTable(FileName,DirID,IsDirectory,UserID,VersionNumber,isduplicate) values(@flName,@temp1,0,@uid,@versionCnt + 1,0); SET @versionCnt = @versionCnt + 1; END select @newFileID = FileID from FileTable where FileName = @flName and DirID = @temp1 and VersionNumber = @versionCnt; insert into JobTable values(@jbid,@newFileID); commit; set @t = @newFileID; set @t1 = @orgFileID; [/code]
У нас есть база данных в Sybase, к которой мы обращаемся с сервера Java.
Доступ к базе данных осуществлялся непосредственно через драйвер Sybase с помощью DriverManager. Он работал корректно, мы смогли вызвать наши хранимые процедуры.
У нас есть база данных в Sybase, к которой мы обращаемся с сервера Java.
Доступ к базе данных осуществлялся непосредственно через драйвер Sybase с помощью DriverManager. Он работал корректно, мы смогли вызвать наши хранимые процедуры.
Я переписываю веб-приложение PHP для использования хранимых процедур MySQL, и все шло хорошо, пока я не написал довольно сложную хранимую процедуру, использующую временную таблицу, курсор и ряд переменных.
У меня есть метод GetUserPermissions, который возвращает строки разрешений пользователя из БД с использованием хранимой процедуры на основе UserId, который передается в параметре метода, но проблема в том, что он возвращает все строки таблицы, если...
У меня есть метод GetUserPermissions, который возвращает строки разрешений пользователя из базы данных с помощью хранимой процедуры на основе UserId, который передается в качестве параметра. Проблема в том, что он возвращает все строки, если в...