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-)