调用中的参数数量或类型错误(调用过程/函数时)

时间:2015-06-11 16:19:53

标签: sql oracle plsql

如果我想使用异常处理来捕获此错误,我需要处理哪些事情?

  

调用中的参数数量或类型错误(调用时   程序/功能)

我尝试的方式不同。你能解释一下吗?我有一个功能:

create or replace function test5(v varchar2) return varchar as
begin
  execute immediate 'begin sweet.g:=:v;end;'
  using in v;
  return sweet.g;
exception
when others then 
  return sqlcode||' '||sqlerrm;
end test5;

包装规格和正文:

create or replace package SWEET as
  function c ( v varchar2,V2 VARCHAR2) return varchar2;
  g varchar(100);
end;
/

create or replace package body SWEET as
  function c(v varchar2, V2 varchar2) return varchar2 as
  begin
    return v||'hi'|| V2;
  end c;
end; 
/

当我执行下面的陈述时,我无法捕获'错误的数字或类型的参数'

select test5(sweet.c(,'hello')) from dual;

2 个答案:

答案 0 :(得分:0)

您应该能够在PL / SQL手册中获得大部分答案,但是当您尝试捕获不是预定义错误的错误时,您必须执行以下操作:

DECLARE
   deadlock_detected EXCEPTION;
   PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
BEGIN
   ... -- Some operation that causes an ORA-00060 error
EXCEPTION
   WHEN deadlock_detected THEN
      -- handle the error
END;

将-60替换为您的实际错误,将deadlock_detected替换为您想要调用的任何内容。

答案 1 :(得分:0)

假设你有一个程序,它接受两个数字作为参数并输出它们:

begin
  testProc(13,188);
end;

如果执行此操作:

params: 13 188

您获得的输出为:begin testProc(13); exception when others then dbms_output.put_line('SQLERRM: ' || SQLERRM); end;

如果你这样做:

PLS-00306: wrong number or types of arguments in call to 'TESTPROC'

您收到错误消息:declare v_sql varchar2(50); v_result number; begin v_sql := 'begin testProc(13); end;'; execute immediate v_sql into v_result; exception when others then dbms_output.put_line('SQLERRM: ' || SQLERRM); end;

为了防止这种情况并捕获错误,您可以使用动态SQL:

when others then

将执行,错误消息将显示给dbms_output。在public function getAlerts() { return $this->hasMany(\app\models\db\Alert::className(), ['assignedTo' => 'id']); } public function getAlerts() { return $this->hasMany(\app\models\db\Alert::className(), ['createdBy' => 'id']); } 块中,您可以编写任何您想要的逻辑。