OleDb執行Oracle帶自訂函數的SQL深度曆險

來源:互聯網
上載者:User

真是太鬱悶了, 鬱悶了我多半天。

事情從以前寫的自訂函數講起:

create or replace function f_getWorkdays(dayBegin in Date, dayEnd in Date)return numberis。。。end f_getWorkdays;

 

今天我要在OleDbCommand 中,執行SQL語句:(其實實際比這個複雜,還有參數一類的)

select oauser.f_getworkdays(to_date('2010-9-1','yyyy-hh24-dd'), sysdate) from sys.dual

結果報錯:

 System.ArgumentException: 十進位位元組數組建構函式需要一個包含有效十進位位元組且長度為 4 的數組。

  因為原來有參數,還曾報過:

    System.Data.OleDb.OleDbException: 存取器不是參數存取器。
  甚至懷疑OleDb不能調用自訂函數。 轉戰成視圖,把自訂函數放在Oracle視圖中, 無果,一樣的錯誤。

  又懷疑是許可權, Grant 一系統許可權。

  後來, 在朋友的建議下改成 預存程序:

create or replace package CompanyDeptAlermPackage istype t_ResultSet is ref cursor;procedure usp_getCompanyDeptAlerm(companyDeptId in number, io_cursor in out t_ResultSet);end CompanyDeptAlermPackage;。。。 包體實現省略。

   然後又面臨著OleDb調用返回結果集的預存程序的問題, 參數微軟文章:

http://support.microsoft.com/default.aspx?scid=kb;en-us;309361

    結果一直報錯:

   System.Data.OleDb.OleDbException: ORA-06550: line 1, column 58:
   PLS-00201: identifier 'IO_CURSOR' must be declared

 

  幾乎絕望, 後來突發奇想, 難道是 decimal 精度問題?馬上奔回電腦前,改SQL為:

select trunc(oauser.f_getworkdays(to_date('2010-9-1','yyyy-hh24-dd'), sysdate),2) from sys.dual

 

大吉。 天呀, 嗚呼。 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.