Сообщение отдельно
17.02.2012 14:53
CrazyWolf
 
Может немножко не в тему, но у меня прекрасно работает вот это (правда я на Шарпе лабаю ;) )
Код:
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));
                            }
                        }
}