Oracleでは、
次のように、入出力パラメータ(入力または出力だけでなく)を宣言できます。
Create Or Replace Procedure USERTEST.SimpleInOutProcedure(
p_InputInt Int,
p_OutputInt out Int,
p_InputOutputInt in out Int
) AS
BEGIN
p_OutputInt := p_InputInt + 1;
p_InputOutputInt := p_InputOutputInt + p_InputOutputInt;
END;
ただし、SQL Serverでそのような宣言を試みると、スクリプトはコンパイルされません。
create procedure SimpleInOutProcedure
@p_InputInt int, @p_OutputInt int input output
As
Begin
Select * from TestTableCommonA;
End
Wordの「入力」は予期されていないため、SQL Server Management Studioでは青色ではありません。
スクリプトの何が問題になっていますか?SQL Serverストアドプロシージャ/関数で入出力パラメーターを宣言する方法は?
これは、以前にOracle DB用に作成され、in/outパラメーター用のリーダーを持つSQL Server DB用の「同等の」リーダーを作成する必要があるためです。
パラメータをOUTPUTとして宣言すると、入力と出力の両方として機能します
CREATE PROCEDURE SimpleInOutProcedure
(
@p_InputInt INT,
@p_OutputInt INT OUTPUT
)
AS
BEGIN
SELECT
@p_OutputInt = @p_OutputInt
END
GO
DECLARE @p_OutputInt int = 4
EXEC SimpleInOutProcedure @p_InputInt = 1, @p_OutputInt = @p_OutputInt OUTPUT
SELECT @p_OutputInt
これは、SQL入力および出力パラメーターのサンプルコードです。
CREATE PROCEDURE [dbo].[sample_Insert]
@name varchar(500),
@entryby int,
@RetVal INT = 0 OUT
AS
SET NOCOUNT ON
INSERT INTO dbo.Master
( name ,
entry_date ,
entry_by
)
VALUES ( @name , -- service_name - varchar(1000)
dbo.GetActDate() , -- entry_date - datetime
@entryby -- entry_by - int
)
IF @@ERROR = 0
BEGIN
SET @RetVal = 1 -- 1 IS FOR SUCCESSFULLY EXECUTED
End
ELSE
BEGIN
SET @RetVal = 0 -- 0 WHEN AN ERROR HAS OCCURED
End
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON