楼主: 〇〇

终于改出了能超过4000字的unwrap

[复制链接]
论坛徽章:
0
131#
发表于 2014-12-1 16:15 | 只看该作者
buxianggan 发表于 2012-12-4 15:02
求解密

PROCEDURE telco_load (CUST_COUNT BINARY_INTEGER DEFAULT 10000) IS

TYPE TARIFF_TYPE IS VARRAY(4) OF VARCHAR2(30);
TARIFF CONSTANT TARIFF_TYPE := TARIFF_TYPE('PEAK','OFFP','WEEK','INT');

TYPE PM_TYPE IS VARRAY(4) OF NUMBER;
CHARGE_PER_MIN CONSTANT PM_TYPE := PM_TYPE(0.19,0.09,0.05,0.35);
DROP_PER_MIN CONSTANT PM_TYPE := PM_TYPE(0.001,0.0001,0.0002,0.004);

TYPE PM_TYPE_GROUP IS VARRAY(4) OF PM_TYPE;
MINS_MEAN_PTT CONSTANT PM_TYPE_GROUP :=
  PM_TYPE_GROUP(PM_TYPE(600,150,50,20),
                PM_TYPE(50,80,20,250),
                PM_TYPE(50,200,200,150),
                PM_TYPE(450,100,300,50));
MINS_LIM_PTT CONSTANT PM_TYPE_GROUP :=
  PM_TYPE_GROUP(PM_TYPE(800,150,100,0),
                PM_TYPE(100,100,100,450),
                PM_TYPE(100,300,300,200),
                PM_TYPE(600,150,450,90));

TYPE REV_TYPE IS VARRAY(5) OF NUMBER;
REVS REV_TYPE := REV_TYPE(0,0,0,0,0);

CUST_TYPE BINARY_INTEGER;
AGE BINARY_INTEGER;
LOS BINARY_INTEGER;
GENDER CHAR(1);
MINS_MEAN NUMBER;
MINS_STDDEV NUMBER;
MINS BINARY_INTEGER;
CDRID BINARY_INTEGER := 1;
REVID BINARY_INTEGER := 1;
HANDSET VARCHAR2(30);
RVALD NUMBER;
TAR_PLAN VARCHAR2(30);
TAR_TYPE VARCHAR2(30);
DC NUMBER;
CHURN CHAR(1);
CHURNP NUMBER;
TOTREV NUMBER;
EM NUMBER;
REVSPEAK NUMBER;
BEGIN
DBMS_RANDOM.SEED(0);

