如果我想使用异常处理来捕获此错误,我需要处理哪些事情?
调用中的参数数量或类型错误(调用时 程序/功能)
我尝试的方式不同。你能解释一下吗?我有一个功能:
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;
答案 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']);
}
块中,您可以编写任何您想要的逻辑。