楼主: yulihua49

[讨论] 侃一下关于程序的“柔性”

[复制链接]
论坛徽章:
33
劳斯莱斯
日期:2013-08-08 14:01:23三菱
日期:2013-09-28 10:16:06一汽
日期:2013-11-19 17:01:11凯迪拉克
日期:2013-12-07 17:11:282014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02itpub13周年纪念徽章
日期:2014-09-27 14:20:21itpub13周年纪念徽章
日期:2014-10-08 15:13:38懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
121#
发表于 2011-9-6 08:22 | 只看该作者
原帖由 〇〇 于 2011-9-6 06:34 发表

中间那个S是拼SQL。。。
干脆再办个比赛好了,双方商量数据库表结构和数据生成规律...

这个必须支持。

使用道具 举报

回复
论坛徽章:
2
蜘蛛蛋
日期:2011-08-31 12:44:35ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29
122#
发表于 2011-9-6 10:03 | 只看该作者
原帖由 〇〇 于 2011-9-6 06:34 发表

中间那个S是拼SQL。。。
干脆再办个比赛好了,双方商量数据库表结构和数据生成规律...

支持。文无第一武无第二。比划比划就知道了。

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
59
妮可·罗宾
日期:2017-04-29 10:55:21弗兰奇
日期:2018-08-31 20:09:41ITPUB18周年纪念章
日期:2019-03-12 14:03:4619周年集字徽章-周
日期:2019-09-29 10:43:3420周年集字徽章-20	
日期:2020-10-28 14:48:18
123#
发表于 2011-9-6 12:46 | 只看该作者
原帖由 昨夜袜子 于 2011-9-6 10:03 发表

支持。文无第一武无第二。比划比划就知道了。


这不成看热闹了么。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
124#
发表于 2011-9-6 21:53 | 只看该作者
原帖由 〇〇 于 2011-9-6 06:34 发表

中间那个S是拼SQL。。。
干脆再办个比赛好了,双方商量数据库表结构和数据生成规律...

记得我从两年前就向他叫板了。不过我要求的是实现业务需求,而不是来做一个什么通用报表工具、装载工具什么的,PLSQL处理文件和字符串没有优势,它的优势在于和SQL的无缝集成。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
125#
 楼主| 发表于 2011-9-9 17:16 | 只看该作者
原帖由 newkid 于 2011-8-25 01:24 发表


“将来表改了”假如是新增了列,你这个做法就会自动SELECT新列;假如减少列,则自动去除。
由此说明你这个应用根本就是透明的传输而已,它不是数据的消费者。新增的列要体现到业务中的,减少的列也要把原来的使用这个列的代码去掉。
再次重复我前面说过的话:这种透明的包装、传输只对你自己有用,PLSQL根本用不着。


这个功能根本用不着PL/SQL。自己解决了。
你的那个程序,我已经测试了。单例的。没做压力。节后再说。
跟我的程序比了一下。在客户端,从发送命令到接收结果的时间。单位是微秒。

你的存储过程的执行时间:
TIMEVAL=58606
TIMEVAL=23585
TIMEVAL=20988
TIMEVAL=11657
TIMEVAL=24134
TIMEVAL=10919

我的:
TIMEVAL=30372
TIMEVAL=16913
TIMEVAL=9121
TIMEVAL=9655
TIMEVAL=8766
TIMEVAL=16947

[ 本帖最后由 yulihua49 于 2011-9-9 17:24 编辑 ]

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
126#
 楼主| 发表于 2011-9-9 17:28 | 只看该作者
只把app层贴出来:不用DAU,看看怎么样。

  1. //app层
  2. static int getpage(CTX *ctx,JSON_OBJECT cmd,JSON_OBJECT result)
  3. {
  4. int ret,cursor;
  5. INT64 now;
  6. struct msg_stu app;
  7. JSON_OBJECT val;
  8. char msg[4096],bindval[1024],*p;

  9.         now=now_sec();
  10.         *msg=0;
  11.         data_init(&app, msg_stu_tpl);

  12.         //对传入的JSON对象进行拆包
  13.         val=json_object_object_get(cmd,"values");
  14.         ret=json_to_struct(&app,cmd,msg_stu_tpl);
  15.         if(!val||!ret){
  16.                 sprintf(msg,"getpage:transfer json error!");
  17.                 json_object_object_add(result,"error",jerr(-1,msg));
  18.                 return -1;
  19.         }
  20. //你的val不是JSON串,是他的一部分,比较麻烦
  21.         p=bindval;
  22.         struct lh_entry *entry ;
  23.         for(entry = json_object_get_object(val)->head;entry;entry = entry->next ) {
  24.                 *p++ = '\"';
  25.                 p=stpcpy(p,entry->k);                           //KEY
  26.                 p=stpcpy(p,"\":\"");
  27.                 p=stpcpy(p,(char *)json_object_get_string((struct json_object *)entry->v));     //Value
  28.                 p=stpcpy(p,"\",");
  29.         }
  30.         *(--p)=0;

  31.         sprintf(msg,"get_data.read(:cursor,'%s','%s',%d,%d,'%s')",
  32.                 app.tablename,app.where,app.page_size,
  33.                 app.page_idx,bindval);
  34.         p=NULL;
  35.         ShowLog(5,"%s:RPC stmt=%s",__FUNCTION__,msg);
  36.         ret=ORA_Rpc(ctx->SQL_Connect,msg,&p);
  37.         ShowLog(5,"%s:RPC ret=%d,p=%s",__FUNCTION__,ret,p);
  38.         if(ret<0||!p) {
  39.                 ShowLog(1,"%s:RPC fault ret=%d,err=%d,%s",__FUNCTION__,
  40.                         ret,
  41.                         ctx->SQL_Connect->Errno,
  42.                         ctx->SQL_Connect->ErrMsg);
  43.                 json_object_object_add(result,"error",
  44.                         jerr(ctx->SQL_Connect->Errno,ctx->SQL_Connect->ErrMsg));
  45.                 return -1;
  46.         }

  47. /* 如果是裸数据
  48.         int i,nc;
  49.         char *cp,*cp1;
  50.         CONST char **n = sqlo_ocol_names(cursor, &nc);//取列名
  51. */

  52.         cursor=atoi(p);
  53.         free(p);
  54.         val=json_object_new_array();
  55.         while(NULL!=(p=___SQL_Fetch(ctx->SQL_Connect,cursor,NULL))){
  56.         JSON_OBJECT json;
  57.                 //结果集打成JSON包
  58.                 json=json_tokener_parse(p);
  59.                 if(!json) {
  60.                         ShowLog(1,"%s:%s:not a JSON",__FUNCTION__,p);
  61.                         free(p);
  62.                         continue;
  63.                 }
  64. /* 如果是裸数据
  65.                 JSON_NEW(json);
  66.                 cp=strtok_r(p,"|",&cp1);
  67.                 for(i=0;i<nc;i++) {
  68.                         add_string_to_json(json,n[i],cp);
  69.                         cp=strtok_r(NULL,"|",&cp1);
  70.                 }
  71. */
  72.                 free(p);
  73.                 json_object_array_add(val,json);
  74.         }
  75.         json_object_object_add(result,app.tablename,val);
  76.         ___SQL_Close__(ctx->SQL_Connect,cursor);

  77.         return 0;
  78. }

复制代码

[ 本帖最后由 yulihua49 于 2011-9-9 17:54 编辑 ]

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
127#
 楼主| 发表于 2011-9-9 17:32 | 只看该作者
[quote]原帖由 yulihua49 于 2011-9-9 17:28 发表
调用的过程:

  1. 5 FIRST35:127.0.0.1:140035030738704 09/09 16:54'02 getpage:RPC stmt=get_data.read(:cursor,'TI_CITY','WHERE DAIL_AREA_CODE=:DAIL_AREA_CODE AND CITY_STOP_DATE >= :CITY_STOP_DATE',10,1,'"DAIL_AREA_CODE":"0350","CITY_STOP_DATE":"20110909"')
  2. 5 FIRST35:127.0.0.1:140035030738704 09/09 16:54'02 ORA_Rpc:
  3. BEGIN
  4. get_data.read(:cu1,'TI_CITY','WHERE DAIL_AREA_CODE=:DAIL_AREA_CODE AND CITY_STOP_DATE >= :CITY_STOP_DATE',10,1,'"DAIL_AREA_CODE":"0350","CITY_STOP_DATE":"20110909"');
  5. END;
  6. 5 FIRST35:127.0.0.1:140035030738704 09/09 16:54'02 getpage:RPC ret=0,p=1|
复制代码

[ 本帖最后由 yulihua49 于 2011-9-9 17:33 编辑 ]

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
128#
 楼主| 发表于 2011-9-9 17:36 | 只看该作者

回复 #129 yulihua49 的帖子

我的结果:

  1. cmd={ "tablename": "TI_CITY", "where": "WHERE DAIL_AREA_CODE=:DAIL_AREA_CODE AND CITY_STOP_DATE >= :CITY_STOP_DATE", "page_size": "10", "page_idx": "1", "values": { "DAIL_AREA_CODE": "0350", "CITY_STOP_DATE": "20110909" } }
  2. data={ "TI_CITY": [ { "CITY_CODE": "0403", "CITY_NAME": "忻州", "CITY_SHORTCODE": "XZH", "CITY_CLASS": "3", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0416", "CITY_NAME": "宁武", "CITY_SHORTCODE": "NWU", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0417", "CITY_NAME": "五寨", "CITY_SHORTCODE": "WZH", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0418", "CITY_NAME": "岢岚", "CITY_SHORTCODE": "KLA", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0423", "CITY_NAME": "原平", "CITY_SHORTCODE": "YPI", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0424", "CITY_NAME": "定襄", "CITY_SHORTCODE": "DXI", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0425", "CITY_NAME": "五台", "CITY_SHORTCODE": "WTA", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0426", "CITY_NAME": "代县", "CITY_SHORTCODE": "DXI", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0427", "CITY_NAME": "繁峙", "CITY_SHORTCODE": "FSH", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" }, { "CITY_CODE": "0428", "CITY_NAME": "神池", "CITY_SHORTCODE": "SCH", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350", "CITY_START_DATE": "19491001", "CITY_STOP_DATE": "21000101", "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" } ] }


复制代码

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
129#
 楼主| 发表于 2011-9-9 17:37 | 只看该作者

回复 #130 yulihua49 的帖子

你的结果:

  1. cmd={ "tablename": "TI_CITY", "where": "WHERE DAIL_AREA_CODE=:DAIL_AREA_CODE AND CITY_STOP_DATE >= :CITY_STOP_DATE", "page_size": "10", "page_idx": "1",
  2. "values": { "DAIL_AREA_CODE": "0350", "CITY_STOP_DATE": "20110909" } }
  3. data={ "TI_CITY": [ { "CITY_CODE": "0403", "CITY_NAME": "忻州", "CITY_SHORTCODE": "XZH", "CITY_CLASS": "3", "DAIL_AREA_CODE": "0350",
  4. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  5. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  6. { "CITY_CODE": "0416", "CITY_NAME": "宁武", "CITY_SHORTCODE": "NWU", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  7. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  8. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  9. { "CITY_CODE": "0417", "CITY_NAME": "五寨", "CITY_SHORTCODE": "WZH", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  10. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  11. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  12. { "CITY_CODE": "0418", "CITY_NAME": "岢岚", "CITY_SHORTCODE": "KLA", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  13. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  14. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  15. { "CITY_CODE": "0423", "CITY_NAME": "原平", "CITY_SHORTCODE": "YPI", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  16. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  17. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  18. { "CITY_CODE": "0424", "CITY_NAME": "定襄", "CITY_SHORTCODE": "DXI", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  19. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  20. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  21. { "CITY_CODE": "0425", "CITY_NAME": "五台", "CITY_SHORTCODE": "WTA", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  22. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  23. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  24. { "CITY_CODE": "0426", "CITY_NAME": "代县", "CITY_SHORTCODE": "DXI", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  25. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  26. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  27. { "CITY_CODE": "0427", "CITY_NAME": "繁峙", "CITY_SHORTCODE": "FSH", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  28. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  29. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" },
  30. { "CITY_CODE": "0428", "CITY_NAME": "神池", "CITY_SHORTCODE": "SCH", "CITY_CLASS": "4", "DAIL_AREA_CODE": "0350",
  31. "CITY_START_DATE": "19491001000000", "CITY_STOP_DATE": "21000101000000",
  32. "DISTRICT_CODE": "2", "PROVINCE_CODE": "02" } ] }

复制代码


这里边有些区别需要说一下:这是另外一个表,说明了程序的柔性。

日期:我的是YYYYMMDD,你是YYYYMMDDHH24MISS
我们原来要求列名小写,现在将就你的程序,大写。(我改配置就可以)。

[ 本帖最后由 yulihua49 于 2011-9-10 10:42 编辑 ]

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
130#
发表于 2011-9-9 17:41 | 只看该作者
只有输出结果,没有时间对比。。。

使用道具 举报

回复

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

本版积分规则 发表回复

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