Chinaunix首页 | 论坛 | 博客
  • 博客访问: 137499
  • 博文数量: 25
  • 博客积分: 460
  • 博客等级: 下士
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-11 10:48
个人简介

努力学习,谦虚请教,不断提升!

文章分类

全部博文(25)

文章存档

2015年(3)

2014年(4)

2013年(3)

2012年(9)

2011年(6)

我的朋友

分类: DB2/Informix

2011-10-11 17:27:25

--1、创建table1和table2两张表
CREATE TABLE table1
(
    nameid varchar(128) PRIMARY KEY,
    name varchar(255)
);
INSERT INTO table1 (nameid,name) VALUES ('1','tommy');
INSERT INTO table1 (nameid,name) VALUES ('2','Richard');
INSERT INTO table1 (nameid,name) VALUES ('3','Charles');
INSERT INTO table1 (nameid,name) VALUES ('4','Henry');
INSERT INTO table1 (nameid,name) VALUES ('5','Mark');
INSERT INTO table1 (nameid,name) VALUES ('6','David');
-------------------
CREATE TABLE table2
(
    id varchar(128) PRIMARY KEY,
    gender nchar(5),
    height char(4),
    job varchar(255)
);
insert into table2 (id,gender,height,job) values ('1','man','164CM','doctor');
insert into table2 (id,gender,height,job) values ('2','woman','13CM','salesman');
insert into table2 (id,gender,height,job) values ('3','man','167CM','manager');
insert into table2 (id,gender,height,job) values ('4','woman','156CM','secretary');
insert into table2 (id,gender,height,job) values ('5','man','167CM','box');
insert into table2 (id,gender,height,job) values ('6','woman','153CM','model');
--给表table2插入一列type1
ALTER TABLE table2 ADD type1 integer DEFAULT 0;
-------------------
CREATE TABLE table3
(
    yjid integer PRIMARY KEY,
    mustyj float,
    realityyj float,
    percentyj float
);
insert into table3 (yjid,mustyj,realityyj,percentyj) values ('1','10','8.9','');
insert into table3 (yjid,mustyj,realityyj,percentyj) values ('2','10','7.9','');
insert into table3 (yjid,mustyj,realityyj,percentyj) values ('3','10','8.4','');
insert into table3 (yjid,mustyj,realityyj,percentyj) values ('4','10','8.3','');
insert into table3 (yjid,mustyj,realityyj,percentyj) values ('5','10','7.3','');
--以下所有实验使用以上3个表
--2、模拟环境:table2表中gender列只有一行为空的情况下
drop table table3;
drop procedure table_function;
CREATE PROCEDURE table_function()
define id_v varchar(128);
define name_v varchar(255);
define gender_v char(4);
create table table3 (id varchar(128),name varchar(255),gender char(4));
select first 1 t1.nameid,t1.name,t2.gender into id_v,name_v,gender_v from table1 t1,table2 t2 where t1.nameid=t2.id and t2.gender='';
insert into table3 values (id_v,name_v,gender_v);
update table2 set gender='NO' where id=id_v;
end procedure;            
execute procedure table_function();  
--3、模拟环境:table2表中gender列多行为空的情况下
drop table table3;
drop procedure table_function;
create procedure table_function()
  define id_v varchar(128);
  define name_v varchar(255);
  define gender_v char(4);    
  let gender_v='';
  --create table可以去掉
  create table table3 (id varchar(128),name varchar(255),gender char(4));
while gender_v =''
  select first 1 t1.nameid,t1.name,t2.gender into id_v,name_v,gender_v from table1 t1,table2 t2 where t1.nameid=t2.id and t2.gender='';
  --insert into 可以去掉
insert into table3 values (id_v,name_v,gender_v);
update table2 set gender='NO' where id=id_v;
continue while;
end while;
end procedure;   
execute procedure table_function();
--4、模拟环境:如果table2表中的type1为0侧为man为1侧为woman
drop procedure table_function;
create procedure table_function()
  define id_v varchar(128);
  define name_v varchar(255);
  define gender_v char(4);
  define type1_v integer;    
  let gender_v='';
while gender_v =''
  select first 1 t1.nameid,t1.name,t2.gender into id_v,name_v,gender_v from table1 t1,table2 t2 where t1.nameid=t2.id and t2.gender='';
  select type1 into type1_v from table2 where id=id_v;
    if type1_v =0 then
update table2 set gender='man' where id=id_v;
    end if;
    if type1_v =1 then
      update table2 set gender='woman' where id=id_v;
    end if;
continue while;
end while;
end procedure;   
execute procedure table_function();


--5、模拟环境:计算员工的业绩百分比
drop procedure table_function;
create procedure table_function()
  define yjid_v integer;
define mustyj_v float;
define realityyj_v float;
define percentyj_v float;
  define i integer;
  define x integer;
  select count(*) into i from table3 where percentyj is null;
for x =1 to i
select first 1 yjid,mustyj,realityyj into yjid_v,mustyj_v,realityyj_v from table3 where percentyj is null;
let percentyj_v =realityyj_v/mustyj_v; 
update table3 set percentyj=percentyj_v where yjid=yjid_v;
end for;
end procedure;
execute procedure table_function();
--6、模拟环境:当业绩percentyj小于60%或者percentyj大于90%的时候不做优化,当percentyj大于0.7并且小于0.9的时候开始做优化。
drop procedure table_function;
create procedure table_function()
  define yjid_v integer;
define mustyj_v float;
define realityyj_v float;
define realityyj_v1 float;
define percentyj_v float;
define percentyj_v1 float;
  define i integer;
  define x integer;
  select count(*) into i from table3 where percentyj is null;
for x =1 to i
select first 1 yjid,mustyj,realityyj into yjid_v,mustyj_v,realityyj_v from table3 where percentyj is null;
let percentyj_v =realityyj_v/mustyj_v; 
if percentyj_v <=0.6 or percentyj_v >=0.9 then
let percentyj_v1 =percentyj_v;
update table3 set percentyj=percentyj_v1 where yjid=yjid_v;
elif percentyj_v >0.6 and percentyj_v <0.9 then
let realityyj_v1 =mustyj_v*0.98;
let percentyj_v1 =realityyj_v1/mustyj_v; 
update table3 set percentyj=percentyj_v1 where yjid=yjid_v;
end if;
end for;
end procedure;
execute procedure table_function();
--7、模拟环境:随机数存储过程
CREATE PROCEDURE sp_random() RETURNING INTEGER;
        DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1;
        DEFINE d DECIMAL(20,0);
        LET d = (seed * 1103515245) 12345;
        -- MOD function does not handle 20-digit values...  Dammit!!
        LET seed = d - 4294967296 * TRUNC(d / 4294967296);
        RETURN MOD(TRUNC(seed / 65536), 32768);
END PROCEDURE;
execute procedure sp_random();
--8、模拟环境:将变量值打印到日志中
drop procedure table_function;
create procedure table_function(id_v integer default 3,percentyj_v float default 44)
update table3 set percentyj=percentyj_v where yjid=id_v;
system 'echo ' || percentyj_v || ' > /home/informix/data/b.log';
system 'echo ' || percentyj_v || ' > $(tty)'; 
end procedure;
execute procedure table_function();
阅读(1618) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~