功能:实现学生成绩 学分等的查询
CREATE PROCEDURE [dbo].[query_byStudentNum]
@student_num char(8)
 AS
set nocount on
declare @sqlStr as nvarchar(400)
if exists(select * from Student where StudentNum=@student_num)
drop view dbo.tempview
set @sqlStr='create view dbo.tempview as select *,(Grade*CourseCredit) as TempGrade from Student
where 
StudentNum='+@student_num
exec sp_executesql @sqlStr
select * from tempview order by CourseName
select CourseType,count(*) as TotalCount,sum(CourseCredit) as SumCredit,convert([decimal](4,1),
sum(TempGrade)/sum(CourseCredit)) as Average 
from tempview 
group by CourseType
return
GO

解决方案 »

  1.   

    犯了ORACLE的两个大忌,
    1: 不主张在存储过程里面使用DDL,
    2: 尽量避免在存储过程里面返回记录集按照你这样,要先用动态的EXECUTE IMMEIATE  ....
    然后返回CURSOR才行.
      

  2.   

    犯了ORACLE的两个大忌,
    1: 不主张在存储过程里面使用DDL,
    2: 尽量避免在存储过程里面返回记录集按照你这样,要先用动态的EXECUTE IMMEIATE  ....
    然后返回CURSOR才行.-----------------------------
    那oralce要处理一个复杂的过程,并返回一个记录集,那该怎办?ms sql中采用存储过程比较明智方法,不知道oralce如何?