Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 显示PL/SQL函数警告_Oracle_Plsql_Oracle Sqldeveloper - Fatal编程技术网

Oracle 显示PL/SQL函数警告

Oracle 显示PL/SQL函数警告,oracle,plsql,oracle-sqldeveloper,Oracle,Plsql,Oracle Sqldeveloper,我有以下功能: 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 W

我有以下功能:

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;
创建或替换功能舱(pedidos编号、viagens编号)
返回号码
是
x编号:=0;
y编号:=0;
真数:=0;
开始
开始
选择id_pedido进入x
来自佩蒂多
其中id_pedido=pedidos;
例外情况
当找不到任何数据时
提出应用错误(-20305,'PEDIDO TRANSPORTE ENIXISENTE');
结束;
开始
选择lim_vei_vol-volume_total_viagem(viagens)进入y
来自v viagem,v veiculo
其中v.id\u viagem=ve.id\u viagem
id_viagem=viagens;
例外情况
当找不到数据时
真:=0;
引发应用程序错误(-20304,'Viagem Enixistente');
返回(真);
结束;
开始
如果y为0
真:=1;
返回(真);
其他的
真:=0;
返回(真);
ENDIF;
结束;
结束;
函数编译时带有一个警告,我如何才能看到它<代码>显示错误不起作用


这是为学校准备的,

您应该使用SQL*Plus并设置

ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL';
在创建函数之前。此设置将通过使用显示任何警告

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的首选项中),我想它会指出,第二个块中的
raise
之后的
return
是不可访问的。您不能同时执行这两项操作。

您使用哪个工具来运行
create
语句`
show errors
将显示您在使用SQL时出现的任何问题*Plusi我在使用oracle SQLdeveloper@a_horse_with_no_name如果会话中未启用,则显示错误时不会显示任何警告。它是否说编译时带有警告,或者有错误?您也可以从SQL Developer执行此操作;但是,如果此选项处于禁用状态,那么您将(或者无论如何应该)仍然会看到错误,并且如果此选项处于禁用状态,您将不会收到“compiled with warnings”(编译时带有警告)消息?(我想…现在无法检查…)本例中的错误是
endif
和缺少
then
(可能还有变量
TRUE
)@本-对,错过了。不过,它会在某个时候抱怨别名,标识符无效?对不起,Alex,我完全错过了:-)。实际上,我不知道Oracle首先要编译什么。有一天能解决这个问题会很有趣的。嘿,伙计们,问题是我怎么能看到它?(警告)而不是语法错误的位置;-)@Toru同意,这就是为什么我从用户错误开始,并说“这不是真正的问题”。但很容易被冲昏头脑*8-)