我有一個ORACLE包,它只接收少量參數並返回一個其他(輸出)參數 - 唯一值(數字)。
這裏是封裝代碼:使用輸出參數調用PROCEDURE
create or replace
PACKAGE BODY "USP_SHIPMENTS" AS
PROCEDURE usp_GetNewShipmentNumber
(
pErrorCode OUT NUMBER,
pMessage OUT VARCHAR2,
pCompanyCode IN CHAR,
pNumber OUT VARCHAR2
)
IS
BEGIN
pErrorCode := 0;
UPDATE
UTSASHN
SET
UTSASHN.UTSHNCOR = UTSASHN.UTSHNCOR + 1
WHERE
UTSASHN.UTSHCOSC = pCompanyCode AND UTSASHN.UTSHTIPO = 'S***'
RETURNING
CONCAT(TRIM(UTSASHN.UTSHDESC) , TRIM(to_char(UTSASHN.UTSHNCOR, '000000'))) INTO pNumber;
EXCEPTION
WHEN OTHERS THEN
pErrorCode := SQLCODE;
ROLLBACK;
END usp_GetNewShipmentNumber;
END USP_SHIPMENTS;
我一直在使用ODP.NET採用這種封裝形式很長一段時間,一切都一直工作正常。
現在我正在開發一個新的應用程序與nHibernate 3.1.0.4000。 到目前爲止,我已經能夠映射我所有的實體並執行常規查詢。一切正常。
我正試圖調用這個包,但我一直在獲取錯誤。
這是程序的映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="BpSpedizioni" namespace="BpSpedizioni.Domain">
<sql-query name="GetNewShipmentNumber">
{ call USP_SHIPMENTS.usp_GetNewShipmentNumber (:pErrorCode, :pMessage, :pCompanyCode, :pNumber) }
</sql-query>
</hibernate-mapping>
,這是呼叫:
Session.GetNamedQuery("GetNewShipmentNumber")
.SetParameter("pErrorCode", "")
.SetParameter("pMessage", "")
.SetParameter<string>("pCompanyCode", "HBP00")
.SetParameter("pNumber", 0)
.UniqueResult();
我已經與.UniqueResult()
或.ExecuteUpdate()
或.List()
嘗試,但我只能得到例外:
could not execute query
[ USP_SHIPMENTS.usp_GetNewShipmentNumber ]
Name:pErrorCode - Value: Name:pMessage - Value: Name:pCompanyCode - Value:HBP00 Name:pNumber - Value:0
[SQL: USP_SHIPMENTS.usp_GetNewShipmentNumber]
這是InnerException:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'USP_GETNEWSHIPMENTNUMBER'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我搞不清楚我做錯了什麼! 有沒有人可以幫助我?
那麼你[不能直接與SQL服務器](http://stackoverflow.com/questions/6138389/nhibernate-returning-an-output-parameter-from-a-mapped-stored-procedure)否爲什麼oracle會有所不同,但我可能是錯的。 – 2012-02-22 19:25:43
我對nhibernate和odp.net一無所知,但輸出參數可能是個問題。也許如果你重寫一個函數來返回錯誤代碼,消息和數字[返回表類型](http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html)? – winkbrace 2012-02-22 20:54:02
@alfasin:當然,我有我的包裝的頭。我沒有把它放在這裏,因爲不需要顯示簽名。誰說你的包裝裏不能有程序? http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/09_packs.htm。無論如何,你錯過了這一點。正如我所說,這個軟件包可以正常工作並且正在使用中。你應該正確地閱讀這個問題。除非你想繼續檢查我的軟件包中的「錯誤」。 – LeftyX 2012-02-23 08:54:19