<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ahuoo</title>
	<atom:link href="http://www.ahuoo.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.ahuoo.com</link>
	<description>http://www.ahuoo.com</description>
	<lastBuildDate>Sun, 05 Sep 2010 06:28:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>公共仓库元模型(CWM)学习（二）</title>
		<link>http://www.ahuoo.com/?p=485</link>
		<comments>http://www.ahuoo.com/?p=485#comments</comments>
		<pubDate>Sun, 05 Sep 2010 06:20:04 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=485</guid>
		<description><![CDATA[         往往理论的学习是一件比较枯燥的事情，尤其对于计算机行业一系列的专业术语，其实搞清楚了，就那么回事，就想2年前兴起的ajax一样，在我的前一篇文章里面（公共仓库元模型(CWM)学习（一））大概介绍了CWM的一些组成元素等等一些细节的东西，下面我来给大家一个整体的认识,主要从CWM的组成结构、CWM的特点、CWM设计的目标以及CWM应用对应的人群来说。

一、 CWM的组成结构
CWM完整地描述了数据仓库元数据交换的语法和语义以及用于异质平台之间的元数据交换机制，它由三个部分组成：
1、CWM元模型
CWM元模型描述了数据仓库的组成元素，用户可以按照这些元模型开发相应的组件，比如ETL、OLAP和数据挖掘等。为了降低复杂度并达到重用，CWM元模型采用分层的方式组织它所包含的包，大家可以看看CWM元模型的包结构图：

 
 
 
 
 
 
 
 
 
 
 
 
 

如图中所示，CWM元模型主要包括四层：基础包Foundation，资源包Resource，分析包Analysis和管理包Management。
基础包主要定义了为CWM其它包所共享的一些基本概念和结构，它包含的子包有：
Business Information：定义了面向业务的通用信息，比如负责人信息等；
Data Types：定义了其它包用以创建自己所需的数据类型的元模型组件；
Expressions：定义了CWM其它包定义表达式树所需的元模型组件；
Keys and Indexes：定义了描述关键字和索引的共享元模型；
Software Deployment：描述一个软件在数据仓库中如何被使用的元模型；
Type Mapping：支持不同系统之间数据类型的映射的元模型；
资源包主要定义了一些描述常用的数据源/目标的元模型，它包含的子包有：
Relational：描述通过关系型接口访问的数据库的数据模型和元模型，比如RDBMS，ODBC，JDBC等；
Record：描述记录的基本概念和结构的元模型，这里记录的概念很广泛，它可以描述任何结构化的信息，比如数据库的一条记录、文档等；
Multidimensional：描述多维型数据库的元模型；
XML：描述用XML表示的数据源和数据目标；
分析包主要定义了一些描述数据仓库工具的元模型，它包含的子包有：
Transformation：定义数据仓库中抽取转换规则的元模型，它包含对各种类型数据源之间的转换规则的描述；
OLAP：对OLAP工具和应用进行描述，并定义了它到实际系统的映射；
Data Mining：对数据挖掘工具和应用进行描述；
Information Visualization：定义了问题领域中有关信息发布或者信息可视化的元模型；
Business Nomenclature：对业务数据进行描述，比如业务术语及其适用范围等；
管理包主要定义了一些描述数据仓库运行和调度信息的元模型，它包含的子包有：
Warehouse Process：描述数据仓库中抽取转换规则的执行过程，也就是各个转换规则的触发条件；
Warehouse Operation：描述数据仓库日常运行情况的元模型；
2、CWM DTD 和CWM XML
CWM DTD和XML是对应于CWM中所有包的DTD和XML，它们都遵循XMI规范。定义CWM DTD和XML的主要目的是为了基于XML进行元数据交换，因为XML在各个领域的应用越来越广泛，CWM提供元模型到XML的转换，无疑大大增加了自己的通用性，各种分析工具和元数据库可以利用这些模板为自己的元模型生成DTD和XML文档，就可以和其它的工具之间进行元数据交换。
3、CWM IDL
CWM IDL为上面所有的包定义了符合MOF1.3的IDL接口，这样就可以利用CORBA进行元数据交换。用户可以创建一些具有分析功能的软件包，比如数据挖掘组件等。提供CWM中规定的IDL接口，就可以被其它支持CWM的工具和数据仓库调用，这大大增强了CWM的灵活性和适用性。
二、CWM的特点
通过对CWM组成结构的介绍，可以看出CWM具有以下特点：
Ø 对所有的数据仓库功能元数据定义了详细的元模型和交换方式，包括技术元数据（比如Software Deployment，Transformation，Warehouse Process等）和业务元数据（比如OLAP，Business Information等）；
Ø 定义了一个通用且强大的Transformation包，可以表示任何数据源和数据目标之间的转换规则。此外，还为多种常用的数据源/目标（比如Relational，Record，Multidimensional，XML等）和工具相关的数据源（比如IMS，DMSII，COBOL Data，Essbase和Express等）定义了元模型和交换方式；
Ø 对所有的数据仓库运行元素定义了元模型和交换方式，包括调度、状态报告和历史记录等；
Ø 对所有的分析型数据以及主要的分析型数据模型定义了元模型和交换方式，比如多维型；
Ø 对操作型数据以及主要的操作型数据模型定义了元模型，比如关系型和面向对象型；
 三、CWM的设计目标
CWM主要的设计目标和原则有以下几个方面：
Ø 对UML中概念的重用：UML 1.3 是整个CWM的设计基础，CWM在任何可能的地方对UML中的概念进行重用，所有的CWM对象类型都直接或间接地继承于UML，因此也继承了它们的属性和方法。这样可以节省很多重复工作，并且使CWM更容易理解，所有熟悉UML的用户都可以有一个比较高的起点；
Ø 模块化：CWM元模型被分成许多包，以便它们分别实现并减少复杂度。
Ø通用化：CWM元模型独立于任何具体的数据仓库工具，但同时，它尽量多地包含了基于特定工具实现的有代表性且通用的数据仓库特点。也就是说，只有那些多种工具共享的信息才会被CWM元模型包含进来；
 
四、CWM的应用人群
CWM主要面向以下几类用户：
Ø 数据仓库平台和工具提供商：CWM为他们提供了一个组件可插卸的通用系统框架。因为这是一种全球通用的元数据交换协议，所以他们可以很方便地在各种异质平台上发布自己的产品；
Ø 数据仓库服务提供者：可重用、可编辑、可扩展的CWM元数据大大提高了他们的工作效率。因为CWM与产品无关，所以可以避免大量的重复设计工作；
Ø 数据仓库管理员：数据仓库管理员有时需要对现有工具进行整合，而CWM XML无疑为他们提供了一种最方便的整合方式。另外，管理员经常需要对资源进行增减、分区或者重新分配，CWM提供了这方面的元数据以帮助他们完成这些工作，并对改变造成的影响作出评估；
Ø 终端用户：CWM为查询和展示工具定义了元模型，以便更方便快捷地为终端用户展示他们所需的信息；
Ø信息技术管理者：CWM为系统管理和报表工具定义了元模型，使得用户能够更轻松地对系统和信息进行管理；
]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=485</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>图片之旅</title>
		<link>http://www.ahuoo.com/?p=213</link>
		<comments>http://www.ahuoo.com/?p=213#comments</comments>
		<pubDate>Sun, 22 Aug 2010 02:19:43 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[照片]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=213</guid>
		<description><![CDATA[]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=213</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ETL工具——kettle插件开发（调试篇）</title>
		<link>http://www.ahuoo.com/?p=445</link>
		<comments>http://www.ahuoo.com/?p=445#comments</comments>
		<pubDate>Sun, 22 Aug 2010 01:38:48 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[kettle 插件]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=445</guid>
		<description><![CDATA[kettle插件调试比较麻烦，因为是两个不同工程的依赖，但是大家如果掌握方法，其实也很简单，回顾JAVA常用的调试手法，如Link Source、JAVA远程调试，如果大家了解maven，甚至可以直接依赖调试，下面我来作重讲讲前面两种调试手法。
准备工作：
1、通过eclipse上的svn插件下载kettle4.0源码，地址是：http://source.pentaho.org/svnkettleroot/Kettle/branches/4.0.0 
下载完成之后，发现eclipse里面存在两个工程：TemplateStepPlugin，Kettle 4.0.0，若有不同，请参见文章ETL工具——kettle插件开发（基础篇）
2、下载我这里给你准备的测试转换文件test.ktr
一、Link Source调试：
1、在Kettle4.0工程下面，进入plugins-&#62;steps目录，发现里面有个DummyPlugin目录，其就是kettle官方提供的外部转换插件，细心地读者发现里面仅用三个文件DPL.png、dummy.jar、plugin.xml，其实它就是一个完整插件所需要的东西。
2、在与DummyPlugin同级目录里面，建立文件夹TemplateStep, 将TemplateStepPlugin工程下面的icon.png、plugin.xml文件拷贝至此，jar包就不用了
否则调试时会关联不上源码，O(∩_∩)O~ 想想为什么吧？？
3、最重要的一步来了，大家右击工程Kettle 4.0.0，选择属性Properties, 然后在左手边选择Java Build Path, 然后在上面的选项卡里面选择Source，此时右边就有几个按钮，
点击Link Source按钮，设置好你的插件源码目录以及目录名字，见下图：

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4、运行。 关联好之后，咱们找到kettle的入口运行类Spoon.java，大家可以通过快捷键ctrl+shift+R找出此类选择调试运行即可，进入kettle工作台，打开测试文件test.ktr，
查看是否能正常运行，此时大家就可以在插件类TemplateStep里面打断点调试了，其他情况不再多说了
 
二、kettle远程调试
远程调试的关键是首先你的在kettle启动配置里面设置远程调试参数，然后在eclipse里面设置远程调试监控的端口号，这样就ok了。
1、进入pdi-ce-4.0.0-stable.zip解压出来的目录（上一篇文章：ETL工具——kettle插件开发（基础篇）），编辑启动配置文件Spoon.bat，linux下当然是spoon.sh
 在文件里面加入这么一句话：
set OPT=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8285
位置参见下图：
 
 
 
2、点击Spoon.bat，进入kettle工作台
3、打开eclipse，进入菜单Run——&#62;Debug Configurations，选择左边的Remote Java Application，右键新建一个远程调试应用程序，设置如下图，

端口就是上面参数里面的端口8285，一切ok，选择选择下面的debug按钮。
4、在kettle工作台，运行刚才的测试转换文件 test.ktr，eclipse开始监听调试了，大家断点设置就可。
]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=445</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ETL工具——kettle插件开发（基础篇）</title>
		<link>http://www.ahuoo.com/?p=418</link>
		<comments>http://www.ahuoo.com/?p=418#comments</comments>
		<pubDate>Sat, 07 Aug 2010 01:15:15 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[数据仓库]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=418</guid>
		<description><![CDATA[      在我们做ETL工作的时候，在某些项目中往往会遇到一些特别的流程任务，kettle原有的流程处理节点已经不能满足我们的要求，这时候我们就需要定制流程处理节点了。定制流程节点主要是针对数据的管理、数据的验证和某些特别文件数据的提取。大家通过查看kettle源代码，就可以知道怎样去创建你自己的kettle插件了。
 
这篇文章主要告诉大家在kettle 4.0版本上怎样开发一个transformation类型的简单插件，这个插件可以接受任何记录流，然后在流后面再添加一个带值的字段，用户能够定义字段的名称，插件非常简单。O(∩_∩)O~ 我将尽可能简洁的介绍开发插件需要掌握的一些接口规范。
 
准备工作：
 1、下载pdi-ce-4.0.0-stable.zip，供桌面测试用。
2、下载eclipse，任何版本都可以，装好SVN插件，后面下载kettle源代码之用。
3、  下载标准插件源代码模板工程。
 
建立插件工程：
1、  将下载的“标准插件源代码模板工程”导入到您的工作空间
2、  导入后工程会有一些错误，那是因为依赖的包没有导入。这时，你需要解压pdi-ce-4.0.0-stable.zip，进入解压目录将lib目录下面kettle打头的所有jar包以及libswt/win32下面的swt.jar包（这个大家依赖操作系统导入）加入工程环境变量里面。
3、  重新编译一下工程，应该就没有错误了。
 
kettle转换步骤工作组件：
       这里有四个类构成了这个kettle 步骤/节点，每一个类都有其特定的目的及所扮演的角色。
TemplateStep:  步骤类实现了StepInteface接口，在转换运行时，它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实例。
 
TemplateStepData:  数据类用来存储数据，当插件执行时，对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。
 
TemplateStepMeta: 元数据类实现了StepMetaInterface接口。它的职责是保存和序列化特定步骤实例的配置，在我们这个例子中，它负责保存用户设置的步骤名称和输出字段的名称。
 
TemplateStepDialog：对话框类实现了该步骤与用户交互的界面，它显示一对话框，通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密，O(∩_∩)O~ 想想为什么吧？ （元数据类可以追踪用户的设置）
 
除了上面的代码，还有一个plugin.xml,它设置好了插件的元数据，定义了步骤在kettle图形工作台中的显示效果。为了更好的让大家理解，我将利用这个步骤设计一个转换流程并执行它。对于插件的开发，我们将从plugin.xml配置文件开始讲起，然后讲讲元数据和对话框类，最后再讲讲步骤类和数据类。
 
书写你自己的plugin.xml：
       下面plugin.xml是我们这个插件里面的内容，它的功能是告诉kettle插件的元数据类，插件的名称及描叙，还有需要加载的jar包。想要了解细节，可以查看文章：plug-in loading
&#60;?xml version="1.0" encoding="UTF-8"?&#62;
&#60;plugin
   id="TemplatePlugin"
   iconfile="icon.png"
   description="Template Plugin"
   tooltip="Only there for demonstration purposes"
   category="Demonstration"
   classname="plugin.template.TemplateStepMeta"&#62;
   &#60;libraries&#62;
      &#60;library name="templatestep.jar"/&#62;
   &#60;/libraries&#62;
&#60;/plugin&#62;
]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=418</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle的实例</title>
		<link>http://www.ahuoo.com/?p=406</link>
		<comments>http://www.ahuoo.com/?p=406#comments</comments>
		<pubDate>Sun, 25 Jul 2010 09:25:57 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=406</guid>
		<description><![CDATA[今天看了一下伟大的oracle的系统结构，以自己的理解做个总结，主要从一些概念入手：
oracle实例其实就是=  内存分配  +  一组后台进程，  如果把Oracle比作一部汽车，instance相当于汽车的发动机一样,启动oracle前提应先启动instance..内存被分配，进程被启动
 
   
 
 
 
 
 
 
 
System Global Area 
  SGA是存储数据库进程共享的数据库信息的内存区域。它包含Oracle Server 数据和控制信息。分配在Oracle Server驻留的计算机虚拟内存中。SGA包含如下内存结构：
• 共享池(shared pool) 用来存储最近执行的SQL语句、编译后的代码、执行计划以及最近使用的数据字典(data dictionary)的数据。这些SQL语句可能是被用户递交的也可能是存储过程调用。SHARED_POOL_SIZE可以调整共享池的大小。
• 数据缓冲区（database buffer cache）用来存储最近从数据文件中读写过的数据。DB_BLOCK_SIZE可以调节缓存区的大小，FB_BLOCK_BUFFERS 可以调节缓存区的缓冲数目。
• 重作日志缓冲区（redo log buffer）用来记录服务或后台进程对数据库的操作。 Size defined by LOG_BUFFER
另外在SGA中还有两个可选的内存结构：
• Java pool: 用来存储Java代码。
• Large pool: 用来存储不与SQL直接相关的大型内存结构。例如：在备份和恢复时的数据拷贝。
  Background Processes
–• Database Writer (DBW0) 负责将数据的更改由database buffer cache写到data files 。
–• Log Writer (LGWR) 负责将数据更改记录由redo log buffer写到redo log files.
–• System Monitor (SMON) [...]]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=406</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关于Timer和TimerTask实验测试</title>
		<link>http://www.ahuoo.com/?p=393</link>
		<comments>http://www.ahuoo.com/?p=393#comments</comments>
		<pubDate>Mon, 28 Jun 2010 12:35:19 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=393</guid>
		<description><![CDATA[今天发现一job任务一直在耗cpu，一直没有释放资源，jconsole跟踪发现任务没有真正kill掉，因为job任务里面执行了数据库操作，导致一直锁在了那里，后来通过时间条件来kill掉此任务，使cpu恢复了正常！下面做了个测试：

import java.util.Timer;
import java.util.TimerTask;

/*
 * 说明：该代码主要是说明如何在定时器外部，通过执行时间等条件来停止某些任务
 *
 */
public class Reminder {

	Timer timer;

	public Reminder(int seconds) {
		timer = new Timer(); //初始化一定时器
		RemindTask rt = new RemindTask();

		//定时器将延迟seconds秒开始执行RemindTask这个任务，然后每隔2秒执行一次RemindTask任务
		timer.schedule(rt, seconds * 1000, 2000);

		//执行的时间超过了5秒，kill掉定时器中的任务 &#38; 定时器
		long beginTime = System.currentTimeMillis();
		long nowTime   = 0L;
		while (true) {
			nowTime = System.currentTimeMillis();
			if (nowTime - beginTime &#62;= 20000) {
				rt.cancel();
				timer.cancel();
				break;
			}
		}
	}

	//准备给定时器触发的任务
	class RemindTask extends TimerTask {
		public void run() {
			System.out.println("Time's up!");
			//这里可以执行很多操作
		}
	}

	//test here
	public [...]]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=393</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>又是一迷惘的十字路</title>
		<link>http://www.ahuoo.com/?p=386</link>
		<comments>http://www.ahuoo.com/?p=386#comments</comments>
		<pubDate>Sat, 26 Jun 2010 13:25:32 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[成长心情]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=386</guid>
		<description><![CDATA[         每天上班下班，看完电脑睡觉，睡觉起来看电脑，一晃出来2年就过去了，总是感觉缺少些什么？我的路在
哪里？这似乎回到了我大三的时刻，当时也曾这样迷茫过，不知道毕业后干什么？也不知道将来将要做什么工作
，每天在樟树林论坛上闲逛，但一直以来我都没有放弃过，寻找各种机会出去锻炼自己，尽量使自己的阅历更丰
富，参加建模比赛，和朋友创业，出去实习，无论怎么样，当时还是把学习放在了第一位，爸爸曾给我说，在什
么角色下，首要就是要把这个角色扮演好，其实人的一生就是要扮演各种角色，何尝不是呢！
        现在摆在我们面前的有两条路，我应该选哪个？还是走中间路，往往走中间路的人就是不上也不下的人，我
不想做这种，打起背包，迎接机会的到来！
]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=386</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>oracle基本操作(二)</title>
		<link>http://www.ahuoo.com/?p=362</link>
		<comments>http://www.ahuoo.com/?p=362#comments</comments>
		<pubDate>Sat, 19 Jun 2010 07:40:55 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=362</guid>
		<description><![CDATA[48.如何实现行列转换
&#60;1&#62;、固定列数的行列转换
如
student subject grade
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
&#8230;转换为
语文 数学 英语
student1 80 70 60
student2 90 80 100
&#8230;
语句如下：
select student,sum(decode(subject,&#8217;语文&#8217;, grade,null)) &#8220;语文&#8221;,
sum(decode(subject,&#8217;数学&#8217;, grade,null)) &#8220;数学&#8221;,
sum(decode(subject,&#8217;英语&#8217;, grade,null)) &#8220;英语&#8221;
from table
group by student
&#60;2&#62;、不定列行列转换
如
c1 c2
&#8212;&#8212;&#8212;&#8212;&#8211;
1 我
1 是
1 谁
2 知
2 道
3 不
&#8230;
转换为
1 我是谁
2 知道
3 不
这一类型的转换必须借助于PL/SQL来完成，这里给一个例子
CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM [...]]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=362</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>oracle基本操作(一)</title>
		<link>http://www.ahuoo.com/?p=358</link>
		<comments>http://www.ahuoo.com/?p=358#comments</comments>
		<pubDate>Sat, 19 Jun 2010 07:39:17 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=358</guid>
		<description><![CDATA[1.增加主键
alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN);
指定表空间
alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME;
2.增加外键
alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN) references KEY_TABLE_NAME;
3.使主键或外键失效、生效
alter table TABLE_NAME disable(enable) constraint KEY_NAME;
4、查看各种约束
select constraint_name,table_name,constraint_type,status from user_constraints;
select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper(&#8217;&#38;table_name&#8217;)
select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper(&#8217;&#38;table_owner&#8217;) [...]]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=358</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《thinking in java》学习笔记</title>
		<link>http://www.ahuoo.com/?p=352</link>
		<comments>http://www.ahuoo.com/?p=352#comments</comments>
		<pubDate>Tue, 15 Jun 2010 03:40:27 +0000</pubDate>
		<dc:creator>ahuoo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.ahuoo.com/?p=352</guid>
		<description><![CDATA[把以前 blog 的 《thinking in java》学习笔记在这里做个汇总吧： 
[日志] 第十一章 对象的集合 2008-08-20
[日志] 第十一章 Analysis and Design 2008-08-18
[日志] 第九章 用异常来处理错误 2008-08-18
[日志] 第八章 接口与内部类（二） 2008-08-15
[日志] 第八章 接口与内部类（一） 2008-08-15
[日志] 第七章 多态性 2008-08-14
[日志] 第六章 复用类 2008-08-14
[日志] 类的初始化例子 2008-08-14
[日志] 第五章 隐藏实现 2008-08-12
[日志] 第四章 初始化与清理 2008-08-12
[日志] 第三章 控制程序流程 2008-08-11
[日志] 第二章 万物皆对象 2008-08-11
[日志] 第一章 thinking in java 3rd  2008-08-11

]]></description>
		<wfw:commentRss>http://www.ahuoo.com/?feed=rss2&amp;p=352</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
