dbms_sql包怎么才能把记录全部取出?

backlove 2001-09-16 06:38:32
create or replace procedure ps_copymessage as
tmp number;
row_count integer;
cid integer;
a number;
b number;
stat integer;
tname varchar2(50);
allcount number(10);
begin
CREATE GLOBAL TEMPORARY TABLE MyTempTable
(
a number(10),
b char(10)
)
on commit delete rows;
cid := DBMS_SQL.OPEN_CURSOR;
tname:='a';
DBMS_SQL.PARSE(cid,'select * from '||tname,dbms_sql.native);
DBMS_SQL.DEFINE_COLUMN(cid,1,a);
DBMS_SQL.DEFINE_COLUMN(cid,2,b);
stat := DBMS_SQL.EXECUTE_AND_FETCH(cid);
-- loop
row_count := DBMS_SQL.FETCH_ROWS(cid);
DBMS_SQL.COLUMN_VALUE(cid,1,a);
DBMS_SQL.COLUMN_VALUE(cid,2,b);
insert into a values(row_count,stat);
--end loop;
DBMS_SQL.CLOSE_CURSOR(cid);
end;


我需要从一个表中把部分记录取出来,插入另一个表中,该怎么取呢?
这个循环该怎么做呢?急死了!!

还有个问题,如何在procedure中创建临时表?
如解决,200分送上!谢谢!
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
backlove 2001-09-17
  • 打赏
  • 举报
回复
算了,把分分了吧,我自己想办法得了
backlove 2001-09-16
  • 打赏
  • 举报
回复
楼上的方法不行,因为数据在插入另外一个表之前需要计算
hxflx 2001-09-16
  • 打赏
  • 举报
回复
1.源表与目标表结构相同。
2.使用存储过程把 des_table , sou_table设成动态。
3.insert into des_table (select * from sou_table where ...)
backlove 2001-09-16
  • 打赏
  • 举报
回复
要求是:
在存储过程中,从一个表中按一条动态sql语句取出部份记录,
然后插入到另外一个表中。
大家是怎么做的?只要能实现就行呀,不管什么方法!
帮帮忙!
backlove 2001-09-16
  • 打赏
  • 举报
回复
OPEN c2 FOR SELECT * FROM a;
-- ~~~~~~~~~~~~~~~~怎么写成动态sql呢?
--open c1;
for a_rec In c1('abc') loop
--fetch c1 into tmp;
--exit when c1%NOTFOUND; --如果游标记录取完,退出循环
insert into a(a) values(a_rec.a+100);
end loop;
-- close c1;

KingSunSha 2001-09-16
  • 打赏
  • 举报
回复
一定要用DBMS_SQL包吗?直接用PL/SQL不能完成你的要求吗?
backlove 2001-09-16
  • 打赏
  • 举报
回复
上面存储过程中的
"CREATE GLOBAL TEMPORARY TABLE MyTempTable
(
a number(10),
b char(10)
)
on commit delete rows;"
这一段去除

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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