楼主: yulihua49

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

[复制链接]
论坛徽章:
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
191#
 楼主| 发表于 2011-11-5 22:36 | 只看该作者
本帖最后由 yulihua49 于 2011-11-5 22:53 编辑
nannan5000 发表于 2011-11-2 22:10
LZ的专研精神值得学习

还是那句话,好的性能是设计出来的。


通用性的东西肯定是损失一些性能。。。。
不过DAU捞回的性能比损失的多得多。
就这个模板库来说已经超过了存储过程分析系统库的性能,相信也能超过newkid设想的模板库方案。
其它方面,如OAD,你如果自己去做数组操作,极其繁琐,估计没什么人在OLTP里用的,这个包装就可以很简单的为你的OLTP提速。还有最普通的DAU,它的绑定和游标使用方案,都可以大幅度的提高系统性能。
当然,你也可以说,你能做的我都能做。但是编码的代价太大了,还需要大量的中间数据保存区。我相信没有人为了几倍的性能费这么大的力气。
我这个,就是我费了不少力气,学了不少东西(尤其是根newkid)。后人用就可以省事了。

实际上我这东西有点象“毒品”,一旦使用过,再也无耐心和毅力玩什么 OCI,OCCI了。
的确有newkid担心之虞,用SQL的都不会SQL了。
这个在历史上多次发生过。卖票的不会写票了,调度的不会写计划了,都自动干了。



使用道具 举报

回复
论坛徽章:
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
192#
发表于 2025-9-13 02:51 | 只看该作者
楼主的精华帖找不回了,只能从搜索引擎找到这个,顶一下,这样的讨论在微信的年代已经是不可能的了。
致敬青春,致敬我们惺惺相惜的友谊!

使用道具 举报

回复
论坛徽章:
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
193#
 楼主| 发表于 2025-9-13 19:59 | 只看该作者
newkid 发表于 2025-9-13 02:51
楼主的精华帖找不回了,只能从搜索引擎找到这个,顶一下,这样的讨论在微信的年代已经是不可能的了。致敬青 ...

非常感谢,友谊万岁!

使用道具 举报

回复
论坛徽章:
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
194#
 楼主| 发表于 2025-9-13 20:14 | 只看该作者
solomon_007 发表于 2011-8-23 09:33
看了楼主的一篇精华帖,感觉LZ懂业务,精通C,但对ORACLE 数据库的开发理解尚且不足, 至少“SQL + PLSQL  ...

来自14年后的回复,你说的很对,达不成一致也不必悲哀,互相交流嘛。

使用道具 举报

回复
论坛徽章:
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
195#
 楼主| 发表于 2025-9-13 20:22 | 只看该作者
本帖最后由 yulihua49 于 2025-9-13 21:17 编辑
guostong 发表于 2011-8-23 22:13
见过你写的关于exclude some columns 的解决方案,我实在想不出现在这种方案能够适用的场景,不会是拨号上 ...

exclude some columns 的解决方案不是问题的重点。他是在工程中客户提出的要求。
说的是,不需要那么多列的场合,你生成那么庞大的sql语句,造成结果集也是很庞大的,可不止传输几个字节的事。
这个功能后来也被用于处理大数据,一个150列的表,只处理其中20个左右的列,1000行一包,数据量差不少呢。
当然,既然有exclude,就会有与之互补的操作,就是choose,实际上被转换成exclude。
一个常数字符串(20左右个列名)被放在.h里,可以被修改或增减。
用在许多场合:从数据库提取数据时;网络传输时的序列化,反序列化。数据处理完成时的update语句的生成。这个常数串保证了所有流程数据一致性。
当业务修改需要增加内容时只需要改这一个字符串,所有相关的sql程序和序列化反序列化程序都不需要改动。
当然,我承认SQL是一种柔性,我这个是不是更柔一些呢?当然这个柔也不是juedui的,毕竟还需要一个常数字符串,还是需要修改的。

14年了,很多朋友不了解这个话题了。
在我们的系统里,采用C/C++开发应用系统,使用了柔性编程的概念,一个大系统,开发和运行过程肯定会对数据结构进行修改。这个修改是牵一发而动全身的。
因此,采用了模板技术,就是那篇 看我做的数据库包装器,现在被删掉了,用来使得数据的修改不要过大的影响程序,尤其是在团队里,涉及好几个小组的工作。
SQL语句都是自动生成的,在生成过程中,会接受一些修饰指令,本回复的就是其中一个修饰指令。
其间接受了newkid版主的指导和建议,生成优质高效的代码。最重要的建议就是使用绑定变量,之后才催生了批量处理的包装器。

