【问题标题】:Identifier must be declared? PLS-00201必须声明标识符? PLS-00201
【发布时间】:2017-05-30 01:54:43
【问题描述】:
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。

【问题讨论】:

    标签: sql plsql


    【解决方案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;
    / 
    

    【讨论】:

      【解决方案2】:

      您可以声明一个变量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;
      /
      

      【讨论】:

        【解决方案3】:

        a 是一个表别名,为查询定义:

            select a.title, a.release_date into v_title, v_release
            from movie a
            where a.running_time = i;
        

        它没有在这个查询之外定义。因此,a.genre_id 不被理解。如果您还想捕捉流派,则需要在变量中捕捉它。

        【讨论】:

          猜你喜欢
          • 2014-06-24
          • 1970-01-01
          • 2019-12-17
          • 2021-12-22
          • 2016-07-25
          • 2018-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多