免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3766 | 回复: 3
打印 上一主题 下一主题

为什么这个程序会报错,哪位能给解答一下,多谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-08 13:38 |只看该作者 |倒序浏览
这段代码主要是测试生成10万条数据,数据库所花费的时间;但是单独执行 select now();这个语句不会报错;而在pgplsql存储过程里面会报错,哪位牛牛能够解释一下;





  1. create table staff( SN varchar(7) primary key
  2. , First_Name  varchar(20)
  3. , Last_name   varchar(15)
  4. , ID    varchar (18) unique not null check (char_length(id)>14 and char_length(id)<19 )
  5. , gender char(1) check ( gender in ('F','M'))
  6. , married_state char(1) check ( married_state in ('Y','N','D','F'))
  7. );


  8. CREATE OR REPLACE FUNCTION TYDO() RETURNS void AS $$

  9.         DECLARE
  10.                 f_name staff.First_name%TYPE;
  11.                 l_name staff.Last_name%TYPE;
  12.                 ssn     staff.SN%TYPE;
  13.                 myid   staff.id%TYPE;
  14.                 sex staff.gender%TYPE;
  15.                 ms staff.married_state%TYPE;
  16.         BEGIN
  17.                 SELECT now();  -- 想知道开始时间;但是这个语句会报错
  18.                 FOR I IN 1 .. 9999999 LOOP
  19.                         f_name := rpad('Tony',7,I);
  20.                         l_name := rpad('Zhu',7,I);
  21.                         ssn := lpad(I,7,'0');
  22.                         myid := lpad(I,18,'0');

  23.                         if MOD(i,2)=0 then
  24.                                 sex := 'F';
  25.                                 ms  := 'Y';
  26.                         else
  27.                                 sex := 'M';
  28.                                 ms  := 'N';
  29.                         end if;

  30.                         INSERT INTO staff(SN,First_Name,Last_name,ID,gender,married_state)
  31.                         VALUES (ssn, f_name, l_name, myid, sex, ms);


  32.                 END LOOP;
  33.                 SELECT now();  -- 想知道结束时间;但是这个语句也会报错
  34.                 RETURN;
  35.         END;

  36. $$ LANGUAGE plpgsql;

复制代码

[ 本帖最后由 horseman 于 2006-9-8 13:39 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-09-08 17:54 |只看该作者
先定义两个timestamp变量begin_time和end_time

$begin_time:=now();
.......
$end_time:=now();
返回begin_time和end_time的差值就可以了

论坛徽章:
0
3 [报告]
发表于 2006-09-11 15:56 |只看该作者

回复 2楼 xktop 的帖子

多谢,呵呵,能不能在原来代码的基础上改出来啊,我不是很清楚你的意思。多谢

论坛徽章:
0
4 [报告]
发表于 2006-09-11 16:16 |只看该作者
我的意思就是你在存储过程中调用函数的方法错了,不是select func();这是sql交互环境下的使用函数的方法,在存储过程中使用函数直接用就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP