CREATE OR REPLACE PROCEDURE GetAlbums(IsPublic In Integer)
AS
begin
SELECT  Albums.AlbumID,Albums.Caption,Albums.IsPublic,Count(Photos.PhotoID) AS NumberOfPhotos 
FROM Albums LEFT JOIN Photos 
ON Albums.AlbumID = Photos.AlbumID 
WHERE
(Albums.IsPublic = 1 OR Albums.IsPublic = 1);
end;
 

解决方案 »

  1.   

    哥们  有Count()  为什么不加Group By呀?
      

  2.   

    去看看oracle中PROCEDURE 的语法吧。
      

  3.   

    oracle 存储过程里面主要是DML,不会有select语言,否则就报错你还不如写个视图
      

  4.   

    pl/sql中直接用select不行的,是select into的语法
    如果想返回记录集的话,可以用游标来实现
    select ... 
    into ...
    from ...
    where ...
      

  5.   

    CREATE OR REPLACE PROCEDURE GetAlbums(IsPublic Integer) 
    AS 
    begin 
    SELECT Albums.AlbumID,Albums.Caption,Albums.IsPublic,Count(Photos.PhotoID) AS NumberOfPhotos 
    FROM Albums LEFT JOIN Photos 
    ON Albums.AlbumID = Photos.AlbumID 
    WHERE 
    (Albums.IsPublic = IsPublic 這里是個變量 OR Albums.IsPublic = 1); 
    end; 
      

  6.   

    刚学了一招,以前一直用is,现在发现原来as也行!长了见识!
      

  7.   


    对于plsql的程序块来说,是不能直接select来做查询你的,你需要用select ... into的语句,或者是open cursor的语句来取结果集。
      

  8.   

    SELECT Albums.AlbumID,Albums.Caption,Albums.IsPublic,Count(Photos.PhotoID) AS NumberOfPhotos 
    FROM Albums LEFT JOIN Photos 
    ON Albums.AlbumID = Photos.AlbumID 
    WHERE 
    (Albums.IsPublic = 1 OR Albums.IsPublic = 1); 有countr()函数应该加个group by Albums.AlbumID,Albums.Caption,Albums.IsPublic
    而且存储过程不能这样执行select语句的,楼上的都已经说明了