Может немножко не в тему, но у меня прекрасно работает вот это (правда я на Шарпе лабаю ;) )
Код:
using (var conOra = new OracleConnection(ConnString)))
{
conOra.Open();
string strOrasql = "declare " +
"core_result pls_integer; " +
"vDocType varchar2(2) := :doctype; " +
"vDocID varchar2(50) := :docid; " +
"nLocationID number(3,0) := :locto; " +
"vBaseDocID varchar2(50) := :basedocid; " +
"MESSAGE_STR varchar2(250); " +
"begin " +
"if supermag.core.getproc is null then " +
"core_result := supermag.Core.StartSMApp(); " +
"end if; " +
"if vDocType = 'IW' then " +
"supermag.smdoccreateiw(vDocID, trunc(sysdate), 1, nLocationID, vBaseDocID); " +
"else " +
//"supermag.documents.createdocumentprologue('IW', vDocID, trunc(sysdate), null, null, 1, nLocationID); " +
"supermag.smdoccreatewo(vDocID, trunc(sysdate), 234, 1, 10, null); " +
"supermag.smdocaddcommonbase(vDocType, vDocID, 'SO', vBaseDocID); " +
"end if; " +
"Supermag.Documents.LockDoc(vDocType, vDocID); " +
"commit;" +
"EXCEPTION " +
"WHEN OTHERS THEN " +
":MESSAGE_STR := SQLERRM; " +
"end;";
using (var cmd = new OracleCommand(strOrasql, conOra))
{
cmd.Parameters.Add(new OracleParameter(":doctype", OracleType.VarChar));
cmd.Parameters[":doctype"].Value = strNewDocType;
cmd.Parameters.Add(new OracleParameter(":docid", OracleType.VarChar));
cmd.Parameters[":docid"].Value = strNewNumberDoc;
cmd.Parameters.Add(new OracleParameter(":locto", OracleType.Int16));
cmd.Parameters[":locto"].Value = intLocTo;
cmd.Parameters.Add(new OracleParameter(":basedocid", OracleType.VarChar));
cmd.Parameters[":basedocid"].Value = strNumberDoc;
OracleParameter parNRec = cmd.Parameters.Add(":MESSAGE_STR", OracleType.VarChar, 250);
parNRec.Direction = ParameterDirection.Output;
try
{
cmd.ExecuteNonQuery();
string strExMessage = parNRec.Value.ToString();
if (strExMessage.Length > 0)
Console.WriteLine(String.Format("Ошибка при создании документа {0} привело к ошибке Oracle:{1}\r\n", strNewNumberDoc, strExMessage));
}
catch (Exception ex)
{
Console.WriteLine(String.Format("Ошибка при создании документа {0} привело к ошибке: {1}\r\n", strNewNumberDoc, ex.Message));
}
}
}