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: 出现符号 "="在需要下列之一时: := . ( @ % ; 求解答!!!!!!
所以,应该是
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;
而不需要用else部分if ....then
elsif .. then
elsif m_choice = '专辑名' then
open ........
end if;另外
--CLOSE c_global;
out 需要传出的游标,不能关闭,否则返回后使用该游标出错!