【发布时间】:2020-11-09 00:36:24
【问题描述】:
我正在尝试学习 plsql,但在理解一些基本知识时遇到了困难。这是我试图解决的一个挑战。我有两张桌子。一个保存有关车主的信息,另一个保存有关汽车的信息。
我想编写一个匿名块来连接这两个表,并使用基于每个所有者注册的汽车数量的 for 循环打印每个人拥有的汽车数量。此外,我想要一个区分 1 Car(单数)和 2, 3 Cars(复数)的 if 语句。
表格如下:
CREATE TABLE owners(
id_nr VARCHAR2(13) PRIMARY KEY,
f_name VARCHAR2(20),
s_name VARCHAR2(20)
);
CREATE TABLE cars(
reg_nr VARCHAR2(6) PRIMARY KEY,
id_nr REFERENCES owners(pnr),
model VARCHAR2(20),
year NUMBER(4),
date DATE
);
结果可能如下所示:
19380321-7799, Hans, Anderson, Owns: 1 car
19490321-7899, Mike, Erikson, Owns: 2 cars
。 . .等等
我知道这个问题已经得到解答,但是当我尝试以下操作时:
declare
v_suffix varchar2(1);
begin
for o in (select bilägare_pnr, fnamn, enamn,
(select count(1) from fordon where fordon_pnr = bilägare_pnr) as bilar_ägda
from bilägare)
loop
if o.pnr_fordon = 1
then v_suffix = 'bil'
else v_suffix = 'bilar'
end if;
dbms_output.put_line(o.pnr || ', ' || o.fnamn || ', ' || o.enamn
|| ' Äger: ' || o.pnr_fordon || ' bil' || v_suffix);
end loop;
end;
/
我明白了:
ORA-06550: line 9, column 27:
PLS-00103: Encountered the symbol "=" when expecting one of the following:
:= . ( @ % ;
有什么建议吗?我不确定如何声明 v_suffix
编辑(从以下答案的评论中复制):
更新我的代码:
declare
cursor c_BILÄGARE is
select fnamn,enamn,pnr
from BILÄGARE;
begin
for rec in c_BILÄGARE loop
if (rec.antal>1) then
dbms_output.put_line (rec.pnr||','|| rec.fnamn || ',' ||
rec.enamn || ',' || rec.antal || 'bilar');
else
dbms_output.put_line (rec.pnr||','|| rec.fnamn || ',' ||
rec.enamn || ',' || rec.antal || 'bil');
end if;
end loop;
end;
得到:
ORA-06550: line 9, column 9: PLS-00302: component 'ANTAL' must be declared (antal=Quantity)
【问题讨论】: