有没有更好的方法来调试“调用中错误的数字或类型的参数”错误?

时间:2009-11-24 19:03:34

标签: vb.net oracle stored-procedures

所以我最近一直被与此类似的问题所困扰:Oracle .NET error - Wrong number or type of arguments。我知道oracle因其糟糕的错误报告而闻名,但这是一个巨大的调试难题 - 如果你有十个参数,那就是手工检查的二十件事(类型和名称),更不用说实际的参数数量,以及如果他们真的是合法的价值观。

是否有某种方法可以对存储过程调用oracle进行更好的诊断?

1 个答案:

答案 0 :(得分:2)

缺少参数的重载和DEFAULT值可能会有所帮助。您创建类似于以下内容的虚拟过程:

procedure xxx (p_1 IN VARCHAR2 DEFAULT NULL, p_2 IN VARCHAR2 DEFAULT NULL....)
begin
  IF     p_1 IS NULL THEN RAISE_APPLICATION_ERROR(-20001,'P_1 is null);
  ELSIF  p_2 IS NULL THEN RAISE_APPLICATION_ERROR(-20001,'P_2 is null);
...
  END IF;
end xxx;

默认值意味着您可以逐位构建.NET调用。 重载意味着你可以有一个强制正确数据类型的过程(例如日期)和一个松散的过程,假设一切都是VARCHAR2。如果调用'回退'到松散程序(带有隐含的转换),则包含一些调试以确定是否传入了正确的值。

另一种途径是在ALL_ARGUMENTS上使用SELECT来创建调用的存根。