Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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)中未发现数据异常_Sql_Oracle - Fatal编程技术网

在两个游标(Oracle PL/SQL)中未发现数据异常

在两个游标(Oracle PL/SQL)中未发现数据异常,sql,oracle,Sql,Oracle,我需要能够提出一个例外,正如标题所说。我当前遇到的异常导致以下错误: DBMS_OUTPUT.PUT_LINE (‘No rows found’); * ERROR at line 39: ORA-06550: line 39, column 23: PLS-00103: Encountered the symbol "`" when expecting one of the following: ( ) - + case mod new not

我需要能够提出一个例外,正如标题所说。我当前遇到的异常导致以下错误:

DBMS_OUTPUT.PUT_LINE (‘No rows found’);
                      *
ERROR at line 39: 
ORA-06550: line 39, column 23: 
PLS-00103: Encountered the symbol "`" when expecting one of the following: 
( ) - + case mod new not null others <an identifier> 
<a double-quoted delimited-identifier> <a bind variable> 
table avg count current exists max min prior sql stddev sum 
variance execute multiset the both leading trailing forall 
merge year month DAY_ hour minute second timezone_hour 
timezone_minute timezone_region timezone_abbr time timestamp 
interval date 
<a string literal with character set specification> 
DBMS_OUTPUT.PUT_行(“未找到行”);
*
第39行错误:
ORA-06550:第39行第23列:
PLS-00103:在预期以下情况时遇到符号“`”:
()-+case mod new不为空其他
表avg count current exists最大最小优先sql STDEV sum
方差执行多重设置两个前导和尾随forall
合并年月日小时分钟第二时区小时
时区\分钟时区\区域时区\缩写时间时间戳
间隔日期
这是我的代码:

SET SERVEROUTPUT ON FORMAT WRAP SIZE 12000 
Declare 
v_model VARCHAR2(40);
v_carcategory VARCHAR2(40);
v_totalcars NUMBER;
v_maxdate DATE:=TO_DATE(1, 'J');
Cursor carcur IS 
SELECT * FROM i_car;
CURSOR c1(v_car_registration VARCHAR2) IS 
SELECT * from i_booking a
WHERE a.registration=v_car_registration;
Begin  
For car_rec in carcur
LOOP
v_maxdate:=TO_DATE(1, 'J');
for rec in c1(car_rec.registration)
LOOP
IF rec.date_reserved > v_maxdate 
then
v_maxdate:=rec.date_reserved ;
If car_rec.Cost <=50000 THEN v_carcategory := 'Budget Car';
End IF;
If car_rec.Cost BETWEEN 50000 AND 100000 THEN v_carcategory := 'Standard Car';
End IF;
If car_rec.Cost >=100000 THEN v_carcategory := 'Premium Car';
End If;
end IF;
v_totalcars := findtotalcarmodels (car_rec.model_name);
end loop;
DBMS_OUTPUT.PUT_LINE('Registration:'|| ' '|| car_rec.registration); 
DBMS_OUTPUT.PUT_LINE('Cost:'|| ' $' || car_rec.Cost); 
DBMS_OUTPUT.PUT_LINE('Model Name:'|| ' '|| car_rec.model_name); 
DBMS_OUTPUT.PUT_LINE('Car Category:'|| ' '||v_carcategory);
DBMS_OUTPUT.PUT_LINE('Total number of Cars:'|| ' '||v_totalcars);
DBMS_OUTPUT.PUT_LINE('Most Recent Rental Date: '|| ' '||v_maxdate);
DBMS_OUTPUT.NEW_LINE; 
END LOOP; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE (‘No rows found’);
END;
/
将SERVEROUTPUT设置为格式包装大小12000
声明
v_型VARCHAR2(40);
瓦查尔2类(40);
车辆总数;
v_maxdate:=截止日期(1,'J');
光标carcur为
从i_car中选择*;
光标c1(车辆登记VARCHAR2)为
从i_预订a中选择*
其中a.注册=车辆注册;
开始
对于carcur中的Caru rec
环
v_maxdate:=截止日期(1,'J');
用于c1中的登记(车辆登记)
环
如果rec.date_reserved>v_maxdate
然后
v_maxdate:=记录日期_保留;
如果车辆登记成本=100000,则车辆类别:=“高级车”;
如果结束;
如果结束;
v_totalcars:=findtotalcarmodels(车辆记录模型名称);
端环;
DBMS|u OUTPUT.PUT|u LINE('注册:'| |''| | |汽车注册]);
DBMS|u OUTPUT.PUT|u LINE('成本:'| |'$'| |车辆记录成本);
DBMS|u OUTPUT.PUT_LINE('Model Name:'||'''.| | car|rec.Model_Name);
DBMS|u OUTPUT.PUT|u LINE('Car Category:'| |''| | | v| carcategory);
DBMS|u OUTPUT.PUT|u LINE('车辆总数:'||''| v|u totalcars);
DBMS|u OUTPUT.PUT_LINE('最近的租赁日期:'| |''| | v|u maxdate);
DBMS_OUTPUT.NEW_行;
端环;
例外情况
当找不到数据时
DBMS_OUTPUT.PUT_行(“未找到行”);
结束;
/

我不太确定我的异常的位置。任何建议都将不胜感激。

当前的问题是您的
dbms\u输出。put\u line
调用使用Microsoft卷曲引号而不是标准的单引号字符来分隔字符串。您需要使用标准字符,而不是Microsoft字符(所有其他字符串似乎都使用标准字符)

退一步说,仅仅为了调用
dbms\u输出
而捕获
no\u data\u found
异常是没有意义的。无法保证写入
dbms\u输出的数据将被发送到客户端应用程序,或者客户端应用程序将向用户显示数据

您似乎也没有任何可能引发
no\u data\u found
异常的代码。打开返回0行的游标不会导致异常。如果希望只接收1行,可以在
语句中写入
SELECT,如果返回的不是1行,则会引发异常。如果此处的目标是确定循环的迭代次数,则可以使用游标的
%rowcount
属性

最后,如果您格式化代码,使行根据它们是哪个块的一部分缩进,这将使您的想法更加清晰。代码式

FOR rec IN cursor
LOOP
  IF <<something>>
  THEN
    <<do something>>
  END IF;

  IF <<something else>>
  THEN 
    <<something else>>
  END IF;

  <<more stuff>>
END LOOP;
用于光标中的rec
环
如果
然后
如果结束;
如果
然后
如果结束;
端环;

更容易理解。

谢谢贾斯汀的回复。这是卷曲引用的问题。这有点痛。我想这就是我使用Word作为文本编辑器所得到的。