使用道具 举报

回复
论坛徽章:
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
196#
发表于 2025-9-14 08:03 | 只看该作者
你们老单位去O了没有?如果去了改成什么数据库?

使用道具 举报

回复
论坛徽章:
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
197#
 楼主| 发表于 2025-9-14 16:02 | 只看该作者
本帖最后由 yulihua49 于 2025-9-14 16:50 编辑
yulihua49 发表于 2025-9-13 20:22
exclude some columns 的解决方案不是问题的重点。他是在工程中客户提出的要求。说的是,不需要那么多列的 ...

现在看一下应用实例:
这个是在管理器,从数据库提取数据时。
        ret=get_DB_connect(&SQL_Connect,0);//取数据库连接
        if(ret) return -1;

        data_init(&CUT_PI_EXIT_rec,CUT_PI_EXIT_tpl);
        ret=patt_copy(pi_exit_tpl,CUT_PI_EXIT_tpl,PI_EXIT_COL);//CUT_PI_EXIT_tpl是全模板,有150多个列,PI_EXIT_COL是常数串,包含20来个需要处理的列。pi_exit_tpl是子模板,只包括想处理的列。
        DAU_init(&pi_exit_DAU,SQL_Connect,NULL,&CUT_PI_EXIT_rec,pi_exit_tpl);//生成pi_exit_DAU,这个DAU只处理指定表名的指定列。
        //经过一系列修饰,终于来到了:
            ret=DAU_prepare(&pi_exit_DAU,stmt);//生成语句,绑定变量,打开游标。
                        while(!DAU_next(&pi_exit_DAU)) {      //取1行数据         
//加入UD队列
                CUT_PI_EXIT_rec.flag=flag;
                cp+=DAU_pkg_pack(&pi_exit_DAU,cp,'\t');//序列化成CSV格式,在cp里。这也是用了PI_EXIT_COL指定的列,传到服务器后,服务器也是用这个来解析。
                *cp++ = '\n';
                exUDdata.num++;

看一眼.h:
//PI_EXIT表实在太大了,我们只选出如下列进行处理,管理器发送给process的数据
#define PI_EXIT_COL "settlement_date,value_per_ride,payment_value,trip_origin_location,current_location,entry_time,txn_date_time,product_type,product_issuer_id,total_journey_amount,flag,use_time,cms_settlement_date,file_name_and_record,changer"
//处理结果列process存入数据库的列
#define PI_EXIT_RESULT "entry_time,acc_time,flag,use_time,o_acccode,d_acccode,route_line_count,line_desc,line_passby_code,od_walk_time,acc_list,line_trip_route,sacccode_arr_dep,od_route_sn,version_sn,method,ud_attr,"




使用道具 举报

回复
论坛徽章:
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
198#
 楼主| 发表于 2025-9-14 16:39 | 只看该作者
本帖最后由 yulihua49 于 2025-9-14 17:37 编辑
yulihua49 发表于 2025-9-14 16:02
现在看一下应用实例:这个是在管理器,从数据库提取数据时。        ret=get_DB_connect(&SQL_Connect,0);/ ...

再看看服务器端:
{//在数据接收程序
...
T_PkgType pi_exit_tpl[30];//如果改变了CUT_PI_EXIT_COL,看看下标应该多少
        
        
//ShowLog(4,"process:num=%d,data=%.300s",exUDdata->num,exUDdata->udinfo);
        res=patt_copy(pi_exit_tpl,CUT_PI_EXIT_tpl,PI_EXIT_COL);//使用pi_exit_tpl,保持与管理器一致的数据。
经过计算,结果update进入数据库:
static int update_DAO(CUT_PI_EXIT_stu *EP,int recnum,int *saved_time)  //EP是struct数组,recnum是数量,进行批量修改。
{
int cc,ret,n;
T_SQL_Connect *SQL_Connect;
OAD oad;
DAU dau;
char stmt[10240];
INT64 now;

        ret=get_DB_connect(&SQL_Connect,0);//取数据库连接句柄
        if(ret) {
                return -1;
        }
        now=now_usec();
        DAU_init(&dau,SQL_Connect,NULL,EP,CUT_PI_EXIT_tpl);//建立关于CUT_PI_EXIT表的DAU,Data Access  Unit
        OAD_init(&oad,&dau,EP,recnum);//Orecle Array Discribe,批量操作

        dau.srm.hint="/*+RULE*/";
        char *cp=DAU_mk_upd_col(&dau,PI_EXIT_RESULT,stmt);//生成update语句,使用另一个常数串 。

          mk_where(dau.srm.pks,cp);//按主键生成where

        ret=OAD_mk_update(&oad,stmt);
        if(ret){
                ShowLog(1,"update_DAO:OAD_mk_update err=%d,%s",
                        SQL_Connect->Errno,
                        SQL_Connect->ErrMsg);
                ret=-1;
        } else {
                ret=OAD_exec(&oad,0,recnum);
                if(ret<0) ShowLog(1,"update_DAO:OAD_exec ret=%d,err=%d,%s",
                                ret, SQL_Connect->Errno,
                                SQL_Connect->ErrMsg);
        }

        trans_commit(SQL_Connect);
        OAD_free(&oad);
        DAU_free(&dau);
        if(saved_time) *saved_time=INTERVAL;
        release_DB_connect(&SQL_Connect,0);
        return ret;
}
以上是批量修改的完整程序,多简单呀!这可是C语言的OCI包装,让人望而生畏的操作。

这都是 exclude some columns 的用途。从这两楼可以看到柔性编程的意义,当数据结构修改时,这些程序都不需要修改。可能会要求重新编译。









使用道具 举报

回复
论坛徽章:
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
199#
 楼主| 发表于 2025-9-14 17:40 | 只看该作者
本帖最后由 yulihua49 于 2025-9-14 19:27 编辑
yulihua49 发表于 2025-9-14 16:39
再看看服务器端:{//在数据接收程序...T_PkgType pi_exit_tpl[30];//如果改变了CUT_PI_EXIT_COL,看看下标 ...

195,196楼是14年的程序,比本帖晚了3年。现把以上程序用到的数据库表模板发出来。
这个模板是自动生成的。如果表结构有修改,重新生成即可。
T_PkgType CUT_PI_EXIT_tpl[]={
        {CH_INT64,sizeof(INT64),"streaming_session_id",0,-1},
        {CH_INT,sizeof(int),"data_version"},
        {CH_INT64,sizeof(INT64),"txn_class"},
        {CH_INT64,sizeof(INT64),"txn_revision"},
        {CH_INT64,sizeof(INT64),"txn_ssn_a"},
        {CH_INT64,sizeof(INT64),"txn_ssn_b"},
        {CH_INT64,sizeof(INT64),"ols_txn_type"},
        {CH_JUL,sizeof(INT4),"settlement_date","YYYYMMDD"},
        {CH_INT,sizeof(int),"application_validation_flags"},
        {CH_CHAR,31,"host_name"},
        {CH_SHORT,sizeof(short),"multipart_txn_count"},
        {CH_SHORT,sizeof(short),"issuer_abort_reason"},
        {CH_INT64,sizeof(INT64),"acquirer_id"},
        {CH_INT64,sizeof(INT64),"destination_participant_id"},
        {CH_SHORT,sizeof(short),"account_type"},
        {CH_SHORT,sizeof(short),"portioned_txn_flag"},
        {CH_INT64,sizeof(INT64),"format_version"},
        {CH_TIME,sizeof(INT64),"txn_date_time","YYYYMMDDHH24:MI:SS"},
        {CH_INT64,sizeof(INT64),"source_participant_id"},
        {CH_INT64,sizeof(INT64),"device_id"},
        {CH_CNUM,22,"sam_id"},
        {CH_INT64,sizeof(INT64),"udsn"},
        {CH_INT64,sizeof(INT64),"service_participant_id"},
        {CH_INT64,sizeof(INT64),"device_location"},
        {CH_INT64,sizeof(INT64),"device_ssn"},
        {CH_JUL,sizeof(INT4),"business_date","YYYYMMDD"},
        {CH_SHORT,sizeof(short),"transaction_status"},
        {CH_INT,sizeof(int),"cd_set_version"},
        {CH_JUL,sizeof(INT4),"reconciliation_date","YYYYMMDD"},
        {CH_SHORT,sizeof(short),"ud_type"},
        {CH_SHORT,sizeof(short),"ud_subtype"},
        {CH_SHORT,sizeof(short),"device_home_depot"},
        {CH_CHAR,8,"mass_installation_id"},
        {CH_CHAR,2,"iss_exception_proc_abrtd"},
        {CH_CHAR,2,"iss_exception"},
        {CH_CHAR,2,"iss_txn_reflection"},
        {CH_CHAR,2,"cch_flags_txn_portion"},
        {CH_CHAR,2,"cch_flags_txn_summarised"},
        {CH_CHAR,2,"cch_flags_txn_forwarded"},
        {CH_CHAR,2,"cch_flags_txn_apportioned"},
        {CH_CHAR,2,"cch_txn_good_for_summaries"},
        {CH_CHAR,2,"cch_no_further_proc"},
        {CH_CHAR,2,"cch_exception"},
        {CH_CHAR,2,"cch_txn_not_to_issuer"},
        {CH_CHAR,2,"cch_txn_approved"},
        {CH_CHAR,481,"exception_list"},
        {CH_INT64,sizeof(INT64),"card_issuer_id"},
        {CH_INT64,sizeof(INT64),"card_serial_number"},
        {CH_SHORT,sizeof(short),"card_type"},
        {CH_INT,sizeof(int),"card_life_cycle_count"},
        {CH_SHORT,sizeof(short),"card_action_sequence_number"},
        {CH_SHORT,sizeof(short),"num_rides"},
        {CH_SHORT,sizeof(short),"remaining_rides"},
        {CH_INT64,sizeof(INT64),"product_issuer_id"},
        {CH_INT,sizeof(int),"product_serial_number"},
        {CH_INT,sizeof(int),"product_type"},
        {CH_SHORT,sizeof(short),"product_action_sequence_number"},
        {CH_INT,sizeof(int),"ptsn"},
        {CH_SHORT,sizeof(short),"invoice_printed"},
        {CH_INT64,sizeof(INT64),"application_provider_id"},
        {CH_INT64,sizeof(INT64),"application_serial_number"},
        {CH_SHORT,sizeof(short),"application_personalise_cat"},
        {CH_SHORT,sizeof(short),"app_action_sequence_number"},
        {CH_SHORT,sizeof(short),"application_type"},
        {CH_SHORT,sizeof(short),"application_passenger_type"},
        {CH_INT64,sizeof(INT64),"key_version"},
        {CH_INT,sizeof(int),"route_line_id"},
        {CH_SHORT,sizeof(short),"route_direction"},
        {CH_SHORT,sizeof(short),"passenger_type"},
        {CH_INT,sizeof(int),"journey_type"},
        {CH_INT,sizeof(int),"current_location"},
        {CH_SHORT,sizeof(short),"number_of_passengers"},
        {CH_SHORT,sizeof(short),"number_of_zones"},
        {CH_INT64,sizeof(INT64),"previous_operator"},
        {CH_INT,sizeof(int),"trip_origin_location"},
        {CH_INT64,sizeof(INT64),"trip_previous_location"},
        {CH_CNUM,22,"lav_sam_id"},
        {CH_INT64,sizeof(INT64),"lav_participant_id"},
        {CH_JUL,sizeof(INT4),"lav_date","YYYYMMDD"},
        {CH_INT64,sizeof(INT64),"lav_txn_value"},
        {CH_SHORT,sizeof(short),"lav_remaining_rides"},
        {CH_INT,sizeof(int),"lav_ptsn"},
        {CH_SHORT,sizeof(short),"lav_method_of_payment"},
        {CH_SHORT,sizeof(short),"data_is_valid"},
        {CH_INT,sizeof(int),"number_of_entries"},
        {CH_CHAR,88,"portion_to_participant_id"},
        {CH_CHAR,88,"portion_value"},
        {CH_TIME,sizeof(INT64),"v_start_date_time","YYYYMMDDHH24:MI:SS"},
        {CH_TIME,sizeof(INT64),"v_end_date_time","YYYYMMDDHH24:MI:SS"},
        {CH_INT,sizeof(int),"v_duration"},
        {CH_INT64,sizeof(INT64),"v_distance_origin"},
        {CH_INT64,sizeof(INT64),"v_distance_destination"},
        {CH_INT,sizeof(int),"v_distance_distance"},
        {CH_SHORT,sizeof(short),"v_journey_period_journeys"},
        {CH_SHORT,sizeof(short),"v_journey_transfers"},
        {CH_CHAR,71,"v_route_routes"},
        {CH_CHAR,121,"v_location_locations"},
        {CH_INT,sizeof(int),"restrictions_day"},
        {CH_SHORT,sizeof(short),"restrictions_time"},
        {CH_INT,sizeof(int),"v_period_duration"},
        {CH_INT64,sizeof(INT64),"v_origin"},
        {CH_INT64,sizeof(INT64),"v_destination"},
        {CH_TIME,sizeof(INT64),"lav_pass_expiry_date_time","YYYYMMDDHH24:MI:SS"},
        {CH_TIME,sizeof(INT64),"pass_end_date_time","YYYYMMDDHH24:MI:SS"},
        {CH_INT64,sizeof(INT64),"transaction_value"},
        {CH_INT,sizeof(int),"currency_indicator_fin_details"},
        {CH_INT64,sizeof(INT64),"sales_tax"},
        {CH_INT64,sizeof(INT64),"discount"},
        {CH_INT,sizeof(int),"tax_rate"},
        {CH_SHORT,sizeof(short),"tax_code"},
        {CH_SHORT,sizeof(short),"number_of_payments"},
        {CH_SHORT,sizeof(short),"payment_method"},
        {CH_INT64,sizeof(INT64),"payment_value"},
        {CH_INT64,sizeof(INT64),"partial_transaction_value"},
        {CH_INT64,sizeof(INT64),"partial_sales_tax"},
        {CH_INT64,sizeof(INT64),"purse_remaining_value"},
        {CH_INT64,sizeof(INT64),"lav_remaining_value"},
        {CH_INT64,sizeof(INT64),"lav_amount_paid"},
        {CH_SHORT,sizeof(short),"invoice_not_printed"},
        {CH_TIME,sizeof(INT64),"entry_time","YYYYMMDDHH24:MI:SS"},
        {CH_SHORT,sizeof(short),"end_of_journey"},
        {CH_JUL,sizeof(INT4),"delay_date","YYYYMMDD"},
        {CH_INT64,sizeof(INT64),"delay_station_location"},
        {CH_SHORT,sizeof(short),"delay_operation_mode"},
        {CH_INT64,sizeof(INT64),"value_per_ride"},
        {CH_SHORT,sizeof(short),"first_use_activation"},
        {CH_INT64,sizeof(INT64),"total_journey_amount"},
        {CH_SHORT,sizeof(short),"card_captured"},
        {CH_CHAR,**,"file_name_and_record"},
        {CH_JUL,sizeof(INT4),"cms_settlement_date","YYYYMMDD"},
        {CH_TINY,1,"flag"},
        {CH_TIME,sizeof(INT64),"use_time",YEAR_TO_SEC},
        {CH_TIME,sizeof(INT64),"acc_time",YEAR_TO_SEC},
        {CH_SHORT,sizeof(short),"o_acccode"},
        {CH_SHORT,sizeof(short),"d_acccode"},
        {CH_INT,sizeof(int),"route_line_count"},
        {CH_CHAR,2048,"line_desc"},
        {CH_CHAR,50,"line_passby_code"},
        {CH_SHORT,sizeof(short),"od_walk_time"},
        {CH_CHAR,100,"acc_list"},
        {CH_CHAR,100,"line_trip_route"},
        {CH_CHAR,4001,"sacccode_arr_dep"},
        {CH_INT,sizeof(int),"od_route_sn"},
        {CH_INT,sizeof(int),"version_sn"},
        {CH_TINY,1,"method"},
        {CH_TINY,1,"ud_attr"},
        {CH_CHAR,16,"changer"},
        {-1,0,"CUT_PI_EXIT","file_name_and_record|"}
};

前边是各个列的内存对应类型,长度,列名,格式。最后一项是表名和主键。
谁有兴趣 为前边的程序写个SQL语句?还有玩一玩绑定变量?insert into  CUT_PI_EXIT (.......) values  (:1,:2,,,,,,,,);
然后绑定变量。。。。。



使用道具 举报

回复
论坛徽章:
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
200#
 楼主| 发表于 2025-9-14 19:38 | 只看该作者
本帖最后由 yulihua49 于 2025-9-15 17:42 编辑
newkid 发表于 2011-8-23 22:19
你把接口层和应用层混为一谈,接口层要力求透明,必须具备应变能力,比如你这个所谓的DAU在数据库上强加的 ...

197,198楼的小程序,199的数据,写写看?
这个数据表结构还是经常会添点东西哦!

使用道具 举报

回复

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

本版积分规则 发表回复

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