0

いくつかのパラメーターを渡す Oracle プロシージャーを呼び出す T-SQL プロシージャーがあります。私のオラクル手順は正常に機能し、期待どおりに出力パラメーターを返します。ただし、T-SQL プロシージャから oracle プロシージャを呼び出すと、次のエラーが発生します。なぜこれを取得しているのか理解できません。両方の手順で Varchar が使用されています。


(影響を受ける 1 行) リンク サーバー "ORA_LINK_SERVER" の OLE DB プロバイダー "OraOLEDB.Oracle" がメッセージ "ORA-06502: PL/SQL: 数値または値のエラー ORA-06512: "DBNAME.GETSHELLACNOANDINSTRUCTIONNO"、7 行目で返されました"。

(1 行が影響を受けます)

(影響を受ける 1 行) メッセージ 7215、レベル 17、状態 1、プロシージャ USP_TXN_PF_CLIENT_URL_NEW、行 56 リモート サーバー 'ORA_LINK_SERVER' でステートメントを実行できませんでした。


これは私の T-SQL プロシージャです

    USE [TVE]
    GO
    /****** Object:  StoredProcedure [CompanyName].[USP_TXN_PF_CLIENT_URL]    Script Date: 12/29/2016 11:14:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


        --To test +
        /*
            Declare @ReturnString varchar(255)
            EXEC [CompanyName].[USP_TXN_PF_CLIENT_URL_NEW] 'CompanyName','50585609',@ReturnString = @ReturnString OUTPUT    
            select @ReturnString    
    */

   /*
        ALTER TABLE [dbo].[PF_CLIENT_URLS]  
        ADD [STATUS] VARCHAR(1) NULL  
        GO 


        SELECT * FROM [dbo].[PF_CLIENT_URLS]
    */
        ALTER PROCEDURE [CompanyName].[USP_TXN_PF_CLIENT_URL_NEW]
        (
            @IN_PMancoID        VARCHAR(10),
            @IN_PInvestorRef    VARCHAR(12),
            @ReturnString       varchar(255) OUTPUT 
        )
        AS
        BEGIN
        DECLARE @runStr VARCHAR(2000)
        DECLARE @URL varchar(36)
        DECLARE @MessageID AS VARCHAR(40), @RecipientID AS VARCHAR(40), @FileName VARCHAR(40),@ResponseFileName VARCHAR(40), @Message VARCHAR(500),
                @Cell VARCHAR(35), @OUT_ShellAccountNumber VARCHAR(40), @OUT_InstructionNumber VARCHAR(40)


        DECLARE @ParamKeys VARCHAR(max), @ParamValues VARCHAR(max), @Return_ID INT, @Current_User_ID INT,
                @ErrorNumber INT, @ErrorSeverity INT, @ErrorState INT, @ErrorLine INT, 
                @ErrorMessage nVARCHAR(2048), @LogInfo_ID INT, @ProcedureName NVARCHAR(126),
                @ProfileName VARCHAR(50), @Recipients VARCHAR(max), @Subject VARCHAR(100), @Body VARCHAR(max)

        Set @ProcedureName = 'YYYY.USP_PF_CLIENT_URL_NEW'
        Set @ParamKeys = '' 
        Set @ParamValues = ''
        set @URL = newID()

        Set @ParamKeys =    'IN_PMancoID' + '|' +
                            'IN_PInvestorRef' 


        Set @ParamValues =  ISNULL(CONVERT(VARCHAR(max),@IN_PMancoID),'NULL') + '|' +
                            ISNULL(CONVERT(VARCHAR(max),@IN_PInvestorRef),'NULL')

        exec [DYNAMIC].[ss_StoredProcLogInfo_Save]  @ProcName = @ProcedureName,
                                                    @ParameterKeys = @ParamKeys,
                                                    @ParameterValues = @ParamValues,
                                                    @User_ID = @Current_User_ID,
                                                    @Return_ID = @Return_ID OUTPUT

        exec ('CALL DBNAME.GETSHELLACNOANDINSTRUCTIONNO(?,?,?)', @IN_PInvestorRef, @OUT_ShellAccountNumber, @OUT_InstructionNumber) AT ORA_LINK_SERVER

        INSERT INTO [dbo].[TableName]([UserID],[MancoID],[Reference],[DateCreated],[LoginAttempts],[STATUS],[ShellAccount],[InstructionNumber]) 
        values(ISNULL(@URL, ''),'CompanyName',ISNULL(@IN_PInvestorRef, ''),getdate(),0,'I', ISNULL(@OUT_ShellAccountNumber,''),ISNULL(@OUT_InstructionNumber,'')) 

        set @ReturnString = @URL
        --Select @ReturnString as ReturnString
        END

そして、これは私のオラクル手順です。リンクサーバーは問題ありません。

CREATE OR REPLACE
PROCEDURE GETSHELLACNOANDINSTRUCTIONNO
( IN_PInvestorRef IN VARCHAR2(12)
, OUT_ShellAccountNumber OUT VARCHAR2(40)
, OUT_InstructionNumber OUT VARCHAR2(40)
) AS
BEGIN
  Select SHELL_ACCOUNT, INSTRUCTIONNUMBER into OUT_ShellAccountNumber, OUT_InstructionNumber
  from pf
  where client_id = IN_PInvestorRef;
  EXCEPTION WHEN OTHERS THEN
  dbms_output.put_line(SQLERRM);
END GETSHELLACNOANDINSTRUCTIONNO;
4

0 に答える 0