2011-08-05 15 views
4

戻り値 UPDATE、INSERTおよびDELETE文の場合、戻り値はコマンドの影響を受ける行数です。 CREATE TABLEおよびDROP TABLEステートメントの場合、戻り値は0です。他のすべてのタイプのステートメントの場合、戻り値は-1です。Oracle.DataAccessの戻り値が非問合せ(ストアド・プロシージャ)を実行します

これは、関数の返り値について、マイクロソフトが文書化していることです...つまり、ストアドプロシージャを呼び出すと、-1が返されますか?

明確にするために、どのような返り値Iは、ストアドプロシージャ、ストアドプロシージャの実行が成功したときの場合や、受け取ることを期待すべきではいくつかの理由で実行できませんでした...

私はそれが私を投げるだろうと確信しています何らかのエラーが発生しますが、実行されないインスタンスがあり、戻り値が返されます。

+1

"a stored proc would return -1"なぜあなたはそれをテストしないのですか?あなたはCREATE TABLEとDROP TABLEのステートメント、挿入、更新をテストしました... –

+0

他のすべてのステートメントでは、戻り値は-1ですか?私はストアドprocsを含むと仮定していた...私はまだ確認することができませんでした。ここにいる誰かがODP.Netを使ってストアドプロシージャを呼び出す経験があることを期待していました。 – SoftwareSavant

答えて

7

は-1を返すストアドプロシージャのためにかかわらず、SPの実行(非常に簡単にテストする)作用の

create procedure test1 as 
begin 
    null ; --do nothing 
end test1 ; 
/

create table testtable(a number); 
/

create procedure test2 as 
begin 
    insert into testtable(a) select level from dual connect by level < 5; 
end test2 ; 
/

create procedure test3 as 
begin 
    update testtable set a = a-1; 
end test3; 
/

create procedure test4 as 
begin 
    delete testtable; 
end test4; 
/

 static int executeProc(string procName,OracleConnection connection){ 
       OracleCommand cmd= new OracleCommand(procName, connection); 
       cmd.CommandType = CommandType.StoredProcedure; 
       return cmd.ExecuteNonQuery();     
     } 
     static void Main(string[] args) 
     { 
      Console.WriteLine("what does ExecuteNonQuery return?"); 
      // Connect 
      string connectStr = getConnection(); 
      OracleConnection connection = new OracleConnection(connectStr); 
      connection.Open(); 
      try{ 
      Console.WriteLine("test1 =>" + executeProc("test1",connection)); 
      Console.WriteLine("test2 =>" + executeProc("test2",connection)); 
      Console.WriteLine("test3 =>" + executeProc("test3",connection)); 
      Console.WriteLine("test4 =>" + executeProc("test4",connection)); 
      } 
      catch (Exception e){ 
       Console.WriteLine(e.Message); 
      } 
      Console.WriteLine("Done"); 
     } 

what does ExecuteNonQuery return? 
test1 =>-1 
test2 =>-1 
test3 =>-1 
test4 =>-1 

/* 
drop table testtable; 
drop procedure test1; 
drop procedure test2; 
drop procedure test3; 
drop procedure test4; 
*/ 

referencec e: http://download.oracle.com/docs/cd/E11882_01/win.112/e18754/OracleCommandClass.htm#i998363 http://forums.oracle.com/forums/thread.jspa?threadID=636182

+1

テストコードとリファレンス...その先生は、質の高い答えです。ありがとう。 – SoftwareSavant

+0

良い説明。 – blackraist

+0

BEGIN/ENDで囲まれた文のブロックを実行すると、-1も返されます。 – Rake36

関連する問題