declare
v_title movie.title%type;
v_release movie.release_date%type;
begin
for i in 121..500 loop
select a.title, a.release_date into v_title, v_release
from movie a
where a.running_time=i;
if a.genre_id=015 then
dbms_output.put_line(v_title|| ' '||v_release);
end if;
end loop;
end;
/
你能告诉我为什么它识别title或release_date时不识别genre_id吗?我检查了我的表,没有拼写错误。 genre_id存在于表格中。
答案 0 :(得分:1)
a.genre_id
是表格中的一列。当您在IF
中使用它时,那么对于PLSQL,它不是有效的变量/
假设其余代码正确,请添加另一个变量
declare
v_title movie.title%type;
v_release movie.release_date%type;
v_genre_id movie.genre_id%type;
begin
for i in 121..500 loop
select a.title, a.release_date , a.genre_id into v_title, v_release , v_genre_id
from movie a
where a.running_time=i;
if v_genre_id=015 then
dbms_output.put_line(v_title|| ' '||v_release);
end if;
end loop;
end;
/
答案 1 :(得分:1)
您可以声明变量v_genre_id
并将其添加到您的选择中,但有更快的方法。您的代码将执行相同的查询380次,而它只应执行一次:
BEGIN
FOR cur IN (
SELECT a.title, a.release_date
FROM movie a
WHERE a.running_time BETWEEN 121 AND 500
AND a.genre_id = 15
ORDER BY a.running_time
)
LOOP
dbms_output.put_line( cur.title || ' ' || cur.release_date);
END LOOP;
END;
/
答案 2 :(得分:0)
a
是为查询定义的表别名:
select a.title, a.release_date into v_title, v_release
from movie a
where a.running_time = i;
未在此查询之外定义。因此,a.genre_id
不被理解。如果你想捕捉类型,你需要在变量中捕获它。