FOR I IN 1..CUST_COUNT LOOP

  
  IF (DBMS_RANDOM.VALUE <= 0.5) THEN
   GENDER := 'M';
  ELSE
   GENDER := 'F';
  END IF;

  
  AGE := -1;
  WHILE ((AGE < 15) OR (AGE > 90)) LOOP
   AGE := ROUND(DBMS_RANDOM.NORMAL*25+36);
  END LOOP;

  
  RVALD := DBMS_RANDOM.VALUE;
  IF (RVALD < 0.4) THEN
   CUST_TYPE := 1;
  ELSIF (RVALD < 0.7) THEN
   CUST_TYPE := 2;
  ELSIF (RVALD < 0.9) THEN
   CUST_TYPE := 3;
  ELSE
   CUST_TYPE := 4;
  END IF;

  
  INSERT INTO CUSTOMERS VALUES(I,AGE,GENDER);

  
  FOR K IN 1..5 LOOP
   REVS(K) := 20;
  END LOOP;
  DC := 0;
  TOTREV := 0;
  REVSPEAK := 0;

  
  FOR J IN 1..4 LOOP
   MINS_MEAN := DBMS_RANDOM.NORMAL*MINS_MEAN_PTT(CUST_TYPE)(J)*0.4+MINS_MEAN_PTT(CUST_TYPE)(J);
   MINS_STDDEV := MINS_MEAN * 0.4;
   MINS := ROUND(DBMS_RANDOM.NORMAL*MINS_STDDEV+MINS_MEAN);
   FOR K IN 1..5 LOOP
   
    MINS := (DBMS_RANDOM.NORMAL*0.2+1)*MINS;
    IF (MINS > 0) THEN
     INSERT INTO CDR_T VALUES (I,TARIFF(J),K,CDRID,MINS);
     CDRID := CDRID + 1;
     IF (MINS > MINS_LIM_PTT(CUST_TYPE)(J)) THEN
      
      EM := ROUND(CHARGE_PER_MIN(J)*(MINS-MINS_LIM_PTT(CUST_TYPE)(J)),2);
      REVS(K) := REVS(K) + EM;
      IF (J = 1) THEN
       REVSPEAK := REVSPEAK + EM;
      END IF;
     END IF;
     
     DC := DC + ROUND((MINS*DROP_PER_MIN(J))*(DBMS_RANDOM.VALUE+0.5));
    END IF;
   END LOOP;
  END LOOP;

  
  FOR K IN 1..5 LOOP
   INSERT INTO REVENUES VALUES(REVID,I,K,REVS(K));
   REVID := REVID + 1;
   TOTREV := TOTREV + REVS(K);
  END LOOP;

  
  RVALD := DBMS_RANDOM.VALUE;
  IF (RVALD < 0.4) THEN
   HANDSET := 'Droid X';
  ELSIF (RVALD < 0.7) THEN
   HANDSET := 'iPhone 4';
  ELSIF (RVALD < 0.8) THEN
   HANDSET := 'iPhone 3gs';
  ELSE
   HANDSET := 'Evo 4g';
  END IF;

  
  
  LOS := 121;
  IF (DBMS_RANDOM.VALUE < 0.4) THEN
   WHILE (LOS > 120) LOOP
    LOS := ROUND(EXP(DBMS_RANDOM.NORMAL*(3/2))*12);
   END LOOP;
  ELSE
   WHILE (LOS > 120) LOOP
    LOS := ROUND(EXP(DBMS_RANDOM.NORMAL*(1/4))*72);
   END LOOP;
  END IF;

  
  RVALD := DBMS_RANDOM.VALUE;
  IF (RVALD < 0.6) THEN
   TAR_PLAN := 'CAT';
   TAR_TYPE := 1;
  ELSIF (RVALD < 0.95) THEN
   TAR_PLAN := 'PLAY';
   TAR_TYPE := 2;
  ELSE
   TAR_PLAN := 'PLUS';
   TAR_TYPE := 3;
  END IF;

  
  CHURNP := 0.15;
  IF (DBMS_RANDOM.VALUE < 0.8) THEN
   CHURNP := CHURNP * (DC+4)/7;
   CHURNP := CHURNP * POWER(((200-AGE)/150),3);
   CHURNP := CHURNP * POWER(((240-LOS)/180),3);
   IF ((REVS(5) > (((REVS(1)+REVS(2)+REVS(3)+REVS(4))/4)*1.1)) OR
       (REVS(5) > REVS(4)*1.2)) THEN
    CHURNP := CHURNP * 1.5;
   ELSE
    CHURNP := CHURNP / 1.25;
   END IF;
  END IF;
  IF (REVSPEAK > 20) THEN
    CHURNP := CHURNP * 2;
  END IF;
  IF (DBMS_RANDOM.VALUE < CHURNP) THEN
   CHURN := 'Y';
  ELSE
   CHURN := 'N';
  END IF;

  
  INSERT INTO SERVICES VALUES(I,HANDSET,LOS,DC,TAR_TYPE,TAR_PLAN,CHURN);

END LOOP;
COMMIT;
END;

使用道具 举报

回复
论坛徽章:
0
132#
发表于 2015-1-28 11:09 | 只看该作者
type code:      b
len_src:        62849   len_wrap:       25963
freadsize:3865  fread err
这个怎么解决啊

使用道具 举报

回复
论坛徽章:
2
马上有对象
日期:2014-07-30 16:25:01优秀写手
日期:2014-08-12 06:00:13
133#
发表于 2015-5-28 16:11 | 只看该作者
本帖最后由 blzys 于 2015-5-28 16:15 编辑

SQL>  exec unwrap('SYS','DL2ML','FUNCTION');
BEGIN unwrap('SYS','DL2ML','FUNCTION'); END;

*
ERROR at line 1:
ORA-29261: bad argument
ORA-06512: at "SYS.UTL_ENCODE", line 29
ORA-06512: at "SYS.UTL_ENCODE", line 251
ORA-06512: at "SYS.UNWRAP", line 44
ORA-06512: at line 1


我的版本是Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


和94楼的报错一样的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表