一个简单的存储过程问题

[复制链接]
查看11 | 回复6 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
我现在要把一个数据库从SQLServer移植到Oracle9i上,但是我在SQLServer上面有很多的存储过程,问题是我连最简单的存储过程在Oracle上都通不过,快救救我吧,老板催得急啊
比如说,有一张表
aaa( a varchar2(2),b varchar2(2))要选出所有的纪录,创建一个存储过程
create or replace procedure sel_aaa
is
begin
select * from aaa;
end sel_aaa;
提示说没有INTO,到底该怎么写才正确呢?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
select * from aaa ;是SQL语句
首先要明确你写这个PROCEDURE 的目的是什么?
‘要选出所有的纪录’:那么用游标实现:
create or replace procedure sel_aaa
is
cursor cr is select a,b,cfrom aaa;
begin
-------你的过程体,对cr 进行调用。
end sel_aaa;

PS:给你参考
procedure plan_cancel (v_plan varchar2) is
cursor cr is select materiel_code,parts_num from plan_destine where plan_no=v_plan;
v_num number;
begin
--------ÐèÒªÐ޸ļ¸¸ö¼Æ»®±íºÍ¿â´æ±í PLAN,PLAN_DECOMPOSE,PLAN_DECOMPOSE_TREE,PLAN_DESTINE,PLAN_MATERIEL_REPORT,PLAN_MATERIEL_REPORT_TMP,
------stor±í ¸ù¾ÝPLAN_DESTINE ±íÖеÄÊý¾ÝÁ¿¼õÉÙ STOR ±íÖеÄDESTINE_NUM×Ö¶ÎÊýÁ¿¡£
for cr1 in cr loop
begin
select destine_num into v_num from stor where mate_code=cr1.materiel_code and dept_id=0 ;
exception
when no_data_foundthen
null;
end ;
if v_num >0 then

update stor set destine_num = destine_num - cr1.parts_num where dept_id = 0and mate_code=cr1.materiel_code ;
end if;
commit;
end loop;
-------------------------------,PLAN_MATERIEL_REPORT_TMP1,PLAN_MATERIEL_REPORT_TMP2,STOR

end ;
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
天哪,我只是想实现一个选择所有记录的过程,这在SqlServer里面很方便,到了Oracle中需要这么复杂吗?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
根据自己的需要重建相关的PROCEDURE,SQL SERVER和ORACLE具体的差异我不清楚
当你ORACLE也弄清楚的时候,你就知道怎么去做了
有时间多看书再实践一下就好了
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
对阿对阿,老板说要改成Oracle我才开始学的,介绍基本经典的书吧,最好适合马上就可以上手用的,比如说,存储过程如何写
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
对阿对阿,老板说要改成Oracle我才开始学的,介绍基本经典的书吧,最好适合马上就可以上手用的,比如说,存储过程如何写
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
所有的存储过程都需要重写,这是省不了的。所以如果你希望应用能在两个平台上都能跑,就尽量不要用sp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行