我正在编写存储过程并遇到以下错误:
第11行的错误:PLS-00103:遇到符号“文件结束”时 期待以下之一:
如果循环模式为null,则为goto开始大小写声明结束异常退出 pragma raise返回选择更新,同时关闭当前删除 fetch lock insert open rollback savepoint set sql execute commit forall合并管道
我正在使用的代码:
create or replace PROCEDURE search_car244ikYKOETEO
IS
long TAXICAR.LONGITUDE%type;
lat TAXICAR.LATITUDE%type;
BEGIN
select LONGITUDE,LATITUDE
into long,lat
from taxiCar,driver
where driver.STATEOFDRIVER='free' and taxiCar.name='taxiRiyadh'
END;
一旦我在最后纠正了丢失的分号,我得到了一个不同的错误
ERROR at line 8: PL/SQL: ORA-00936: missing expression
答案 0 :(得分:2)
您的SELECT
语句最后缺少分号。 LONG
也是保留字,因此您需要选择其他变量名称。我强烈建议为局部变量采用标准前缀,以区别于列名。
create or replace PROCEDURE search_car244ikYKOETEO
IS
l_long TAXICAR.LONGITUDE%type; -- <-- LONG is a reserved word
l_lat TAXICAR.LATITUDE%type;
BEGIN
select LONGITUDE,
LATITUDE
into l_long,
l_lat
from taxiCar,driver
where driver.STATEOFDRIVER='free'
and taxiCar.name='taxiRiyadh'; -- <-- A semicolon terminates a SQL statement
END;
假设taxiCar
和driver
表之间存在某种关系,我会假设您也缺少一个连接条件(如果有外键,则为and taxiCar.carID = driver.carID
}引用driver
的主键的taxiCar
。
编译过程后,如果SELECT
语句返回1行以外的任何内容,则会抛出错误。似乎有可能有0个免费驱动程序或超过1个免费驱动程序,所以你似乎不太可能想要SELECT ... INTO
。也许您想使用游标迭代行。也许您希望将BULK COLLECT
数据放入集合中。也许你想创建一个视图而不是存储过程。
如果您想使用光标迭代行并打印出经度
create or replace PROCEDURE search_car244ikYKOETEO
IS
BEGIN
FOR x IN (select LONGITUDE,
LATITUDE
from taxiCar,
driver
where driver.STATEOFDRIVER='free'
and taxiCar.name='taxiRiyadh')
LOOP
dbms_output.put_line( x.longitude );
END LOOP;
END;