1.安装oracle 11g

2.Oracle自带的SQL Developer

在安装完Oracle Database 11g Release 2数据库,想试一下Oracle自带的SQL DeveloperW工具,在操作系统菜单的所有程序中找到SQL Developer如下所示,并单击:

  结果却提示缺少快捷方式,没找到“SQLDEVELOPER.BAT”,如下所示:

  在Oracle的安装目录D:\DataBaseInstall\Oralce_11g_r2\product\11.2.0\dbhome_1\sqldeveloper\sqldeveloper\bin下的确也没找到sqldeveloper.bat文件。网上很多人都说重新下载SQL Developer替换掉安装Oracle时自带的那个。

  重新到Oracle官网下载SQL Developer,当前最新版下载地址:http://download.oracle.com/otn/java/sqldeveloper/sqldeveloper64-3.2.20.09.87-no-jre.zip

  将下载下来的 sqldeveloper64-3.2.20.09.87-no-jre.zip解压到Oracle安装目录下

  这时重新单击操作系统菜单中的“SQL Developer”,看到命令窗口闪一下就消失了。看了一下SQL Developer的“readme.html”文档知道了SQL Developer 3.2支持的Java版本至少要1.6.0_04。

  那就下载当前最新JDK安装,在这里我下载的是jrockit-jdk1.6.0_37-R28.2.5-4.1.0-windows-x64.exe。下载完成后双击出现如下安装界面:

  在欢迎窗口中单击“Next”:

  设置JDK安装目录,单击“Next”:

  这里问你是否需要安装示例或源代码,根据需要选择,这里我就不选了直接单击“Next”:

   这里是否安装JRE,选择“Yes”,单击“Next”:

  设置JRE安装目录,单击“Next”:

  安装过程:

  安装完毕,单击“Done”关闭。

  现在新的JDK安装完后,重新单击操作系统菜单中的“SQL Developer”,这时“SQL Developer”可以启动,但是报了如下的异常:

Exception initializing 'oracle.dbtools.raptor.plsql.PLSQLAddin' in extension 'Or

acle SQL Developer': java.lang.NoClassDefFoundError: com/sun/jdi/Bootstrap

at oracle.jdevimpl.debugger.jdi.DebugJDIConnector.getVersion(DebugJDICon

nector.java:30)

at oracle.jdevimpl.debugger.support.DebugFactory.(DebugFactory.j

ava:81)

at oracle.dbtools.raptor.plsql.PLSQLAddin.initialize(PLSQLAddin.java:97)

at oracle.ideimpl.extension.AddinManagerImpl.initializeAddin(AddinManage

rImpl.java:407)

at oracle.ideimpl.extension.AddinManagerImpl.initializeAddins(AddinManag

erImpl.java:214)

at oracle.ideimpl.extension.AddinManagerImpl.initProductAndUserAddins(Ad

dinManagerImpl.java:128)

at oracle.ide.IdeCore.initProductAndUserAddins(IdeCore.java:1941)

at oracle.ide.IdeCore.startupImpl(IdeCore.java:1565)

at oracle.ide.Ide.startup(Ide.java:703)

at oracle.ideimpl.DefaultIdeStarter.startIde(DefaultIdeStarter.java:35)

at oracle.ideimpl.Main.start(Main.java:184)

at oracle.ideimpl.Main.main(Main.java:146)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.

java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces

sorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at oracle.ide.boot.PCLMain.callMain(PCLMain.java:62)

at oracle.ide.boot.PCLMain.main(PCLMain.java:54)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodA

ccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at oracle.classloader.util.MainClass.invoke(MainClass.java:128) at oracle.ide.boot.IdeLauncher.bootClassLoadersAndMain(IdeLauncher.java: 189) at oracle.ide.boot.IdeLauncher.launchImpl(IdeLauncher.java:89) at oracle.ide.boot.IdeLauncher.launch(IdeLauncher.java:65) at oracle.ide.boot.IdeLauncher.main(IdeLauncher.java:54) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at oracle.ide.boot.Launcher.invokeMain(Launcher.java:713) at oracle.ide.boot.Launcher.launchImpl(Launcher.java:115) at oracle.ide.boot.Launcher.launch(Launcher.java:68) at oracle.ide.boot.Launcher.main(Launcher.java:57)

  看着异常就不爽啊,解决呗。运行命令行窗口查看是否设置了JDK系统环境变量,这里显然是没有设置JDK系统环境变量:

  设置系统环境变量

  在桌面选中“计算机”右键选择“属性”,单击“高级系统设置”:

  在高级选项卡中单击“环境变量”:

  在系统变量下单击“新建”,填入变量名“JAVA_HOME”,变量值为JDK的安装目录,我这里为“ D:\JAVAEEServiceInstall\Java\jrockit-jdk1.6.0_37-R28.2.5-4.1.0 ”,单击“确定”:

  在系统变量中找到“Path”,单击“编辑”,在变量值中加入“%JAVA_HOME%\bin”以“;”相隔,单击“确定”:

  系统环境变量设置完成后,重新启动命令行窗口,检查是否成功。如下为设置成功:

  重新单击操作系统菜单中的“SQL Developer”,这时“SQL Developer”可以正常启动:

  如果希望不出现“[WARN ][jrockit] MaxPermSize=128M ignored: Not a valid option for JRockit”警告,那用记事本打开SQL Developer的bin目录下的“sqldeveloper.bat”文件,找到“-XX:MaxPermSize=128M”直接删除。因为jrockit已经不需要-XX:MaxPermSize这样的参数了。

注:1.JDK一定要是1.6版本的即U6版本。

2.发现SQL_developer还是会一闪而过,但是SQL_developerW可以方面使用。

3.Oracle SQL Developer 添加SQLServer 和Sybase 连接

1. 开始只有oracle 和access 连接

2. 打开Oracle SQL Developer:

工具——>首选项——>数据库——>第三方JDBC驱动程序——>添加驱动条目

3. 自动加载到目录,JTDS.jar 下载后就到放这里。

(我的路径:C:\Documents and Settings\Administrator\Application Data\SQL Developer\)

我的JTDS.jar免费下载地址:http://download.csdn.net/detail/kk185800961/5080188

4. 完成后添加连接有SQLServer 和Sybase了。

---------------------------------------------------------------------------------

---------------------------------------------------------------------------------

还有一种添加方法是:

1. 帮助——>检查更新



2. 选择可更新的相关软件查件



3. 单击下一步自动更新,则出现下列详细插件,选取JTDS JDBC Driver……

4. 填写在官方网址上的账户信息,确定。

4.sqlserver 转oracle

上一次,我使用手工转换SQL脚本的方式进行数据库的迁移,其间过程相当繁琐,特别是标识符长度的限制让我焦头烂额,因为我们的系统中长标识符真是多如繁星,另外,表结构建好之后,数据的迁移又是一个相当复杂的过程,因为修改了不少的表名,需要把导出的数据和表一一对应上。

但是,除了手工的方式之外,其实我们还有更为简便和自动化的解决方案,那就是ORACLE官方提供的Sql Developer自带的Oracle Migration Workbench。

什么是Oracle SQL Developer?在官方页面上,是这样介绍它的:

Oracle SQL Developer is a free and fully supported graphical tool for database development. With SQL Developer, you can browse database objects, run SQL statements and SQL scripts, and edit and debug PL/SQL statements. You can also run any number of provided reports, as well as create and save your own. SQL Developer enhances productivity and simplifies your database development tasks .

另外,通过第三方驱动包,该工具还支持连接和管理各种主流数据库服务器。

下面就把我使用这个工具迁移Microsoft SQL Server 2008数据库到Oracle 11G的过程记录下来,为了积累也为分享。

第一部分:获取工具

第二部分:建立资料档案库(Migration Repository)

第三部分:数据库移植向导

第四部分:SqlServer中的架构到Oracle中的模式,名称的处理

第五部分:转移数据

第六部分:存储过程和函数

首先,当然是获得工具,该工具在Oracle Sql Developer官方下载页面里面可以直接下载到。Windows 32位直连地址:Windows 32bit Sql Developer。Oracle Sql Developer需要JDK的支持,在下载页面中提供了包含JDK的下载包,还有支持各种操作系统的下载选项。

下载后,解压到任意位置。直接运行程序。第一次运行,需要指定JDK的目录。

启动后,我们要做的第一件事,不干别的,先下载SQL SERVER的驱动程序。点击菜单帮助,选择检查更新,弹出检查更新向导窗口,第一页一般是废话,直接下一步,等更新中心列表加载完毕后,只选择“Third Party SQL Developer extensions”,点击下一步,等待更新搜索完毕后,中列表中找到并选中 JTDS JDBC Driver,如下图:

下一步,在许可协议页面,点击“我同意”按钮后再点下一步,等下载完毕后关闭窗口,弹出提示需要重启程序才能完成更新,点击“是”。等程序重启完毕。

环境准备完毕,开始进入到正题移植数据库。

建立资料档案库(Migration Repository)

一、连接到Oracle

在程序左边的连接窗口中,点击加号按钮,添加一个到Oracle数据库的dba连接,如下图:

配置完成后,点击连接按钮,连接到数据库。

二,建立用户

打开到Oracle数据的连接,新建一个用户,我们要在该用户的模式中建立所谓的“资料档案库”,并使用该用户去建立SQL Server移植后的用户名,以及做其它的一些工作。按照帮助中的说明,这个用户最少需要以下权限和角色:

Roles 
CONNECT WITH ADMIN OPTION,RESOURCE WITH ADMIN OPTION

Privileges 
ALTER ANY ROLE,ALTER ANY SEQUENCE,ALTER ANY TABLE,ALTER TABLESPACE,ALTER ANY TRIGGER,COMMENT ANY TABLE,CREATE ANY SEQUENCE,CREATE ANY TABLE,CREATE ANY TRIGGER,CREATE VIEW WITH ADMIN OPTION,CREATE PUBLIC SYNONYM WITH ADMIN OPTION,CREATE ROLE 
CREATE USER,DROP ANY SEQUENCE,DROP ANY TABLE,DROP ANY TRIGGER,DROP USER,DROP ANY ROLE,GRANT ANY ROLE,INSERT ANY TABLE,SELECT ANY TABLE,UPDATE ANY TABLE

以下语句直接建立一个名为migrations的用户:

-- Create the user 
create user MIGRATIONS

identified by MIGRATIONS 
  default tablespace USERS 
  temporary tablespace TEMP 
  profile DEFAULT; 
-- Grant/Revoke role privileges 
grant connect to MIGRATIONS with admin option; 
grant resource to MIGRATIONS with admin option; 
-- Grant/Revoke system privileges 
grant alter any role to MIGRATIONS; 
grant alter any sequence to MIGRATIONS; 
grant alter any table to MIGRATIONS; 
grant alter any trigger to MIGRATIONS; 
grant alter tablespace to MIGRATIONS; 
grant comment any table to MIGRATIONS; 
grant create any sequence to MIGRATIONS; 
grant create any table to MIGRATIONS; 
grant create any trigger to MIGRATIONS; 
grant create any view to MIGRATIONS; 
grant create materialized view to MIGRATIONS with admin option; 
grant create public synonym to MIGRATIONS with admin option; 
grant create role to MIGRATIONS; 
grant create session to MIGRATIONS with admin option; 
grant create synonym to MIGRATIONS with admin option; 
grant create tablespace to MIGRATIONS; 
grant create user to MIGRATIONS; 
grant create view to MIGRATIONS with admin option; 
grant drop any role to MIGRATIONS; 
grant drop any sequence to MIGRATIONS; 
grant drop any table to MIGRATIONS; 
grant drop any trigger to MIGRATIONS; 
grant drop tablespace to MIGRATIONS; 
grant drop user to MIGRATIONS; 
grant grant any role to MIGRATIONS; 
grant insert any table to MIGRATIONS; 
grant select any table to MIGRATIONS; 
grant unlimited tablespace to MIGRATIONS with admin option; 
grant update any table to MIGRATIONS;

再次点击连接中的加号按钮,添加一个使用刚刚新建立的用户的连接。

连接后,在该连接上点击右键,选择移植资料档案库-关联移植资料档案库,程序会在该用户下建立移植资料档案库所需要的表、存储过程等等,弹出一个对话框显示当前建立的进度,稍等片刻即建立完毕。

数据库移植向导

一,建立到源SqlServer数据库的连接

在连接窗口中,点击绿色加号按钮,打开连接配置窗口,按下图建立到SqlServer的连接:

因为动态商品的使用,使得原来SqlServer配置页中默认的1433往往没有办法连接到SqlServer2008数据库,修改为1434即可。

二、启动数据库移植向导

建立到SqlServer的连接后,开始对数据库进行移植。有两个地方可以启动数据库移植向导,一个是在新建的SqlServer连接上点击右键,选择移植到Oracle,另一个是在菜单工具-移植-移植,启动向导后,第一页当然是向导的简介,通过简介,我们可以知道整个移植过程有7步,并且有两个先决条件,如下图:

直接点击下一步。

三、选择资料档案库

在这个页面中,我们也可以去建立连接和资料档案库,也就是前一部分中我们所做的工作在这里也可以进行。当然选择我们刚刚建立的migrations连接,如下图:

这里截断的意思是将资料档案库清空,我们建立一个移植项目后,所有抓取的数据库结构信息、统计信息还有转换记录等都保存在这个资料档案库中,只要项目名称不同,即使不清空资料档案库也不会影响到移植工作。当然,如果希望更“清爽”一点,也可以勾选。这是后话。

四、为转换项目命名

选择好资料档案库后,点击下一步,为我们的转换项目输入名称和备注,以便识别。另外,还需要指定脚本生成目录,用于存放向导执行过程中生成的脚本。

五、选择源数据库连接

然后继续下一步,选择源数据库,在这里有联机和离线两种模式,联机即是直接连接到源数据进行抓取,而离线则是在SqlDeveloper不直接连接到源数据库的情况下,通过SqlDeveloper提供的脚本预先捕获数据库,得到数据库结构文件后,通过向导导入。

这里当然是选择我们刚才建立的SqlServer连接。

六、选择捕获源数据库

在这一步中,显示为两个多选框,左边列出Sql Server中所有可选的数据库,通过中间的按钮将数据库移动到右边的已选数据库中。如下图:

七、数据类型转换选项

在这一页中,列出了所有系统内置的数据类型转换对应关系。可以其进行修改,一般不作修改直接下一步。如下图:

八、选择目标数据库

与源数据库的选择一样,目标数据库的选择同样也有联机和离线两种方式。仍旧选择联机。选择orcl(migrations)连接。

九、移动数据选项

这个页面中,也提供了联机或离线两种方式进行数据移动。所谓联机虽然“据说”可以直接以联机的方式从源数据库中移动数据到Oracle中,可我试过几次没有成功,原因不明。最终我选择了离线的方式进行数据移动。所谓离线移动数据,是在我们指定的脚本存放目录中生成“数据移动”脚本,分别在源数据库中卸载数据(即导出)和在目标数据库中加载数据。选择好后,点击下一步。

十、选项完毕,开始执行

在向导的最后,是一个用于确认的“概要”页面。确认无误后,点击完成。移植将会开始执行。

SqlServer中的架构到Oracle中的模式,名称的处理

通过执行移植向导,如果没有错误的话,那么表结构基本上都会建立起来了,在连接中打开orcl(migrations)连接,找到最下面的其它用户,假设你的表都在dbo架构下,那么找到dbo_源数据库名,展开它,可以看到在表中已经有原数据库中的所有表。但是,为什么会显示为dbo_源数据库名呢?我很不喜欢这样的用户名。我希望它显示为源数据库名,要怎样做呢?

在程序的左下角,是移植项目窗格,在里面可以看到我们刚才建立的移植项目名。展开它,会显示我们执行过向导的日期和时间,继续展开,可以看到两个节点,叫作捕获的数据库对象和转换的数据库对象,如下图:

在捕获的数据库对象上点击右键,选择转换,再次打开数据移植向导。点击下一步,会直接跳转到转换页,这一次的转换页面与前一部分的转换页稍有不同。不同之处在于多出了一个选项卡,叫对象命名,选择它打开,如下图所示:

在这个页面中,显示了一个数据列表,列出了源数据库的表名、字段名、约束名、视图名、架构名等等所有的标识符的原始标识符、新建标识符、是否经过转换、原始限定名、标识符类型等信息。因为Oracle中不支持30个字符以上的标识符,所以当碰到原始标识符超过30个字符时,移植向导会自动将之截断,如果有重名,则会加上_1之类的后缀。

很明显,在这里,它把我们原来的dbo架构名转换成了dbo_数据库名,我们只要找到它,将新标识符改为数据名,即可实现我们这部分的需求。

修改完成后,点击下一步,接着按之前的设置完成整个向导,将修改提交到资料档案库中。注意,这次的向导并没有去帮我建立新用户和表结构等等,还需要进一步操作。

在主界面中的移植项目窗格,在转换的数据库对象上点击右键,选择生成目标,再次打开移植向导,又一次按之前我们的选择完成整个向导,这一次,才是真正建立了我们想要的用户名。

然后,把自动生成的老用户名和模式都删除掉吧。具体操作就不细说啦。

转移数据

上一部分说了移植向导在Oracle数据库中自动生成了我们所需要的表结构,但是并没有帮我把数据成功导入过去。于是我们采用了生成离线数据移动脚本的方式来导数据。

在移植向导中的项目页中,我们选择了脚本生成的目录,打开该目录,可以看到一个名为“数据移动\项目名称\日期时间\”的子目录,其中包含了如下图所示的文件:

看以看到其中包含了4个脚本文件,两个是用于Windows的,另两个是用于*nix的。名为unload_script的是数据导出脚本,用于从源数据库中生成数据导出文件,名为oracle_ctl的是数据导入脚本。

打开cmd,浏览到当前目录,执行以下命令以导出数据:

>unload_script [server] [username] [password]

其中的server是源数据库服务器,username和password是能访问到源数据库的用户名密码。稍等一会,提示导出完成后,接着执行下面命令以导入数据:

>oracle_ctl [oracleusername] [password]

在这里不需要指定数据库名之类的,因为在脚本中已经指定了。

等待片刻导入完毕后即可。蛮简单的。不明白为什么联机就是不能成功,做的难道不是一样的工作嘛。

5.EF连接oracle

安装oracle客户端

Oracle数据访问组件 (ODAC)  全称:Oracle Data Access Components

优点:由于微软在.net framework4中会将System.Data.OracleClient.dll deprecated,而且就访问效率和速度而言,System.Data.OracleClient.dll与Oracle.DataAccess.dll相比,微软的确实没有oracle提供的类库有优势,所以我放弃了使用多年的 System.Data.OracleClient.dll,取而代之的是odp.net。

1. ODAC的安装

服务器端:0racle10g,11g 都行

客户端:Oracle11g,我下载的是ODAC 11.2 Release 5 and Oracle Developer Tools for Visual Studio (11.2.0.3.20),oracle10g的可以安装,但是里面缺少自定义类型的对应对象,且只支持vs2003和vs2005,所以我选择用的是oracle11g的版本ODAC 11.2 Release 5 and Oracle Developer Tools for Visual Studio (11.2.0.3.20),下载地址http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

安装完重启机器

6.远程连接Oracle

安装oracle客户端,修改服务器的listener.ora的host为服务器ip地址

修改服务器的tnsnames.ora的host为服务器ip地址

重启oracle服务

在客户端电脑中相同位置增加listener.ora、sqlnet.ora、tnsnames.ora ip地址均为服务器ip

完成!!!!

客户侧两种连接方式截图

oracle环境配置全过程相关推荐

  1. Ubuntu 环境配置全过程

    Ubuntu 环境配置全过程 1 .卸载相关无用软件 https://www.jianshu.com/p/67a86505279f 1 更换系统源 2 卸载LibreOffice sudo apt-g ...

  2. oracle运行环境配置,oracle 环境配置开机自启动

    环境:centos 6.5 + oracle 11g 自启动之前问题 虚拟机里的oracle环境,每次重启完系统,用plsql developer连接,先是报错: 无TNS监听程序 解决方法是切换到系 ...

  3. Win8.1 JAVA环境配置全过程

    Win8.1下JDK环境变量配置方法 JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 按照提示下 ...

  4. 阿里云ECS服务器php运行环境配置全过程

    服务器:阿里云ECS服务器 需要搭建的环境:>php5.4+apache2.2+Postgresql 先用Xshell连上服务器,打开Xshell,新建一个连接 名称随便起一个,主机输入你的服务 ...

  5. SpringMVC环境配置全过程IntelliJ IDEA 2020.3.1

    1.Java project(后添加web项目) 2.添加web项 右键项目,选择Add Framework Support 选择web Application 3.添加jar包(jar在这条的最后一 ...

  6. Win7环境配置Oracle 11g安装与配置过程

    这篇随笔作为新人的我的开场,主要用来帮助我自己以后在Win7环境配置oracle 11g时能有个提醒.当然不同Windows版本安装大同小异,所以也可以给需要的人一些借鉴. 一:下载安装包 直接从官网 ...

  7. 修改oracle用户资源限制,RHEL5中安装Oracle11gR2修改用户SHELL限制、环境配置、内核参数...

    修改用户的SHELL的限制[root@localhost -]# vi /etc/security/limits.conf # /etc/security/limits.conf # #Each li ...

  8. WSL安装Oracle,折腾记录:WSL(Windows Subsystem for Linux,Windows上的Linux子系统)安装后的环境配置-Go语言中文社区...

    WSL(Windows Subsystem for Linux,Windows上的Linux子系统)的安装比较简单,教程网上较多,此处略过.安装后须要进行一系列配置(如软件源配置.中文配置.图形化配置 ...

  9. oracle pl sql安装配置,oracle的安装与plsql的环境配置

    1,首先得有oracle的安装包和plsql的安装包,安装包地址可见百度云 http://pan.baidu.com/s/1miTqhmg 2.解压下来进入0817账套,找到set.exe文件,双击安 ...

最新文章

  1. 利用BP神经网络教计算机识别语音特征信号(代码部分SS)
  2. 今日 Paper | 协作蒸馏;人脸反欺骗;人脸表示;3D-CariGAN等
  3. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程
  4. python【蓝桥杯vip练习题库】BASIC-28Huffuman树(贪心 Huffuman)
  5. Android图形子系统
  6. android 拍照不能保存图片格式,Android 拍照后保存到手机里,在相册找不到
  7. 洛谷 - P2598 [ZJOI2009]狼和羊的故事(最大流最小割)
  8. 如何优化Hibernate EllementCollection语句
  9. php报内存溢出,php为什么运行了一段时间后才报内存溢出?
  10. 十年后,若中国基建基本完成了,还有什么能大规模拉动经济?
  11. Hadoop对小文件的解决方案
  12. 事件对象以及事件委托(pink老师笔记)
  13. 如何优雅的在手机上进行Python编程
  14. TeamTalk源码分析(一)—— TeamTalk介绍
  15. 中国各省所处的经纬度范围
  16. nginx静态资源服务器(一)
  17. VS2013 打包步骤
  18. php 加减法,php加减法
  19. facebook轮播视频_如何设置Facebook Messenger Messenger视频通话
  20. 用计算机处理表格信息教案,表格信息的加工与表达教案

热门文章

  1. 给div加滚动条 div显示滚动条设置代码
  2. 在计算机中公式运算符有哪些,Excel在公式中使用运算符号
  3. 嵌入式Linux常用命令
  4. 【计算机视觉】Lecture 11:LoG和DoG滤波算子
  5. 山东省计算机应用能力考核初级,山东省计算机应用能力考核1.doc
  6. COLA开发流程总结
  7. 设计模式(10)——策略模式
  8. CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
  9. 区分LPCTSTR和LPTSTR和char *
  10. 【PAT】A1099. Build A Binary Search Tree (30)