如何只向前端发送Raise_application_error消息?

时间:2017-08-16 13:08:43

标签: oracle

如何从程序中单独发送raise_application_error消息?

ORA-20343: ERROR - FIRST_NAME IS MISSING and LAST_NAME IS MISSING
ORA-06512: at "quality.pkg_quality_check", line 113
ORA-06512: at line 28

我只想发送错误消息的第一行。如何避免消息的下两行?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我曾经在C#中广泛地这样做,并且总是更容易做,因为OldProgrammer建议并且只是捕获OracleException,然后解析出有趣的消息跟踪,而不是弄乱像DBMS_PIPE.PUT_MESSAGE将冗长的错误消息发送回客户端...

我没有任何旧代码,但它是这样的:

try{
  //code here that calls oracle, could explode
}catch(System.Data.OracleException oex){
  string[] bits = oex.Message.Split('\n');
  if(bits.Length < 0 && bits[0].Contains(':'))
    MessageBox.Show(bits[0].Substring(bits[0].IndexOf(':') + 2));
  else
    MessageBox.Show(oex.Message);

}

我还记得你可以通过a numerical argument to RAISE_APPLICATION_ERROR它会改变OracleException的.Code属性,这可以用来在前端放置好消息:

switch(oex.Code){
  case 123456:
    MessageBox.Show("First name is too long");
    break;
  case 234567:
    MessageBox.Show("Last name is too long");
    break;
...
}

请记住,如果您使用OracleClient数据访问库而不是Microsoft的数据访问库,那么表示/属性命名等可能会略有不同(我只使用过MS,而且自编写代码以来至少已有8年了在c#/ oracle对中如果某些答案有点模糊,请道歉