2

我有以下功能:

CREATE OR REPLACE Function pode_levar( pedidos NUMBER, viagens  NUMBER)
   RETURN NUMBER
IS
x NUMBER:=0;
y NUMBER:=0;
TRUE NUMBER:=0;
BEGIN

BEGIN
    Select id_pedido into x
    from pedido
    where id_pedido = pedidos;
    EXCEPTION 
    WHEN NO_DATA FOUND THEN 
    RAISE_APPLICAITON_ERROR(-20305,'PEDIDO TRANSPORTE ENIXISTENTE');
END;

BEGIN
    select lim_vei_vol - volume_total_viagem(viagens)  into y
    from v viagem , ve veiculo
    where v.id_viagem = ve.id_viagem
    and id_viagem = viagens;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    TRUE:=0;
    RAISE_APPLICATION_ERROR(-20304,'Viagem Enixistente');
    RETURN(TRUE);
END;

BEGIN 
    IF y <> 0 
    TRUE := 1;
    RETURN(TRUE);
    ELSE
    TRUE := 0;
    RETURN(TRUE);
    ENDIF;

END;

END;

该函数编译时有一个警告,我怎么能看到它?show errors不工作

这是给学校的,

4

2 回答 2

4

您应该使用 SQL* Plus 并设置

ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL';

在创建函数之前。此设置将通过使用向您显示任何警告

SHOW ERRORS;

阅读:http ://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams186.htm#REFRN10249

于 2013-06-09T20:26:37.647 回答
2

不知道为什么你没有看到这个show errors- 可能是一个有问题的旧版本。你可以试试这个:

select * from user_errors;

但是您的别名声明错误,并且在引用共享列时并不总是使用:

from v viagem , ve veiculo
where v.id_viagem = ve.id_viagem
and id_viagem = viagens;

应该:

from viagem v, veiculo ve
where v.id_viagem = ve.id_viagem

    和 v.id_viagem = viagens;

甚至:

from viagem v
join veiculo ve
on v.id_viagem = ve.id_viagem
where v.id_viagem = viagens;

正如 Ben 在评论中指出的那样,可能还有其他问题,而且您没有显示任何表定义,但这并不是真正的问题。

如果您也打开了警告(在 SQL Developer 的首选项中),我猜它会指出第二个块中的returnafterraise是无法访问的。你不能两者都做。

于 2013-06-09T21:20:04.360 回答