« | October 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
数据仓库&数据挖掘
对某一件事需要坚持方能真正完成这件事
薛 峰
2009.02.03 |
Blog信息 |
blog名称:数据仓库与数据挖掘 日志总数:85 评论数量:14 留言数量:0 访问次数:723768 建立时间:2005年3月17日 |

| |
[综合]ESQL/C资料(完全版)一 文章收藏, 网上资源
薛 峰 发表于 2005/7/18 10:31:58 |
第六章 嵌入式SQL(E-SQL)简介3 第一节 什么是嵌入SQL语言?3 1.1 嵌入SQL程序的组成元素3 1.2 什么是静态SQL和动态SQL?4 1.3 什么是SQLCA?4 1.4 什么是SQLDA?5 第二节 SYBASE SQL SERVER嵌入式SQL语言5 2.1 一个嵌入SQL语言的简单例子5 2.2 嵌入SQL的处理过程6 2.3 嵌入SQL语句总览7 2.3.1 宿主变量7 2.3.2 连接数据库12 2.3.3 数据的查询和修改13 2.3.4 游标的使用13 2.3.5 SQLCA15 2.3.6 WHENEVER16 2.3.7 批处理18 2.3.8 事务18 2.4动态SQL语句18 2.4 .1 动态修改19 2.4.2 动态游标20 2.4.3 SQLDA23 2.4.4 DESCRIBE语句27 2.5 两个例子程序27 2.5.1 TELECOM程序27 2.5.2 ADHOC程序29 第三节 IBM DB2嵌入SQL语言35 3.1 一个简单示例35 3.2 嵌入SQL语句37 3.2.1宿主变量37 3.2.2单行查询39 3.2.3多行查询39 3.2.4插入、删除和修改操作40 3.2.5 SQLCA43 3.2.6事务45 3.3 DB2的嵌入SQL程序处理过程46 3.4 DB2的动态SQL嵌入语句53 3.4.1 基本方法53 3.4.2 动态游标55 3.4.3 SQLDA55 第四节 ORACLE数据库的嵌入SQL语言66 4.1 基本的SQL语句66 4.1.1宿主变量和指示符66 4.1.2 查询68 4.1.3 修改数据68 4.1.4 游标68 4.2 嵌入PL/SQL71 4.3 动态SQL语句72 4.3.1 ORACLE动态SQL语句的一些特点72 4.3.2 使用动态SQL的四种方法72 4.3.3 SQLDA75 第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言96 5.4.1 SQLDA97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言105 6.1 一个嵌入SQL语言的简单例子105 6.2 嵌入SQL的处理过程106 6.3 嵌入SQL语句112 6.3.1 声明嵌入SQL语句中使用的C变量112 6.3.2 连接数据库115 6.3.3 数据的查询和修改115 6.3.4 游标的使用116 6.3.5 SQLCA117 6.3.6 WHENEVER118 6.4动态SQL语句119 6.4 .1 动态修改119 6.4.2 动态游标120 6.4.3 SQLDA122 6.4.4 DESCRIBE语句130 6.5 API130
第六章 嵌入式SQL(E-SQL)简介 第一节 什么是嵌入SQL语言? SQL是一种双重式语言,它既是一种用于查询和更新的交互式数据库语言,又是一种应用程序进行数据库访问时所采取的编程式数据库语言。SQL语言在这两种方式中的大部分语法是相同的。在编写访问数据库的程序时,必须从普通的编程语言开始(如C语言),再把SQL加入到程序中。所以,嵌入式SQL语言就是将SQL语句直接嵌入到程序的源代码中,与其他程序设计语言语句混合。专用的SQL预编译程序将嵌入的SQL语句转换为能被程序设计语言(如C语言)的编译器识别的函数调用。然后,C编译器编译源代码为可执行程序。 各个数据库厂商都采用嵌入SQL语言,并且都符合ANSI/ISO的标准。所以,如果采用合适的嵌入SQL语言,那么可以使得你的程序能够在各个数据库平台上执行(即:源程序不用做修改,只需要用相应数据库产品的预编译器编译即可)。当然,每个数据库厂商又扩展了ANSI/ISO的标准,提供了一些附加的功能。这样,也使得每个数据库产品在嵌入SQL方面有一些区别。本章的目标是,对所有的数据库产品的嵌入SQL做一个简单、实用的介绍。 当然,嵌入SQL语句完成的功能也可以通过应用程序接口(API)实现。通过API的调用,可以将SQL语句传递到DBMS,并用API调用返回查询结果。这个方法不需要专用的预编译程序。 1.1 嵌入SQL程序的组成元素 我们以IBM的DB2嵌入SQL为例,来看看嵌入SQL语句的组成元素。 例1、连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "util.h" #include <sqlca.h> EXEC SQL INCLUDE SQLCA; (1) main() { EXEC SQL BEGIN DECLARE SECTION; (2) char firstname[13]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET; (5) return 0; } 上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 (2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 1.2 什么是静态SQL和动态SQL? 嵌入SQL语言,分为静态SQL语言和动态语言两类。静态SQL语言,就是在编译时已经确定了引用的表和列。宿主变量不改变表和列信息。可以使用主变量改变查询参数值,但是不能用主变量代替表名或列名。 动态SQL语言就是:不在编译时确定SQL的表和列,而是让程序在运行时提供,并将SQL语句文本传给DBMS执行。静态SQL语句在编译时已经生成执行计划。而动态SQL语句,只有在执行时才产生执行计划。动态SQL语句首先执行PREPARE语句要求DBMS分析、确认和优化语句,并为其生成执行计划。DBMS还设置SQLCODE以表明语句中发现的错误。当程序执行完“PREPARE”语句后,就可以用EXECUTE语句执行执行计划,并设置SQLCODE,以表明完成状态。 1.3 什么是SQLCA? 应用程序执行时,每执行一条SQL语句,就返回一个状态符和一些附加信息。这些信息反映了SQL语句的执行情况,它有助于用户分析应用程序的错误所在。这些信息都存放在sqlca.h的sqlca结构中。如果一个源文件中包含SQL语句,则必须要在源程序中定义一个SQLCA结构,而且名为SQLCA。最简单的定义方法是在源文件中加入一些语句:EXEC SQL INCLUDE sqlca.h。每个数据库产品都提供了SQLCA结构。
1.4 什么是SQLDA? 我们知道,动态SQL语句在编译时可能不知道有多少列信息。在嵌入SQL语句中,这些不确定的数据是通过SQLDA完成的。SQLDA的结构非常灵活,在该结构的固定部分,指明了多少列等信息,在该结构的后面有一个可变长的结构,说明每列的信息。在从数据库获得数据时,就可以采用SQLDA来获得每行的数据。各个数据库产品的SQLDA结构都不完全相同。 第二节 SYBASE SQL Server嵌入式SQL语言 2.1 一个嵌入SQL语言的简单例子 我们首先来看一个简单的嵌入式SQL语言的程序(C语言):用sa(口令为password)连接数据库服务器,并将所有书的价格增加10%。这个例子程序如下: 例1、 /*建立通讯区域*/ Exec sql include sqlca; main() { /*声明宿主变量*/ EXEC SQL BEGIN DECLARE SECTION; char user[30],passwd[30]; EXEC SQL END DECLARE SECTION; /*错误处理*/ EXEC SQL WHENEVER SQLERROR CALL err_p(); /*连接到SQL SERVER服务器*/ printf("\nplease enter your userid "); gets(user); printf("\npassword "); gets(passwd); exec sql connect :user identified by :passwd; exec sql use pubs2; EXEC SQL update titles set price=price*1.10; EXEC SQL commit work; /*断开数据库服务器的连接*/ Exec sql disconnect all; return (0); } /*错误处理程序*/ err_p() { printf("\nError occurred: code %d.\n%s", \ sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); } 从上面这个例子,我们看出嵌入SQL的基本特点是: 1、每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。
|
|
[综合]用Visual C#中实现DB2数据库编程 文章收藏, 网上资源
薛 峰 发表于 2005/7/15 10:53:09 |
在Visual Studio.NET Beta 1版本中访问IBM DB2等非SQL Server数据库通常是使用ADO.NET的ODBC方法,而在Beta 2中则改用OLE DB方式存取数据库。
Beta1中连接字符串主要需声明数据库的ODBC的DNS名字,但Beta 2中的OLE DB连接的字符串就较复杂了,使用的类也不相同。由于DB2等数据库在大型机等应用中使用非常广泛,.NET自然会全力支持此类编程开发,为此,下文将逐步阐述OLE DB的DB2开发。
OLE DB for DB2驱动 首先,Visual Studio.NET和Windows 2000 Server中并未直接提供DB2的OLE DB驱动,因此需下载Microsoft Host Integration Server 2000软件,该软件包中含OLE DB Provider and ODBC driver for DB2,需下载Server端软件包,并在安装时选择安装Data Integration,安装完成后就可使用其OLE DB的DB2驱动了。
设置数据库连接 首先,我们需配置好DB2的客户端设置,打开视图选单项中的服务器资源管理器,在其数据连接中新增一个连接,指定程序选项时选择Microsoft OLE DB Provider for DB2,下一步连接选项中,填写如下信息:
Data Source: QCDB(请酌情修改) Network:TCP/IP IP Address:数据库服务器地址 Network Port:DB2服务端口 Username:数据库访问权限的用户名 Password:该用户口令 Database initial Catalog:QCDB Package collection:QCDB default schema:Userid
下一步高级选项中选各自国家语言对应的code page及CCSID,最后按确认键完成创建连接。
假设QCDB这个DB2数据库中有一名为address的新数据表,其包含四个字段:name、email、age和address,我们可用服务器资源管理器打开上述连接及该数据表,可输入数条中文记录,确定中文字符能否正常显示。
为项目增加数据库连接 用Visual Studio新建一个ASP.NET项目,激活服务器资源管理器的上述连接,用鼠标将该连接拖至新建的Web Form上,则OLE DB需要的连接字符参数全部自动写入Web Form程序中,上述连接生成的语句如下:
this.oleDbConnection1.ConnectionString = @"Provider=DB2OLEDB; Cache Authentication=False; Integrated Security=""""; Password=freebsd9; Persist Security Info=True; User ID=userid;Initial Catalog=qcdb; Data Source=qcdb;Mode=ReadWrite; Extended Properties=""""; APPC Remote LU Alias=""""; APPC Local LU Alias=""""; APPC Mode Name=QPCSUPP; Network Transport Library=TCPIP; Host CCSID=37;PC Code Page=1282; Network Address=172.23.169.1; Network Port=4444;Package Collection=qcdb; Default Schema=userid;Alternate TP Name=""""; Process Binary as Character=False; Units of Work=RUW"
用服务器资源管理器工具生成连接可避免错写各种参数,从而可快速地实现数据库连接。
Web Form显示数据库数据 为Web Form新增一个OleDbDataAdapter类的对象oleDbDataAdapter1,为其选择数据连接时选上面建立的连接如:qcdb.qcdb.userid,选择使用SQL语句,生成SQL语句如:Select from address,最后提示完成。再为Web Form新增一个DataSet并命名为dataSet1用来放查询得到的数据。新增一个显示数据用的DataGrid命名为DataGird1,最后在Web Form的程序段中的Page_Init部分中增加如下代码:
oleDbConnection1.Open(); //打开数据库连接 oleDbDataAdapter1.Fill(dataSet1,"Address"); //将得来的数据填入dataSet DataGrid1.DataBind(); //绑定数据 oleDbConnection1.Close(); //关闭连接
< |
|
[综合]客户细分的学问 原创空间, 网上资源
薛 峰 发表于 2005/4/10 14:45:09 |
客户细分是当前客户关系管理战略上的一个流行的话题,目前盛行的CRM ,对于很多国人从直观来说,在客户前端接触层面表现为建立呼叫中心,实现销售自动化;从客户关系管理后端来看,则主导的概念表现为“客户细分”和“一对一”营销和服务。
在对现有客户进行细分时,常常会遇到这样一些问题:
·细分有哪些方式?除了用客户对企业的当前利润贡献来看外,还有其它细分变量吗?
·细分应该是统一的吗?既一旦一个客户被划归到一个类别,是否企业的每个部门都要按照这一划分采取一致的行动?
·细分的结果要让客户知晓吗?更进一步,是否应当让客户有权自己选择细分的归属吗?
细分有哪些方式?
一般来说,细分可以根据三个方面的考虑来进行.
1.外在属性
如客户的地域分布,客户的产品拥有,客户的组织归属——企业用户、个人用户、政府用户等。通常,这种分层最简单、直观,数据也很容易得到。但这种分类比较粗放,我们依然不知道在每一个客户层面,谁是
(下面还有1766字) |
|
[综合]windows2003找出移动硬盘 网上资源, 电脑与网络
薛 峰 发表于 2005/3/26 12:27:45 |
笔者一向喜欢尝试新软件。这不,Windows Server 2003刚出来,笔者就迫不及待地装上了。可是当笔者接上IBM的移动硬盘后,虽然任务栏右下方出现了移动硬盘的图标,信息显示也是正常,但是在“我的电脑”中就是显示不出驱动器的盘符。借了块朋友的“纽曼”移动硬盘也同样不认。试着重新安装移动硬盘的驱动程序(原本是无须安装的),系统提示驱动已经安装。奇怪的是电脑却能毫不费力认出笔者那块闪存。
笔者后来读了一篇有关组策略的文章,这篇文章讲到用“组策略”隐藏驱动器的方法,笔者想,既然用“组策略”能隐藏驱动器的盘符,那么能不能将没有显示出来的驱动器盘符显示出来呢?带着这个问题,笔者打开了组策略,操作步骤是:点击“开始→运行”中输入“MMC”回车,进入了“控制台1”,然后点“文件→添加删除管理单元→添加”,出现了“添加独立管理单元”的界面,在其中细细查找,发现了“磁盘管理”一项,再点“添加→完成→关闭→确定”,这时候回到“控制台1”,点击“磁盘管理”,这时看到右边栏中显示出了所有的硬盘驱动器,包括移动硬盘,但却没有显示出移动硬盘的盘符来。
(下面还有14字) |
|
[综合]ID3算法源程序(C语言) 网上资源, 软件技术, 电脑与网络, 科学研究
薛 峰 发表于 2005/3/25 15:43:53 |
PROTO.H NEGENTROPY negentropy ( REAL **, UINT, NODE*, UINT ); void print_tree ( NODE* , CHAR** ); void free_tree ( NODE * ); NODE* ID3 ( MATRIX * , NODE* , UINT , UINT ); void err_exit ( CHAR* , UINT ); MATRIX *build_matrix ( UINT, UINT ); void free_matrix ( MATRIX * ); void read_matrix ( CHAR *, MATRIX * ); void file_size ( CHAR * , UINT * , UINT * ); CHAR **read_tags ( CHAR * , UINT ); void free_tags ( CHAR **, UINT);
ID
(下面还有60字) |
|
|