+ -
当前位置:首页 → 问答吧 → 存储过程

存储过程

时间:2011-11-24

来源:互联网

想从 1.首先从test表里面取出一个字段name  
  2.student表里面根据test表已经取出的name与 student表里面的name1匹配,最后取出student表里面的id
  3.再根据test表里面的字段name 与 student表里面的name1相同 把 student表的id插入test表里面的oid


procedure df_id is
 
v_subg3efid number;
   
  cursor cur is (select name
  from test t);
  begin 
  
  for cur_result in cur loop
  begin  
  select id  
  into v_subid  
  from student  
  where rownum = 1
  and name1 = cur_result.name;
   
  update test t
  set t.oid = v_subid
  where t.name1 = cur_result.name;
  end;  
  end loop;
  commit ;
  end df_id;

为什么这样写的存储过程会没有任何效果?

作者: shper87298   发布时间: 2011-11-24

为什么要写存储过程呢?
SQL语句就可以实现吧。

作者: yixilan   发布时间: 2011-11-24

SQL code
用merge into实现!@

作者: cosio   发布时间: 2011-11-24

SQL code

--merge into 一个sql解决,为啥用存储过程。
MERGE INTO TEST a
USING student b
   ON(a.name = b.name1)
 WHEN MATCHED THEN
   UPDATE SET a.oid = b.id;


作者: BenChiM888   发布时间: 2011-11-24


看到的时候是一楼,写完了变成3楼了。
引用 3 楼 benchim888 的回复:
SQL code

--merge into 一个sql解决,为啥用存储过程。
MERGE INTO TEST a
USING student b
ON(a.name = b.name1)
WHEN MATCHED THEN
UPDATE SET a.oid = b.id;

作者: BenChiM888   发布时间: 2011-11-24

引用 4 楼 benchim888 的回复:
看到的时候是一楼,写完了变成3楼了。

引用 3 楼 benchim888 的回复:
SQL code

--merge into 一个sql解决,为啥用存储过程。
MERGE INTO TEST a
USING student b
ON(a.name = b.name1)
WHEN MATCHED THEN
UPDATE SET a.oid = b.id;

现在就是不能用SQL语句,希望能用存储过程弄出来呢。= =。现在是只能update了第一条数据,第二条没变。求指导·

作者: shper87298   发布时间: 2011-11-24

你的存储过程重新贴一下吧!

作者: cosio   发布时间: 2011-11-24

procedure df_id is
  cursor cur is select *
  from test t; 

  cur_result test%rowtype;
  v_subg3efid number;
  begin 
  
  for cur_result in cur loop
   
  select id
  into v_subid  
  from student
  where rownum = 1
  and name1 = cur_result.name;
   
  update test t
  set t.oid = v_subid
  where t.name1 = cur_result.name;

  end loop;
  commit;
  end df_id ;
这是最新的。 跪求指导呀·

作者: shper87298   发布时间: 2011-11-24