2016-07-13 23 views
2

知識の不足を許してください。私はsqlnavigatorから挿入関数を呼び出そうとしています。私はprm1.Valueをキャプチャすることができますが、私はRETURN NUMBER(以下のSQLを参照)をsqlnavigatorの私のパッケージ仕様からどのように含めるべきかわかりません。私がそれを実行すると、何もORACLEに追加されません。戻り値のある関数を呼び出す方法

Public Shared Function INSERT_CATEGORY() 

    Dim cmdOraCommand As New OracleCommand 

    Try 
     cmdOraCommand.CommandType = CommandType.StoredProcedure 
     cmdOraCommand.CommandText = "SF_ALEX_TEST.insertCategory" 

     Dim prm1 As OracleParameter = cmdOraCommand.Parameters.Add(_ 
      "inCategory", OracleType.VarChar) 
     prm1.Direction = ParameterDirection.Input 
     prm1.Value = strCategory 

    Catch ex As Exception 
     MsgBox(ex.Message) 

    Finally 
     cmdOraCommand.Dispose() 
    End Try 

End Function 

SQL/ORACLE

FUNCTION insertCategory(inCategory IN VARCHAR2) RETURN NUMBER 

IS 
    vReturnedValue NUMBER; 
    vID NUMBER; 
    vExist NUMBER; 
BEGIN 
    IF inCategory IS NULL THEN 

     vReturnedValue := 0; 
     RETURN vReturnedValue; 
    ELSE 

     BEGIN 
      SELECT COUNT(MNT_CATEGORY) INTO vExist 
      FROM MNT_CATEGORIES 
      WHERE MNT_CATEGORIES.MNT_CATEGORY = upper(inCategory); 
     END; 

     IF vExist = 0 THEN 
      BEGIN 
       SELECT SEQ_MNT_LOG.NEXTVAL INTO vID FROM DUAL; 

       INSERT INTO MNT_CATEGORIES(MNT_CATEGORY_ID, MNT_CATEGORY) 
       VALUES (vID, UPPER(inCategory)); 
       COMMIT; 

       vReturnedValue := vID; 
       RETURN vReturnedValue; 

       EXCEPTION 
       WHEN OTHERS THEN 
        vReturnedValue := SQLCODE; 
        RETURN vReturnedValue; 
      END; 

     ELSE 

      vReturnedValue := vExist * -1; 
      RETURN vReturnedValue; 
     END IF; 
    END IF; 
END; 

答えて

1

あなたは、コマンドを作成しますが、接続を開いたり、コマンドを実行していません。
また、パラメータを作成しますが、コマンドに追加することはありません。
戻り値を取得する場合は、ParameterDirection.Returnという別のパラメータも必要です。リーダーが閉じられるまで、そのパラメーターの値をチェックすることはできません。

Here are the docs

+0

スコット、答えてくれてありがとう。私は接続を開いてコマンドを実行しました。さらに、私は 'ParameterDirection.ReturnValue'を使いました。 –

0

これは、Oracle/sqlnavigatorと正しく通信するためにVB.netコードを修正した方法です。

おかげ@Scott Hannen

Public Shared Function INSERT_CATEGORY() As Boolean 

    Dim cmdMntID As New OracleCommand 
    cmdMntID.CommandType = CommandType.StoredProcedure 
    cmdMntID.CommandText = "SF_ALEX_TEST.insertCategory" 

    Dim prm1 As OracleParameter = cmdMntID.Parameters.Add("inCategory", OracleType.VarChar) 
    prm1.Direction = ParameterDirection.Input 
    prm1.Value = strCategory 

    cmdMntID.Parameters.Add("vID", OracleType.Number).Direction = ParameterDirection.ReturnValue 

    cmdMntID.Connection = ORA_CON 

    cmdMntID.ExecuteNonQuery() 

    vID = cmdMntID.Parameters("vID").Value 

    If cmdMntID.Parameters("vID").Value > 1 Then 
     Return True 
    Else 
     Return False 
    End If 

End Function 
+0

それがうまくいったら、それを回答としてマークすることを忘れないでください。ありがとう –