你这里净用些不该用的东西,不是就存一个数吗?为啥要用循环?为啥要用动态sql?为啥insert后不写commit?
创建测试表:
create table demo(cnt int);
创建存储过程:
create or replace procedure p_test --存储过程名我改了,存储过程最好以p开头,比较容易统一管理as
v_cnt int; --变量名改了
begin
select count(1) into v_cnt from emp; -- table1换成emp了,这个你随意,只是我这边没有table1
insert into demo values(v_cnt);
commit; --加了commit
end;
你是想实现这个功能吗?
begin
for i in 2 1000
loop
insert into t values ( i, 'x' );
end loop;
commit;
end;
在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行 *** 作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 查询语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。
我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的 *** 作,而不是一次对整个结果集进行同一种 *** 作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
以下实例用的是在存储过程中遍历结果和查询数据库中所有 存储过程名称 加以处理以文本形式输出:
create procedure findName--创建一个名为findName的存储过程AS
declare @result VARCHAR(30)--用来处理结果的变量
begin
--声明一个游标
Declare curStudentFee Cursor for
SELECT NAME FROM SYSOBJECTS WHERE XTYPE='P';---查询语句(查询所有用户存储过程名称)
--打开游标
Open curStudentFee
--循环并提取记录
Fetch Next From curStudentFee Into @result--取第一条记录存入@result中
While ( @@Fetch_Status=0 )
begin
print ''''+@result+''''+',';---处理结果
Fetch Next From curStudentFee into @result----下一条
end
--关闭游标
Close curStudentFee
--释放游标
Deallocate curStudentFee
end
使用游标,如下
CREATE PROCEDURE proc_getalltable
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tablename VARCHAR(100),@sql VARCHAR(1000)
DECLARE tablename CURSOR FOR SELECT tname FROM tablelist
OPEN tablename
FETCH NEXT FROM tablename INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = 'SELECT FROM ' + @tablename
EXEC(@sql)
FETCH NEXT FROM tablename INTO @tablename
END
CLOSE tablename
DEALLOCATE tablename
END
GO
1、创建测试表,
create table test_loop(id varchar2(20),remark varchar2(20));
2、循环插入测试数据;
begin
for i in 1100 loop
insert into test_loop
values(i,'level_'||i);
end loop;
commit;
end;
3、查询表中全量数据;select t, rowid from test_loop t;
4、编写语句,查询表中记录数,可以看到结果为100;
select count() sec from test_loop t ;
本文中的存储过程示例 预计的循环次数是yh表行数 由于SELECT IID INTO PINT FROM YH WHERE = ;不返回任何行 所以at_end后会立刻等于 (只循环一次就退出)
lishixinzhi/Article/program/DB2/201311/21926
以上就是关于数据库存储过程问题,请指教下,这怎么把统计数据存到指定表里面,目前是没有数据存到表里面全部的内容,包括:数据库存储过程问题,请指教下,这怎么把统计数据存到指定表里面,目前是没有数据存到表里面、DB2数据库 写了一个循环插数的存储过程,但是报错,不清楚是为什么,请高手指导。、sql语句编写存储过程,使用游标循环打印学生表中的数据,求大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)