2014-02-10 80 views
0

後,我想要得到的值插入在C#中的表,這樣的事情:甲骨文12C:返回記錄插入值

begin 
insert into bk_library(floor,section) values('foo2','bar') 
returning id into :outid; 
select *from bk_library where id=:outid; 
end; 

不幸的是,我失敗了

錯誤信息:親吻.Linq.Linq2Sql.Test.EntryPoint.TestInsertReturnId: Oracle.DataAccess.Client.OracleException:ORA-06550:線3,列 1:PLS-00428:INTO子句預計在該SELECT語句


[Test] 
    public void TestInsertReturnId() 
    { 
     int ret = 0; 
     string connstring = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=pdborcl)));User Id=system;Password=****;"; 

     string sql = @"insert into bk_library(floor,section) values('foo','bar') returning id into :outid"; 
     sql = getSqlString(); 
     using (DbConnection conn = new OracleConnection(connstring)) 
     { 
      conn.Open(); 
      DbCommand command = conn.CreateCommand(); 
      command.CommandType = CommandType.Text; 
      command.CommandText = sql; 

      OracleParameter lastId = new OracleParameter(":outid", OracleDbType.Int32); 
      lastId.Direction = ParameterDirection.Output; 
      command.Parameters.Add(lastId); 
      ret = command.ExecuteNonQuery(); 

       // this code work fine ,now I want to get the entire record 
      LogManager.GetLogger<EntryPoint>().Info("The new id ={0}", lastId.Value.ToString()); 

      conn.Close(); 
     } 
     Assert.AreNotEqual(ret, 0); 
    } 
+0

什麼是你真正想幹什麼?你剛剛在數據庫中創建了「行」,並且你已經有了數據,爲什麼再次獲取它?也許看看實體框架或LinqToSql? – flindeberg

+0

在這種情況下,表的主列同一性(http://www.oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1.php)中,當插入一個值不知身份證,現在我想獲得整個記錄。 – Aliceljm

+0

是的,但是您從查詢中獲得了id,爲什麼需要整個記錄?既然你沒有使用任何建模框架? – flindeberg

回答

0

ParameterDirectionReturnValue

lastId.Direction = ParameterDirection.ReturnValue; 
+0

我的錯誤,該代碼 「LogManager.GetLogger ().INFO( 」新的ID = {0}「,lastId.Value.ToString());」 做工精細,我能得到的ID,現在我想整個記錄不僅僅是ID。 – Aliceljm

0

從< http://arjudba.blogspot.ch/2008/07/pls-00428-into-clause-is-expected-in.html?m=1>

你需要寫SELECT * INTO some_variable FROM bk_library,而不是SELECT * FROM bk_library因爲我假設你想存儲莫名其妙地檢索到的數據。因此,您需要聲明一個新變量some_variable(我假設爲字符串類型)並修改您的SELECT語句,如上所述。語句中的數據將存儲在您的新變量中。

希望這有助於

+0

謝謝你,你啓發了我,我改變我這樣的SQL: 申報IDNUM整數; 開始 插入到bk_library(地板,部分)的值( 'foo2的', '酒吧') 返回ID輸入到:outid; 從bk_library中選擇id到idnum,其中id =:outid; 結束; 現在我想獲得所有列值,我該怎麼做? – Aliceljm

+1

見http://www.oracle.com/technetwork/issue-archive/2012/12-may/o32plsql-1578019.html – nagyben

+0

謝謝,現在我有這樣的SQL:申報bk_library_shadow bk_library%ROWTYPE; 開始 插入到bk_library(地板,部分)的值( 'foo2的', '酒吧')返回到ID:outid; select * into bk_library_shadow from bk_library where id =:outid; 結束; – Aliceljm