高分 求一个存储过程。

slayerbb 2005-10-14 03:20:01
需要实现的目的是

table1,table2,table3计3个表
首先在table1种select 几个指定字段,(这几个字段中有依存关系),
判断指定字段的值是否为指定值,
如果是
继续判断另外一个字段的值是否为指定值,
如果是
执行一个更新操作,
插入到table3的一个字段,而出入值为table1中字段值乘以 从table2中取出的特定值。
更新条件为 table1和table3的关联外键。
如果不是继续判断他是否等于另外一个指定值,
继续以上流程
如果不是继续判断是否等于另外一个指定值
继续以上流程

如果看不明白问题的
我的msn petrelking@msn.com
qq 22538768
分不够可以加
...全文
345 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllxy 2005-11-03
  • 打赏
  • 举报
回复
huiwsey 2005-10-15
  • 打赏
  • 举报
回复
已经写出来了,我就不掺和了



qiaozhiwei(乔) 的写法值得很多人学习!
qiaozhiwei 2005-10-15
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE UPDATE_TABLE3_TEST
(
p_GOODFOR1 TABLE1.GOODFOR%TYPE,
p_GOODFOR2 TABLE1.GOODFOR%TYPE,
p_GOODTYPE1 TABLE1.GOODTYPE%TYPE,
p_GOODTYPE2 TABLE1.GOODTYPE%TYPE
)
/*
参数说明:
p_GOODFOR1 GOODFOR指定值1
p_GOODFOR2 GOODFOR指定值2
p_GOODTYPE1 GOODTYPE指定值1
p_GOODTYPE2 GOODTYPE指定值2
*/
AS
v_CURR_GOOD TABLE1.GOOD1%TYPE;
CURSOR TABLE1_INFO
IS
SELECT * FROM TABLE1 WHERE GOODFOR = p_GOODFOR1 OR GOODFOR = p_GOODFOR2;
BEGIN
FOR c_TABLE1_INFO IN TABLE1_INFO LOOP
IF c_TABLE1_INFO.GOODTYPE = p_GOODTYPE1 THEN
v_CURR_GOOD := c_TABLE1_INFO.GOOD1;
ELSIF c_TABLE1_INFO.GOODTYPE = p_GOODTYPE2 THEN
v_CURR_GOOD := c_TABLE1_INFO.GOOD2;
ELSE
v_CURR_GOOD := NULL;
END IF;

IF v_CURR_GOOD IS NOT NULL THEN
UPDATE TABLE3
SET GOODSALES=v_CURR_GOOD *(SELECT GOSPRICE FROM TABLE2 WHERE c_TABLE1_INFO.GOODTYPE AND ROWNUM=1)
WHERE GOODNOLINK=c_TABLE1_INFO.GOODNO;
END IF;

END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SUBSTR('ERROR:'||SQLERRM,1,255));
END UPDATE_TABLE3_TEST;
注:以上过程未经调试,如有错误,楼主自己检查下
zzwind5 2005-10-14
  • 打赏
  • 举报
回复
create or replace procedure update_table3 is
cursor ub is select * from table1;
user varchar2(50);
admin varchar2(50);
begin
for tab in ub loop
if tab.goodfor=user or tab.goodfor=admin then
if tab.goodtype=1 then
update table3
set goodsales=tab.good1*(select gosprice from table2 where gos=tab.goodtype and rownum=1)
where goodnolink=tab.goodno;
elseif tab.goodtype=2 then
update table3
set goodsales=tab.good2*(select gosprice from table2 where gos=tab.goodtype and rownum=1)
where goodnolink=tab.goodno;
end if;
end if;
end loop;
commit;
end;
slayerbb 2005-10-14
  • 打赏
  • 举报
回复
常量值。
waterfirer 2005-10-14
  • 打赏
  • 举报
回复
user,admin这些指定值哪来的?
slayerbb 2005-10-14
  • 打赏
  • 举报
回复
table1
字段
good1,good2,goodtype,goodfor,goodNo
aaa,bbb,1,user,a1
ccc,ddd,2,admin,a2
table2
字段
gos,gostype,gosprice
1,tt,20
2,ast,30
table3
字段
goodNolink,goodsales
a1, waiting for update
a2,

table1,table2,table3计3个表
首先在table1种select good1,good2,goodtype,goodfor,goodno,(这几个字段中有依存关系 ,goodtype=1 取good1,类似),
判断指定字段goodfor的值是否为指定值 比如user,
如果是
继续判断另外一个字段goodtype的值是否为指定值比如 1,
如果是
执行一个更新操作,
插入到table3的一个字段,而出入值为table1中good1字段值乘以 从table2中取出的特定值( gosprice )。
更新条件为 table1和table3的关联外键 table3.goodnolink=table1.goodno。
如果不是继续判断他是否等于另外一个指定值比如 2,
继续以上流程
如果goodfor的值不是 继续判断是否等于另外一个指定值 比如admin
继续以上流程
qiaozhiwei 2005-10-14
  • 打赏
  • 举报
回复
最好写几个数据来看下,也好回答楼主的问题

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