create or replace
procedure m_global(
     m_choice varchar2,
     m_name varchar2,
     c_global out cursorpackage.table_cursor)
     as
     begin
     if m_choice = '不详' then open c_global for select songname,singer,album,language from songinfo
                                                 where m_name = songname or m_name = singer or m_name = album;
     elsif m_choice = '歌曲名' then open c_global for select songname,singer,album,language from songinfo where m_name = songname;
     elsif m_choice = '歌手名' then open c_global for select songname,singer,album,language from songinfo where m_name = singer;
     else  m_choice = '专辑名' then open c_global for select songname,singer,album,language from songinfo where m_name = album;
     end if;
     close c_global;
     exception
     when NO_DATA_FOUND then close c_global;
     end m_global;
判断 m_choice = '专辑名' 时,提示有错误,错误如下:错误(12,21): PLS-00103: 出现符号 "="在需要下列之一时:  := . ( @ % ; 求解答!!!!!!

解决方案 »

  1.   

    else后面不能有条件和then关键字了,它表示除了上述条件的其它情况。
    所以,应该是
    CREATE OR REPLACE PROCEDURE m_global(m_choice VARCHAR2,
                                         m_name   VARCHAR2,
                                         c_global OUT cursorpackage.table_cursor) AS
    BEGIN
      IF m_choice = '不详' THEN
        OPEN c_global FOR
          SELECT songname, singer, album, LANGUAGE
            FROM songinfo
           WHERE m_name = songname
              OR m_name = singer
              OR m_name = album;
      ELSIF m_choice = '歌曲名' THEN
        OPEN c_global FOR
          SELECT songname, singer, album, LANGUAGE
            FROM songinfo
           WHERE m_name = songname;
      ELSIF m_choice = '歌手名' THEN
        OPEN c_global FOR
          SELECT songname, singer, album, LANGUAGE
            FROM songinfo
           WHERE m_name = singer;
      ELSE
        OPEN c_global FOR
          SELECT songname, singer, album, LANGUAGE
            FROM songinfo
           WHERE m_name = album;
      END IF;
      
      --CLOSE c_global;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        CLOSE c_global;
    END m_global;
      

  2.   

    你如果要准确判断,仍然可以用
    而不需要用else部分if ....then
    elsif .. then
    elsif  m_choice = '专辑名' then 
        open ........
    end if;另外
     --CLOSE c_global;
    out 需要传出的游标,不能关闭,否则返回后使用该游标出错!