PostRank

2009/02/26

異質資料庫練習

摘自:網路

1、安装 Microsoft Data Access Components (MDAC)SDK ODBC driver

2、test whether CATHS has run.connect to the Oracle server

as schema "SYSTEM" and do "DESCRIBE SYS.HS_FDS_CLASS".

If it does not exist, connect as SYS (or internal) and run

the CATHS script. (ORACLE_HOMERDBMSADMINCATHS.SQL)

3、建立 SQL SERVER 数据源

TEST_SQLSERVER

4、配置tnsnames.ora. (ORACLE_HOMENETWORKADMIN)

TEST_SQLSERVER =

(DESCRIPTION=

(ADDRESS=

(PROTOCOL=tcp)

(HOST=)

(PORT=1521)

)

(CONNECT_DATA=

(SID=TEST_SQLSERVER)

)

(HS=)

)

5、配置listener.ora. (ORACLE_HOMENETWORKADMIN)

(SID_DESC=

(SID_NAME=TEST_SQLSERVER)

(ORACLE_HOME=D:OracleiSuites)

(PROGRAM=hsodbc)

)

6、重启ORACLE监听.

CMD

LSNRCTL STOP

LSNRCTL START

LSNRCTL STATUS

7、添加网关配置文件. (ORACLE_HOMEHSADMIN)

文件名为:initTEST_SQLSERVER.ora

文件内容:

#

# HS init parameters

#

HS_FDS_CONNECT_INFO = TEST_SQLSERVER

HS_FDS_TRACE_LEVEL = 0

#HS_FDS_TRACE_FILE_NAME = TEST_SQLSERVER.trc

#

# Environment variables required for the non-Oracle system

#

#set =

8、进入ORACLE SQL*PLUS,建立数据库链.

CREATE DATABASE LINK TOSQL USING 'TEST_SQLSERVER';

ORACLE异类服务


象SQL SERVER的LINKED SERVER一样,ORACLE也能访问非ORACLE数据库,这是通过ORACLE异类服务(HS)实现的。从ORACLE开始引入并在 ORACLE8I版本中得到进一步扩充。ORACLE异类服务集成在ORACLE8I数据库服务器中,实现对非ORACLE系统的访问。根据访问非 ORACLE数据库方式的不同,ORACLE提供了两种不同的服务:
1. ORACLE开放互联(Generic Connectivity):是一个轻量级的互联方案,通过ODBC或OLE DB实现对非ORACLE数据库的访问。
2. ORACLE透明网关(Transparent Gateway):提供更健壮的互联方式,包括分布查询和分布式事务支持。
对希望访问的每一个非ORACLE数据库系统,都要求有一个异类服务代理(Heterogeneous Services Agent),它在ORACLE服务器和远程数据库间进行通讯,他包含了访问数据库时需要的特定数据库信息。
在 与非ORACLE系统进行通讯时,ORACLE捕获和存储SQL命令,并针对每一个远程数据原的特征转换信息。无论何时向远程数据库发送一个请 求,ORACLE都要查询存储的信息(该信息存在于ORACLE中以HS开头的数据字典中,详细请参照ORACLE HELP <>),将该请求转换为远程服务器能够处理的格式。

一. ORACLE8I通用互联
ORACLE8I通用互联在ORACLE8I服务器版本8.1.6中提供,他使用ODBC或OLD DB实现开放互联并与远程数据源通信。ORACLE8I服务器中同时提供ODBC 和OLE DB异类代理,不需再使用其他网络产品。
同时通用互联工作方式和编写ODBC, OLE DB客户端程序相似。主要区别似ORACLE服务器要先发起连接操作然后在与远程数据源通信,因此应用程序不需做任何修改。这种远程数据访问的优点是:
1. 很容易实现,客户应用不需做任何改变
2. 使用标准接口(ODBC,OLE DB)进行信息访问
3. 异类服务提供ORACLE数据类型到标准接口的数据类型转换
4. 支持SQL语言和内置函数
缺点是:不能执行远程存储过程,也不支持分布应用,只支持单节点事务,对有些数据类型的支持存在一些问题,譬如,SQL SERVER中image数据类型。不过对于一个不需要网关的数据源进行查询,采用通用互联还是有优势的。
二.ORACLE8I透明网关
针 对通用互联存在的限制,ORACLE8I透明网关对访问的非ORACLE数据源提供了更多特性支持。目前HS代理支持DB2,SYBASE,SQL SERVER和INFORMIX.。值得注意的是,通用互联以集成到ORACLE8I数据库服务器中并成为其中的一部分,而每个透明网管都必须单独购买 (ORACLE9I中包含透明网管组件)。
透明网关提供的功能:
1. 分布式事务:他允许一个事务跨越ORACLE和非ORACLE系统,保证事务要么完全提交要么完全会滚。
2. 透明SQL访问:集成两种不同的数据源使他们看上去一样,实际上,开发者不必担心两个系统间的语法差异,因为网管代理会将所用的SQL命令转换为目标数据库能够接受的语法格式。
3. 数据字典转换:与透明SQL访问一样,网关代理也将任意数据字典查询转换为非透明SQL访问系统的数据字典。
4. 直接传送SQL:给予程序员直接访问远程系统的能力。他能使开发者直接利用数据库特有的功能,但是此功能需要开发者了解目标数据库的语法,因为网关代理不对他进行转化。
5. 访问存储过程:允许程序执行存储过程,就像他是PL/SQL远程过程一样。

下面介绍透明网关提供的服务:
事 务服务:连接到远程系统时,事务服务要完成两个任务。第一,首次进行访问时在两个系统间建立一个身份确认Session,Session结束时断开此连 接,第二,事务服务扮演各个分布式事务间协调器的角色,它使用两阶段提交协议维护全局一致。为了实现分布式事务处理,需要使用MS DTC(MICROSOFT 分布事务协调器)在多个数据库之间协调两阶段提交过程。
SQL服务:SQL服务映射并转换ORACLE请求为远程系 统对应的语句。它使用异类服务数据字典表中存储的信息决定如何转换SQL请求才能使非ORACLE系统能够理解,其中包括将ORACLE系统函数转换为对 应的目标数据库函数,将ORACLE数据类型映射为相应的目标数据库的数据类型,以及数据字典的转换等。
过程服务:将存储过程映射为等价的目标数据库的过程,另外也使用存储在异类服务数据字典中的信息将ORACLE功能映射为目标数据库的功能。
三.建立异类服务代理环境
无论是使用通用互联还是透明网关,建立代理的步骤都是相同的。包括
1. 安装异类服务数据字典
该步骤完成在ORACLE数据库中创建数据字典表、视图和包。创建这些数据库对象的脚本是%ORACLE_HOME%RDBMSADMINCATHS.SQL文件。需要记住的是,运行该脚本必须以SYS或INTERNAL用户登陆。
创建这些对象的目的是保存远程系统的信息,这些信息包括功能翻译,SQL翻译和数据字典翻译。将信息存储在数据字典使访问数度加快,不必每次都查询目标数据库,这些信息相对来说是静态的。下面是异类服务使用的几个数据字典视图:
视图名称 描 述
HS_FDS_CLASS 允许访问的远程系统的类型信息
HS_FDS_INST 允许访问的远程系统中一个特殊类的每个实例信息
HS_CLASS_INIT 每个类的初始化参数信息
HS_INST_INIT 每个实例的初始化参数信息
HS_BASE_DD 异类服务能够翻译的所有ORACLE数据字典信息
HS_CLASS_DD 每个类的数据字典翻译内容信息
HS_INST_DD 每个实例的数据字典翻译内容信息
HS_BASE_CAPS 异类服务支持的功能信息
HS_CLASS_CAPS 每个类支持的功能信息
HS_INST_CAPS 每个实例支持的功能信息
HS_EXTERNAL_OBJECTS 分布式外部过程需要的信息



除了这些表和视图外,ORACLE还提供了DBMS_HS包,他完成对类、实例、初始化参数和异类服务支持的功能进行维护。详细请参考ORACLE ONLINE HELP<Distributed Database Systems>>。
2. 配置异类服务代理
配置异类服务比较简单,我个人认为理解异类服务的概念、架构和其提供的服务相对比较重要,因为只有了解了异类服务,才能对配置有深刻的理解。

对于通用互联,必须告诉异类服务将如何连接到非ORACLE系统,是使用ODBC 还是OLE DB。ORACLE提供了两个示例参数文件(位于%ORACLE_HOME%NETWORK
ADMIN目录下)inithsodbc.ora和inithsoledb.ora.
1).将inithsoledb.ora 文件拷贝为initGCSQL2000文件,参数文件名必须按照initGSID.ora进行命名转换,GSID是tnsnames.ora和listener.ora文件指定的网关系统标识符名称。
2).编辑initGCSQL2000.ora文件并更新以下内容:
HS_FDS_CONNECT_INFO=”UDLFILE=%ORACLE_HOME%ORA81HSADMINGCSQL2000.UDL”
#HS_FDS_TRACE_LEVEL=16
#HS_FDS_TRACE_FILE_NAME=
3). 在%ORACLE_HOME%ORA81HSADMIN中建立GCSQL2000.UDL,最简单的方法是建立GCSQL2000.txt文本文件,将其 文件名改为GCSQL2000..UDL,然后右击该文件,设置其属性,在属性对话框中选择正确的驱动程序并设置数据库连接属性,测试成功后退出。
4).重新启动监听器。

对于不同的数据库ORACLE提供了不同的透明网关,如下表所列,在这些目录下ORACLE提供了一些默认的参数文件,只要做简单的修改即可完成配置,下面以SQL SERVER为例进行配置,对于其他数据库的配置大同小异,读者可自己动手试试。
数据库类型 对应的ORACLE目录
SQL SERVER %ORACLE_HOME%ORA8TG4MSQL
DB2 %ORACLE_HOME%ORA8TG4DRDA
SYBASE %ORACLE_HOME%ORA8TG4SYBS

1). 将inittg4msql.ora 文件拷贝为initTGSQL2000文件,参数文件名必须按照initGSID.ora进行命名转换,GSID是tnsnames.ora和listener.ora文件指定的网关系统标识符名称。
2). 编辑initTGSQL2000.ora文件并更新SQL条目HS_FDS_CONNECT_INFO,用 SERVER_NAME.DATABASE_NAME指定为你想要连接的SQLSERVER数据库,例如,为了连接YLQ服务器上的Products数据 库,指定HS_FDS_CONNECT_INFO = YLQ.products即可。需要说明的是,对每个希望通过透明服务器代理进行访问的数据库,都需要一个独立的参数文件来包含正确的连接信息。
SQLSERVER透明网关目前还不支持SQL SERVER2000,并且不能连接到有实例名的SQLSERVER数据库上。

3. 配置监听器和Net8服务名
为 了ORACLE数据库能够与SQL SERVER数据库进行通信,首先必须配置NET8服务名,使ORACLE服务器能够与监听器进程识别的代理进行交互,需要注意的是服务名必须与异类服务 参数文件中指定的网关系统标识符(GSID)一致,另外NET8服务名中还必须包括HS=OK子句,以确保该连接能使用异类服务,下面是使用OLE DB和透明网关进行互联的TNSNAMES.ORA文件的例子:
MSOLEDB=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
(CONNECT_DATA=(SID=GCSQL2000))
(HS=OK)
)

TGMSQL=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
(CONNECT_DATA=(SID=TGSQL2000))
(HS=OK)
)
接下来便是配置监听器,使他能以指定的系统标识符监听异类服务的连接请求,当监听器收到请求后,把它传送给PROGRAM条目指定的代理程序,以下是配置的例子:
LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=GCSQL2000)
(ORACLE_HOME=C:ORACLEORA81)
(PROGRAM=HSOLESQL)
)
(SID_DESC=
(SID_NAME=TGSQL2000)
(ORACLE_HOME=C:ORACLEORA81)
(PROGRAM=TG4MSQL)
)
)
记住要使你的配置立即生效,必须重新启动监听器
4. 创建数据库连接(DATABASE LINK)
创建异类服务数据库连接和创建普通的数据库连接没有任何区别,这里我就不想赘述了,详细请参考<>
5. 测试数据库连接
查询数据
SELECT * FROM “dbo”.”SYS_DB_INFO”@MSOLEDB;
创建同义词
CREATE SYNONYM L_SYS_DB_INFO FOR “dbo”.”SYS_DB_INFO”@MSOLEDB;
执行存储过程
exec check_money@TGSQLSERVER(par1,par2)
利用DBMS_HS_PASSTHROUGH包直接发送SQL.

数据库迁移

数据库迁移就包括两种,一种就是数据库脚本,一种就是数据库中的数据.
脚本迁移,可能就要了解源,目标的结构. 这个最好写一个规范文档.
至于数据迁移,那么就可以用数据库本身的功能: 复制+订阅 或者 存储过程+job (但建议用程序+数据库方法,程序不停调度,某一家公司的数据就是这么同步的.)

第一章 数据迁移基础
在信息共享日益普遍的情况下,各行各业都在进行着企业信息化建设,为了节约信息建设的费用,大都从现有的系统进行扩充或升级,ERP之路任重而道远,一般情况下,企业往往有大量的重要数据要迁移到新系统中去。
数据迁移是一项繁锁而又单调的工作,面对各种各样的基础数据,定制开发数据迁移工具往往费时费力,切不通用,那么到底什么工具能够胜任我们的工作呢?MS DTS可以将各种各样的数据源导入到各种各样的数据库,易学易用,在异构数据转换过程中,LOB(TXTT、IMAGE)字段的转换是容易失败的地方。

图1.1 字段合并
MS DTS在数据转换方面简单易学,功能强大,不仅可以使用VBSCRIPT与JSCRIPT脚本进行数据合并、分解、转换、汇总,还可以用PACKAGE的方式将转换过程存储在服务器上,通过代理服务多次/定时/调度地执行。

图1.2 异构数据

图1.3 脚本编写
MSDTS承袭了MS的易学易用的优良传统,对使用者的要求很低,经过短时间培训,一般文员都可以使用MS DTS导入导出数据啦。

图1.4 调度计划
第二章 异构数据迁移
很多时间,要在异构数据库之间进行数据迁移或抽取,如果在MS SQL SERVER中提取ORACLE的数据,可以通过ODBC、OLEDB等多种方式,要从ORACLE提取SQL中的数据,大都是通过透明网关来实现的。
在异构数据抽取过程中,最好采用SQL92标准的语法编写SQL代码,同时要注意不同数据库之间数据类型的转换关系,如ORACLE的日期类型用 DATE、MS SQLSERVER的日期类型用DateTime等。在Excel导入到MS SQLSERVER或ORACLE时,还要注意数字串的字段往往被目的数据库隐式转换成数字型的字段。

一 关于ORACLE的透明网关配置(FOR MS SQL SERVER)
ORACLE安装时(9i),将TRANSPARENT GATEWAY FOR MSSQL选中,在ORACLE主目录\BIN中,有个tg4msql.exe程序,它就是透明网关程序,同时在主目录中还有tgrmsql的这个目 录,ORACLE_HOME$\tg4msql\admin目录中的inittg4msql.ora文件,必须手工进行配置才能在ORACLE中连接MS SQL SERVER。

图2.1 tg4msql
1 如何配置透明网关呢?打开inittg4msql.ora:
#
# HS init parameters
# xzh代表MS SQLSERVER服务名,pubs代表要访问的MS SQLSERVER数据库
#
HS_FDS_CONNECT_INFO="SERVER=xzh;DATABASE=pubs"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
2 监听的配置oracle_home\network\admin\Listiner.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1527))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = xzh.world)
(ORACLE_HOME = D:\oracle\ora92)
(SID_NAME = xzh)
)
(SID_DESC =
(GLOBAL_DBNAME =MySQL)
(PROGRAM = tg4msql)
(SID_NAME = MySQL)
(ORACLE_HOME = D:\oracle\ora92)
)
)
加亮部分代码是要在监听文件中手工添加,GLOBAL_DBNAME、SID_NAME可以任意指定,PROGRM必须指向tg4msql 如图2.1所示。
3 本地服务文件的配置oracle_home\network\admin\TnsNames.ora
XZH =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xzh.world)
)
)

TG4MSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1527))
)
(CONNECT_DATA =
(SID =MySQL)
)
(HS = OK)
)
上例中MS SQL SERVER的本地服务名指定为TG4MSQL,可以任意写,SID必须是Listiner.ora中指定的那个SID_NAME,PORT也必须是监听 中指定的PORT,主机等都要符合一致。到此为止,我们把透明网关大致已经配置好啦,如果要访问MS SQL SERVER数据库,还要在ORACLE中创建数据库链才行。
4 在MS SQLSERVER中创建登录帐号xzh口令xzh,授权使之可以访问PUBS数据库。
SQL>CREATE DATABASE LINK FROM_SQL CONNECT TO xzh IDENTIFIED BY xzh USING ‘TG4MSQL’
USING ‘TG4MSQL’中的 ‘TG4MSQL’是tnsnames.ora中配置好的指定MS SQL SERVER服务器的可以被ORACLE访问的本地服务名,FROM_SQL是我们以后要引用的数据库链名,切记MS SQL SERVER中的登录帐号(xzh/xzh)必须符合ORACLE的帐号规范,如果用(xzh/0000)就会在创建数据库链路时失败。
SQL>SELECT * FROM sales@FROM_SQL
如果有数据返回,表示我们访问SQL数据库的通道已经建成,请大胆使用吧,但对远程异构数据库不充许进行DDL操作。
SQL>CREATE TABLE all_users@TG4MSQL FROM all_users;
ERROR 位于第 1 行:
ORA-02021: 不允许对远程数据库进行 DDL 操作

二 MS SQL SERVER访问ORACLE的方法
1 通过行集函数OPENDATASOURCE
SELECT * FROM OPENDATASOURCE( 'MSDAORA',
'Data Source=xzh.oracle;User ID=POS;Password=POS')..POS.A0325
MSDAORA是OLEDB FOR ORACLE的驱动,初始化字符串中必须提供要访问的ORACLE本地服务名、用户名、口令。然后引用表中数据时要以服务器..用户名.表名的格式。注意 一定是四部分组成,用户名与表名一定要大写,服务器与用户名之间是两个点号。
SELECT * INTO PUBS.DBO.A0325 FROM
OPENDATASOURCE( 'MSDAORA',
'Data Source=UITE;User ID=POS;Password=POS' )..POS.A0325
说明:将ORACLE服务器UITE中POS模式的A0325导入到MS SQLSERVER的PUBS数据库,注意A0325在这条语气执行时被创建,如果A0325已经存在PUBS数据库中,可以使用INSERT INTO的语法导入数据
INSERT INTO PUBS.DBO.A0325 FROM
OPENDATASOURCE( 'MSDAORA',
'Data Source=UITE;User ID=POS;Password=POS' )..POS.A0325
2 通过MS SQLSERVER的链接服务器访问ORACLE的数据
--在查询分析器中查看已经存在的链接服务器
SELECT*FROM SYSSERVERS
--添加链接服务器ORCL到MS SQL SERVER,也可以在企业管理器中创建
EXEC SP_ADDLINKEDSERVER
@server = 'ORCL', --ORCL是SQL中链接服务器名称
@srvproduct = 'Oracle',        --Oracle 固定的            
@provider = 'MSDAORA', --MSDAORA 固定的
@datasrc = 'UITE' --DataSrc 本地服务名

EXEC SP_DROPSERVER ‘ORCL’ --删除链接服务器

在这里声明一下,如果现在就访问ORACLE肯定不能,因为没有提供登录ORACLE的用户名/口令
EXEC SP_ADDLINKEDSRVLOGIN 'ORCL', false, 'sa', 'POS', 'POS'
SA是MS SQLSERVER的登录帐号,POS/POS是ORACLE的登录帐号。
SELECT * FROM ORCL..POS.A0325
FROM后面必须是四部分组成。为什么执行后报错呢,本人一直在寻找解决办法,最后发现通过T-SQL语句没法解决,只有打开MS SQLSERVER的企业管理器。

图2.2 配置ORACLE的远程帐号

图2.3设置远程登录帐号
SELECT * FROM ORCL..POS.A0325
通过图2.2、2.3以后,在查询分析器执行时,立即从ORACLE的ORCL服务器上POS模式的A0325表中查到数据,注意在图2.3步操作过程 中,必须在安全性页面选中“用此安全上下文进行”的复选项,然后在“远程登录/使用密码”所对应的文本中输入ORCL服务器上有登录权限的帐号。
SELECT * FROM OPENQUERY(ORCL, 'SELECT * FROM POS.A0325')
3 使用MS SQL SERVER的OPENROWSET函数
SELECT A.*
FROM OPENROWSET('MSDAORA',
'UITE';'POS';'POS', POS.A0325) AS A ORDER BY A.ID
说明:有些地方使用行集函数要用别名才能引用,请大家注意。
4使用ODBC的方式
SELECT A.*
FROM OPENROWSET('MSDASQL','ORCL_ODBC';'POS';'POS',
POS.A0325) AS A ORDER BY A.ID
说明:ORCL_ODBC是访问ORACLE 服务器UITE的ODBC数据源,以上所有代码在SQL QUERY ANALYZE 中通过。关于MS SQL SERVER访问ORACLE有四种方式,其中通过ODBC与链接服务器的方式做起来难度较大,对于初学者会复杂一些,使用OLE DB FOR ORACLE的驱动时,有OPENDATASOURCE与OPENROWSET函数可以使用,都很方便,笔记喜欢使用后者,交待一下,在数据存取方 面,OLE DB效率较ODBC为佳。

--这个是在sql里面查询oracle的数据,按照这些方法,你可以使用SQL的导入导出功能将数据导到oracle里面.

SQL和ORACLE之间的数据查询

配置透明网关的步骤


前一段花了些时间配置 TRANSPARENT GATEWAY
现在把心得贴出来与大家共享

我的OS是WIN2000
ORACLE 9.0
SQLSERVER2000
HOSTNAME : SVR1
都使用 tcp/ip 默认端口


1: 安装 TRANSPARENT GATEWAY 选件(我安装的是FOR MSSQL)
安装完成了以后有这样一个目录 oracle_home\ora90\tg4msql

2: 配置 LISTENER.ORA
(SID_DESC =
(GLOBAL_DBNAME = tg4sql) # 可自己命名
(PROGRAM = tg4msql)
(SID_NAME = sql2000) # SID 自己命名
(ORACLE_HOME = D:\oracle\ora90)
)

3: 在 oracle_home\ora90\tg4msql\admin
建文件 init .ora 由于LISTENER里定义SID为 sql2000
因此文件名为:initsql2000.ora
其中内容为:
HS_FDS_CONNECT_INFO=svr1.master # svr1为SQL服务器名
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

4: 重启 DATABASE AND LISTENER

5: 配置 tnsnames.ora
tg_sql =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SVR1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sql2000)
)
(HS=OK)
)

6: 建立 DATABASE LINK
CREATE PUBLIC DATABASE LINK DB_SQL
CONNECT TO SA IDENTIFIED BY PASSWORD
USING 'tg_sql'

7: 完成,测试
select * from t_test@db_sql

8: 请注意使用 DBLINK 时,INIT.ORA中 GLOBAL_NAME 的设置,
如果为 ture , 请使用DBLINK的全称,可在 all_db_links 中查到,
如果为 FALSE, 不必使用全称,当出现
“ORA-02019:为找到远程数据库的连接说明”
时,请使用全称,如:
select * from t_test@db_sql.US.ORACLE.COM

2009/02/24

Oracle Form中调用并发请求生成报表并输出为PDF的方法

摘自:網路

Form 中调用并发请求生成报表并输出PDF的方法。
要完成这个目的,首先要在ebs中注册报表,并注册模板。
然后再方法里先调用FND_REQUEST.ADD_LAYOUT添加模板,然后调用FND_REQUEST.SUBMIT_REQUEST提交并发请求,再调用FND_CONCURRENT.WAIT_FOR_REQUEST等待请求完成并返回分析,状态和完成信息。
procedure print_report(order_number in NUMBER,date_from in date,date_to in date) is
L_REQUEST_ID NUMBER;
L_BL_RESULT BOOLEAN;
v_layout BOOLEAN;
X_PHASE VARCHAR2(100);
X_STATUS VARCHAR2(100);
X_DEV_PHASE VARCHAR2(100);
X_DEV_STATUS VARCHAR2(100);
X_MESSAGE VARCHAR2(100);
BEGIN
/*
--
-- Name
-- add_layout
-- Purpose
-- Called before submission to add layout options for request output.
--
-- Arguments
-- Template_APPL_Name - Template Application Short name.
-- Template_code - Template code
-- Template_Language - Template File language (iso value)
-- Template_Territory - Template File Territory (iso value)
-- Output Format - Output Format
--添加输出模板,FND_REQUEST.add_layout (template_appl_name in varchar2,
template_code in varchar2,
template_language in varchar2,
template_territory in varchar2,
output_format in varchar2) return boolean
*/

v_layout:=FND_REQUEST.ADD_LAYOUT('PO',
'TRNORDER094',
Null,
Null,
'PDF');

/*
--
-- Name
-- submit_request
-- Purpose
-- Submits concurrent request to be processed by a concurrent manager
--
-- Arguments
-- application - Short name of application under which the program
-- - is registered
-- program - concurrent program name for which the request has
-- - to be submitted
-- description - Optional. Will be displayed along with user
-- - concurrent program name
-- start_time - Optional. Time at which the request has to start
-- - running
-- sub_request - Optional. Set to TRUE if the request is submitted
-- - from another running request and has to be treated
-- - as a sub request. Default is FALSE
-- argument1..100 - Optional. Arguments for the concurrent request
-- 提交并发请求
--FND_REQUEST.SUBMIT_REQUEST(application IN varchar2 default NULL,
program IN varchar2 default NULL,
description IN varchar2 default NULL,
start_time IN varchar2 default NULL,
sub_request IN boolean default FALSE
argument1,
argument2, ..., argument99,
argument100) return number;
*/

L_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST('PO',
'TRNORDER094',
'',
'',
FALSE,
order_number,
date_from,
date_to,
CHR(0),'','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','');

COMMIT;
IF L_REQUEST_ID IS NULL OR L_REQUEST_ID = 0 THEN
RETURN;
END IF;

/*
--
-- Name
-- WAIT_FOR_REQUEST
-- Purpose
-- Waits for the request completion, returns phase/status and
-- completion text to the caller. Calls sleep between db checks.
-- Arguments (input)
-- request_id - Request ID to wait on
-- interval - time b/w checks. Number of seconds to sleep
-- - (default 60 seconds)
-- max_wait - Max amount of time to wait (in seconds)
-- - for request's completion
-- Arguments (output)
-- User version of phase and status
-- Developer version of phase and status
-- Completion text if any
-- phase - Request phase ( from meaning in fnd_lookups )
-- status - Request status( for display purposes )
-- dev_phase - Request phase as a constant string so that it
-- - can be used for comparisons )
-- dev_status - Request status as a constatnt string
-- message - Completion message if request has completed
--
--等待并发请求完成,并返回分析/状态和完成信息,FND_CONCURRENT.WAIT_FOR_REQUEST(request_id IN number default NULL,
interval IN number default 60,
max_wait IN number default 0,
phase OUT varchar2,
status OUT varchar2,
dev_phase OUT varchar2,
dev_status OUT varchar2,
message OUT varchar2) return boolean;
*/


L_BL_RESULT := FND_CONCURRENT.WAIT_FOR_REQUEST(L_REQUEST_ID,
1,
0,
X_PHASE,
X_STATUS,
X_DEV_PHASE,
X_DEV_STATUS,
X_MESSAGE);
IF X_DEV_PHASE = 'COMPLETE' AND X_DEV_STATUS = 'NORMAL' THEN
editor_pkg.report(L_REQUEST_ID,'Y'); --使输出的报表pdf文件在浏览器中显示。
ELSE
fnd_file.put_line(1,RPAD('x_phase',20,' ') || '=' || X_PHASE);
fnd_file.put_line(1,RPAD('x_status=',20,' ') || '=' || X_STATUS);
fnd_file.put_line(1,RPAD('x_dev_phase=', 20, ' ') || '=' || X_DEV_PHASE);
fnd_file.put_line(1,RPAD('x_dev_status=',20,' ') || '=' || X_DEV_STATUS);
fnd_file.put_line(1,RPAD('x_message=',20,' ') || '=' || X_MESSAGE);
fnd_file.put_line(1,'Warning : Starting journal print report failure! It did not running in 120 seconds, its request_id is ' ||
TO_CHAR(L_REQUEST_ID) || ' please check it.');
END IF;
end print_report;

Lotus Symphony 1.2 辦公室軟體免費下載

Lotus Symphony 1.2 辦公室軟體免費下載(內含安裝程式、安裝說明、軟體合約)



IBM Lotus Symphony 1 for Windows
版本: 1.2
支援語言: 繁體中文
更新日期: 2008/11/03
系統需求: Windows XP, Windows Vista

請下載下面檔案,然後遵照 'IBM Lotus Symphony Installation Guide' 裡的步驟安裝。

Lotus Symphony Setup for Windows

Lotus Symphony Setup for Linux

2008/12/09

轉載:如何準備軟件工程師的面試

轉自:網路

今天想跟大家來談談如何準備軟件工程師的面試?假設,現在您的殺手簡歷 (killer resume)已經吸引了某大公司的注意並約你面試.那麼接下來該如何準備呢?

我在 Google(以前是微軟)工作期間面試了不下 300人,其中某些應聘者確實表現非凡,但有些卻顯得準備不足.當然許多面試準備不足的人最後依然獲得了錄用通知,因為他們本身確實才華出眾.但如果應聘 者能提前準備妥當,那麼面試過程將更為保險和輕鬆.以下所列出的就是我根據多年經驗總結得出的建議:

1.使用相同的工具(如鉛筆和紙張)和時間限制(例如半個小時)模擬面試訓練

Google 和微軟都會讓應聘者在白板上手工解答編程問題,但通常大部分的應聘者都是習慣於在電腦上利用編程工具系統編寫程序.因此面試的時候,某些應聘者離開了熟悉 的電腦光標,站在白板前感覺手足無措不知該如何起行.又或者他們不習慣在編程之時旁邊有人觀看,這會讓他們感到緊張而無法正常思考.

在現實生活中,如果你想要橫渡英吉利海峽,自然不能總是在室內游泳池練習.你必須投身於大海在波濤之中訓練,在準備面試的時候也是如此.:)

在面試開始之前你最好向招聘單位詢問面試形式和麵試問題.如果招聘單位讓你在某個房間考試且僅提供沒有彙編程序的編輯器,那麼就應該在家中按照這種 情景進行練習.如果招聘公司單位讓你在白板上回答問題並會安排考官在旁監督,那麼你就要找一位軟件工程師來扮演考官配合你練習.即使找來的考官經驗不如你 也沒有關系,他們依然能幫助你消除在他人面前出錯所帶來的緊張感,這樣可以讓你適應有人在旁邊盯著看的面試氛圍.

如果你恰巧認識我並希望由我來幫你聯繫,那我的條件就是必須請我吃飯:如果你已經工作了就吃日本壽司大餐;如果你還是學生,那麼吃比薩餅也可以.:)

2.在面試過程中不要對細小錯誤耿耿於懷

我曾不止一次的在面試過程中碰到這種情況:當應聘者知道編程問題後,他馬上就想到了最佳的方案、確定了邊界條件,然後開始編寫程序.但在編寫過程 中,應聘者犯了諸如首先檢查是不是操作順序錯誤或忘記設定某變量等無關大局的小錯誤,當我指出其錯誤之後,應聘者立刻變得十分緊張,這種焦慮情緒影響了他 在後面環節的正常發揮.

其實這種恐懼心理完全不必要.一名優秀的程序員在編程過程中出現錯誤也是很正常的,就像是小提琴手在演奏高難度的巴赫交響樂時也會偶爾失誤.音樂會的聽眾可能會覺察到這些錯誤,但是聽眾絕對不會因為這種細小失誤就把出色的小提琴手看作是門外漢.

即便應聘者徹底搞砸了某個編程問題,面試考官也可能會提出不同的問題並會容忍應聘者在某個問題上的失誤.再退一步說,就算某次面試徹底失敗,你也有機會在其它面試上補救.

我的一位同事(一個項目的技術負責人)最近面試了一個人,在開始面試時他覺得面試者的交流方式存在問題,因此開始表現的相當不友好.但經過了整個面 試過程後,面試者證明了自身的能力,而我的那位同事也成了那位面試者最堅定的支持者.在過去的一年中,我從未見過這位同事如此強烈的支持哪位面試者.

所以,因此就算面試進展不順,也務必堅持到底不要放棄.

3.在面試過程中不要失禮

這似乎是不用說的問題,但在面試過程中我確實碰到過影響很不好的失禮行為.曾有一位前來應聘軟件工程師的人看到我就說:「哇,我真不敢相信你這麼年 輕!你看上去好小!!我覺得你才 18 歲!」我看了他的簡歷才搞清楚原來是來應聘的,在開始的時候我卻忍不住想:「這個人是來面試我的吧?!?!」

面試者的這種言行實在要不得.

面試者也要注意不要說出諸如此類的話:「哇,你真的就是考官嗎?你看上去好老!」「哇,你真的是來面試我的,你看上去好胖!」(相信應該不會有人說這樣的話).

在我的另外一次面試中,應聘者的手機在面試開始 15 分鐘之後就響了,她沒有理會,手機連續響了 20 秒,這樣不免會對面試造成影響.5 分鐘之後,她的手機又響了,她依然沒有理會;5分鐘之後,手機第三次響起.最後她終於抓過手提包在裡面翻出了手機.我想:「是時候關掉手機了,她在進來之 前就應該把手機關掉.」但是她在手提包中拿出手機之後卻旁若無人的打起電話來,而且就在面試過程中間!

這種情況唯一可接受的理由就是他有什麼非常緊急的事,但是即便情況如此,那麼他也應該在面試開始之時就講清楚,讓面試官有所準備.

4.不要在面試中喧賓奪主

我曾經面試過幾個應聘者,他們好像鐵了心腸一定要告訴我他們最近的「超級項目」.當我開始發話他們就立刻打斷:「我想讓你瞭解我們近期處理的超級項目,10年之前當這個項目開始之時還默默無聞……」,然後接下來的5分鐘時間都在那裡滔滔不絕唾沫橫飛.

有時應聘者好像打定主意要給每個考官詳細描述其引以為豪的項目,然後一整天都在那裡翻來覆去的說這個項目.

記住:面試官在面試過程中有具體的問題需要詢問.但是如果應聘者喧賓奪主,那麼考官就可能無法獲得充分的信息來做出判斷,同時這種行為也會讓考官覺得應聘者很難共事.

如果你確實想談論自己的項目,那麼就應詢問面試官:「我覺得最近的某某項目能充分體現我的能力,我能不能用 10分鐘的時間來描述一下具體情況?」這樣就會給面試官空間來調整面試過程,由此也避免毫無徵兆就讓面試離題萬里.

5.在回答需要具體答案的問題之時,記得首先要有總括性的發言

有時我會問一個答案可以很簡練的問題,例如:「在你的那個成功項目中總共有多少人參與?」但應聘者往往會就此打開話匣:「嗯,張三參與了這個項目, 他負責 UI部分,當然我也會給他一些指導.李四也在項目中,她在賓州遠程工作,負責後端服務器.兩年之後我們又有新人王五加入……」

在應聘者滔滔不絕的講了三分鐘之後,我還是不知道這個項目到底有多少人參與.

因此首先要簡練的回答問題,然後再展開描述:「在我接手項目時有三個人,但當我離開項目時人數已經增加到12人.」

當然如果能簡練的回答問題,然後徵詢意見之後再展開論述那就更好了:「在我接手項目時有三個人,但當我離開項目時人數已經增加到 12 人.我可以講一下各人在項目中的具體分工嗎?」

6.(不是特別重要)在面試中要衣著得體,舒適的商務便裝是最佳的選擇

人們有時候會為衣著犯愁.但是最重要的是要讓自己感覺舒適.如果需要具體的建議,那麼我建議穿襯衫甚至T恤衫.對於某些公司(例如 Google),西裝革履顯然是太隆重了.

這條建議不必太看中,因為面試官不會管應聘者穿什麼.最好應該詢問人事招聘部門穿什麼合適,因為不同國家有不同習俗,就算美國東海岸和西海岸的公司 著裝文化也會有差別.像 Google 這樣的公司在著裝方面更加隨意,因此如果你穿著「三件套」的經典西服去 Google 面試,考官可能會有異樣的感覺.因此如果你真的具備軟件工程的本領,穿什麼其實並不重要.某個應聘者曾經穿著皺巴巴髒兮兮的T恤就跑來面試,他的T恤衫上 還有著許多破洞.但最後他還是拿到了錄取通知(當然我絕不建議如此穿著).

最後的一個小故事

最後我想講一場極為尷尬的面試.在看完之後,我希望你能這樣想:無論你的面試如何糟糕,你至少要比這位應聘者幸運.

以前我還在微軟的時候,我們通常會為應聘者準備一些飲料,某位暫稱其為 Jeff 的應聘者要了一聽百事可樂.我們走進面試房間後,他就在桌前坐下了.接下來我們簡要的談了談他的工作經歷,然後他開始在白板上解答編程問題,此時他還沒有打開他的可樂.

我們倆站在白板前,然後傑夫開始在上面寫程序.在寫程序之時他沉浸在對整體構架的思考中,下意識的退了一步來查看整個白板.在後退時他不小心碰到了桌子,放在桌上的百事可樂掉到了地上.

因為可樂還沒有打開,因此當可樂罐落地的時候,可樂罐炸開了.

可樂罐在地上打轉,泡沫噴的到處都是.你可以想像當時的場景,可樂噴到了牆上、書架還有我電腦的鍵盤上.我倆楞在那裡,手都半伸著(根本來不及抓到可樂罐),眼睜睜的看著可樂弄得到處都是.

我們花了 5 分鐘的時間用紙巾來清理現場(雖然我的書本自那天之後都粘頁了,而牆壁也不再是干淨的了).

隨後我們重新開始白板測試.傑夫此時已非常緊張(換了誰都會緊張吧?).他寫了幾行程序,然後擦掉,然後再寫.他是用自己的手擦拭白板而不是用板刷.他急得額頭冒汗,然後他又用剛剛擦過白板的手擦汗.在面試過程結束之時,他的臉上佈滿了紅色、綠色和藍色的顏料.

我說:「你的手上粘了很多顏料,我帶你去衛生間洗洗吧,」然後我把他領到洗手間讓他從鏡中看到了自己的尊容.

作者簡介: 王忻,Google 工程師.北京出生,五歲時跟隨父母移居美國.中學期間跳了三級,十五歲進入了加州理工大學,加入 Google 前曾在微軟等公司工作.

轉載:如何寫一份好的工程師簡歷

轉自:網路

最近三年作為 Google(谷歌)的軟件工程師,我每週會幫人事部門審查簡歷,決定要不要給他們面試。Google 這幾年的發展讓很多許多優秀的工程師都前來申請。到目前為止,我已經看了上千份簡歷,有些簡歷留下的印象比別的好很多。尤其是最近親戚朋友常常問我如何修 改他們的簡歷,所以我積累了一些常見的錯誤避免的提議,在此跟大家交流一下。

1.談到你做過的技術時,應該提到用的程序語言、你的個人貢獻和產品細節。

有時我看到有人把過去的經驗在簡歷上一筆帶過,比如說:

• 在三人小組裡,為電子郵件軟件寫了些 features。

這是遠遠不夠的,看簡歷的人希望瞭解你做的工作的難度和對本公司有多少聯繫,所以你最好寫的具體一些。譬如:

• 用 C++ 語言寫了網絡電子郵件的自動 backups。在三人小組裡,專門負責設計和寫儲存服務器。從設計開始, 一年後把這個功能 feature 的用戶推到了三千。

2.多講事實, 少用形容詞。

看簡歷的人讀你的簡歷時,需要做判斷,所以在簡歷裡需要事實和數目。如果你寫「迅速的提高了軟件的操作效率」,看簡歷的人很難判斷你成就的難度。但如果你寫「在3個星期內,把軟件的操作效率提高了40%」 就好多了。

有些謙虛的朋友們不願意把話說滿,所以你也可以用這個辦法。你如果說自己「突出」或「在項目上常常被請去救火」,聽起來難免會有點驕傲。但你也可以 用不能否認的事實來說明你的觀點,如「《紐約日報》評這個產品為『突出』」,或「加入了三個原本已落後於計劃的項目小組,但經過努力和組員一起把它們都按 時完成了。」

3.你獲得的獎、商業的榮譽或表揚、受用戶歡迎的產品和你做過的有難度的業餘項目都該包括在簡歷裡。

我有位朋友在矽谷一個著名的硬件公司做了六年,她設計的 IP phone(網絡電話)為公司賺了上億的收入,被公司與商業報導多次評了獎。我有一次在舊金山的高速公路上駕車時,看到路邊有她產品的廣告牌;還有一次我去上海度假時,竟然發現上海公路邊上也有!

不久,這位朋友決定換工作,請我看看她的簡歷。我驚訝的發現,她居然輕描淡寫的寫了一句– “1998 – 2004:網絡電話產品的硬件工程師組長” 和她的職責。

“產品贏的獎呢?它為公司賺的錢呢?” 我追問到。

“那些也該寫嗎?” 她說。

當然該寫。

有人問,業餘時間做的項目可不可以寫?我覺得只要你的項目有代表性能說明對你的能力,都該包括。

4.分清主次,刪掉相比之下不起眼的成績,以免沖淡更加突出的成績。

有朋友問,寫簡歷是不是寫的越多越好?譬如:

在甲公司做暑假實習生——
* 改善電子遊戲的數值分類算法, 減少了內存要求 10%。
* 用 Java 寫了 3000 行用戶界面程序。
* 每週做兩小時的人工測試。

你在申請軟件工程師的職位時,我覺得前兩點比較相關,第三點其實就不必寫了。有時我看到有的簡歷裡會提到,”按時完成了任務,產品符合原計劃規格”。但讀簡歷的人通常會認為這是理所當然的,而你把這些聲明出來反而減弱簡歷的效果。

寫一份簡歷不容易,但寫好了也會帶來成就感 (和好工作!)。 Google (谷歌)在中國廣召各方面的人才,你不妨可以給我們投個簡歷!我們不但在信息檢索方面招雇工程師,還有計算機圖形、用戶界面、硬件、Windows、質量保證員和系統管理員等方面。

2008/11/17

如何識別汽車機油標號嗎

由於汽車發動機使用的機油在設計時設定的技術參數不同,因此機油的品牌和標號也就不同。人們常見的機油標籤上的 “SAE”“API”“SAE”用來評定機油粘度的,後面跟隨的數位由550不等,數字越大機油越稠反之越稀。“API”是評定機油優劣級數的,用 “S”表示汽油(我國用“Q”表示汽油),“C”表示柴油,隨後的英文字母表示機油級別,“A”是最低級,“G”是最高級。

汽車發動機機油粘度是按機油的適用環境溫度來分類的,共有0W5W10W15W20W25W,六個W等級及2030405060五個常 規粘度等級。W(冬季)級,表示在寒冷低溫下使用,數位越小,其低溫使用流動性能越好,適用的環境溫度越低。工作使用溫度是100℃時的粘度數決定,數位 越高粘度越大,適用環境溫度越高。

一般來說,汽油機轉速高負荷少,潤滑壓力低;柴油機轉速低負荷大,潤滑壓力高。兩者對機油性能的要求不同,因此對使用機油的類型和要求也就不同。因此,汽油機機油與柴油機機油是不能混用的。

市場上還有一種使用比較廣的馳耐普S-12599抗磨王)添加在任何一種標號機油裏,除了具有一般機油的特點外,其粘度還可以在一定的範圍內凋節,遇熱 變稠,遇冷變浠,還因其含有金屬清淨劑、抗氧抗腐劑、除鏽劑、無灰分散劑和粘度指數改進劑等成份,可有效地改善了機油的品質,不僅使發動機活塞及燃燒室較 為清潔,潤滑油路和細濾器上的沉積物少,減低發動機的磨損延長使用壽命,而且還能有效的節約燃油。

關於機油更換週期

新車說明書上都規定了機油的更換週期,這個週期是機油的最長更換週期,實際使用中 如果能提前更換當然更好,那樣不會出任何問題。新車第一次換機油的行駛裏程要短一些,在汽車使用說明書上都有規定,在以後,每5000公裏~10000公 裏換一次機油,如果汽車使用頻次少,要幾年才能跑滿10000公裏,那就按時間來換,可以每兩年換一次,但更換週期不能太長,因為時間長了機油會變質。還 有一點要注意的是,機油也有消耗,在發動機工作期間,正常情況下都有燒機油的現象,只是量多量少的問題,一般都比較輕微,但仍然應該定期檢查油尺的油面高 度,發現不足及時補充。如果你發現機油消耗量突然變大,就應當注意一下,這有可能是活塞環或者氣閥桿磨損加大的原因,無論是什麼原因,都要及時檢查消除。

  如何為自己的車選擇機油?

一般而言,新型號的發動機對機油使用級別要求更高。在選用機油的時候,要嚴格按照汽車使用說明書所規定的機油使用級選用,若無相同級別的機油,可以使用高一級的機油,但絕不能用低級別的代替。

機油粘度級選擇的主要依據是環境溫度的高低。一般情況下,在4月~9月全國大部分 地區都可選用20號~40號的各級夏季用機油。冬季用機油的選擇就要注意了,在我國長江以南、南嶺以北地區,冬季最低溫度可達-1-,可用25W 級;在黃河以南、長江以北地區,冬季最低溫度可達-~-1,可用20W級;在華北、中西部以及黃河以北地區,冬季最低溫度可達 -1~-2,可用15W或10W級;而在東北、西北等嚴寒地區,冬季最低溫度可達-2~-3,要用5W級;對於其他高寒地區,冬季最低溫 度也能到-3以下,就需要用0W級。

當然,如果嫌換機油麻煩,也可以選用冬夏兩用的多級機油耐用溫差越大的機油則意味著更高的價格。需要注意的是,在選用機油的粘度級時還必須考慮發動機的負荷、轉速和磨損情況。如果發動機負荷大、轉速低或磨損嚴重時,應該選用粘度較大的機油。

2008/11/08

如何用wine安装office2007

轉自:ubuntu中文论坛

你需要最新的Wine 0.9.58和一份CrossOver Games。放心,我们不需要购买CrossOver Games,只需要下载一份它的7天试用版即可,只需要其中一个文件。

下载CrossOver Games的7天试用版可访问:

http://www.codeweavers.com/products/cxgames/download_trial/

OK,假设你一切都准备好了(包括Microsoft Office 2007的安装镜像),那么开始吧!

0、创建干净的Wine环境

打开终终端,运行winecfg,将会自动创建wine的运行环境。假如你之前运行过旧版本的wine,首先得rm -r ~/.wine。

在winecfg中,建议设定默认屏幕分辨率,如设置成1024×768。

1、设置必备dll文件

首 先删除~/.wine/drive_c/windows/system32/rpcrt4.dll,然后将CrossOver Games目录下(默认是 /opt/cxgames)的/opt/cxgames/lib/wine/rpcrt4.dll.so复制至~/.wine /drive_c /windows/system32,命名为rpcrt4.dll。

第二步删除~/.wine/drive_c/windows/system32下的msxml3.dll文件。再运行winecfg,在library页面将msxml3.dll和rpcrt4.dll加入并设置为native。

确保替换和删除成功后,即可开始安装。

2、安装MSXML和Office 2007

先访问 Microsoft XML Parser (MSXML) 下载Microsoft XML解析器,然后在终端下运行以下命令来安装:

$ msiexec /i msxml3.msi

接着,插入你的Office 2007光盘,输入以下命令挂载它:

mount -t iso9660 -o unhide /dev/cdrom /media/cdrom0

或者用以下命令挂载ISO:

mount -t iso9660 -o loop ****.iso /media/cdrom0

然后开始安装吧!

$ cd /media/cdrom0
/media/cdrom0$ wine setup.exe

经过了漫长的等待以后,就到你的应用程序菜单中去运行Microsoft Office 2007吧!

2008/10/31

如何修改XML报表默认输出格式的设置

摘自:網路

完成XML报表的制作挂到系统中后, 默认的输出格式是PDF,想要修改的话还要点击'Option'按钮到另一个界面上去修改,客户不胜其烦,我们也很恼火直骂Oracle的娘。好在群众的智慧是无限的,在同事Allen和ERP100斑竹Phoenix的帮助下,找到了解决方法,效果不错。

方法一 Report Builder + XML 实现
Step(1) 在Report Bulder中添加Number类型参数P_CONC_REQUEST_ID;

Step(2) 修改Befor Report Trigger,添加以下代码。
--update layout
UPDATE fnd_conc_pp_actions
SET argument5='RTF'
WHERE concurrent_request_id=:P_CONC_REQUEST_ID
AND action_type=6;
注:此处将输入格式设置为Word,若想设成Excel或Html,可将'RTF'替换成'EXCEL'或'HTML'

方法二 PL/SQL Store Procedure + XML 实现;
Procedure XML_PRINT(Errbuf Out Varchar2,Retcode Out Varchar2) Is
ctx dbms_xmlgen.ctxhandle;
c_result clob;
b Varchar2(5000);
Type ref_cursor Is Ref Cursor;
v_source ref_cursor;
c_long Number;
c_int Int;
Begin
--设置XML报表模认输出格式
UPDATE_XML_OUTPUT_FORMAT ;
--定义数据,数据集必须为游标变量
Open v_source For
Select HEADER_ID DN_HEADER_ID ,
SOLD_TO_ORG_ID PICK_SEQUENCE_ID ,
CUST_PO_NUMBER PS_HEADER_BATCH_NUM ,
ORG_ID BATCH_ID ,
SOLD_TO_ORG_ID DELIVERY_ID ,
ORDER_NUMBER DN_NUMBER ,
BOOKED_FLAG PRINTED_FLAG
From OE_ORDER_HEADERS_ALL
where rownum < 15;
--定义XML CLOB文件
ctx := dbms_xmlgen.newContext(v_source);
-- generate the CLOB as a result.
c_Result := dbms_xmlgen.getXML(ctx);
--以文本形式输出XML文件
c_long := length(c_result);
c_int := c_long/50-0.5;
For a In 1..c_int+1 Loop
b := dbms_lob.substr(c_result,50,(a-1)*50+1);
fnd_file.PUT(fnd_file.OUTPUT,b);
--dbms_output.put_line(b);
End Loop;
dbms_xmlgen.closeContext(ctx);
Close v_source;
End xml_print;

注:这是斑竹Phoenix提供的用PL/SQL Store Procedure产生XML数据的方法,简单实用。


Procedure UPDATE_XML_OUTPUT_FORMAT Is
pragma autonomous_transaction;
BEGIN
UPDATE fnd_conc_pp_actions
SET argument5='RTF'
WHERE concurrent_request_id= fnd_profile.value('CONC_REQUEST_ID')
AND action_type=6;
COMMIT ;
END ;

2008/10/23

中國大陸各地台灣事務辦公室

摘自:網路
台灣事務辦公室 省市 聯絡電話 傳真
國務院台灣事務辦公室 中央 10-83912149 10-83912367
北京市台辦 北京市 10-84080909-128 10-84080401
天津市台辦 天津市 22-23032501
22-23032503
22-23032065
重慶市台辦 重慶市 23-63651335
23-63651336
23-63651329
上海市台辦 上海市 21-62756309 21-62756961
上海市閔行區 上海市 21-64120315
上海市金山區 上海市
21-57921219
上海市盧灣區 上海市 21-53963300-407 21-53963011
上海市浦東區 上海市 21-58207560 21-58310798
上海市松江區 上海市 21-57820465 21-57822844
山西省台辦 山西省 351-4045656
351-4045652
351-4045652
太原市台辦 山西省 351-4030261
351-4223680
351-4223680
晉中市台辦 山西省 354-2025111
山東省台辦 山東省 531-6904079
531-6904080
531-6914409
濟南市台辦 山東省 531-82038725 531-82909400
青島市台辦 山東省 532-85912691
532-85912603
532-85912606 532-85912691
威海市台辦 山東省 631-5233781 631-5231025
濟寧市台辦 山東省 537-2967648 537-2967648
煙台市台辦 山東省 535-6244568 535-6242179
泰安市台辦 山東省 538-8270281
538-8214113
538-8236870
昌樂縣台辦 山東省 536-6231090 536-6236508
蓬萊市台辦 山東省 535-5643450
535-5642534
535-5643963
濰坊市台辦 山東省 536-8789221
536-8238437
536-8789139
536-8239406
日照市台辦 山東省 633-8783145 633-8781386
臨沂市台辦 山東省 539-8312893 539-8312312
濱州市台辦 山東省 543-3319072
內蒙古自治區台辦 內蒙古 471-4951552 471-4951122
四川省台辦 四川省 28-87532321 28-87530811
成都市台辦 四川省 28-86694025
28-86641862
28-86642706
28-86636724
都江堰市台辦 四川省 28-87133460
眉山市彭山縣台辦 四川省 833-7621568
樂山市台辦 四川省 833-2437305
綿陽市台辦 四川省 816-2244514 816-2222458
甘肅省台辦 甘肅省 931-8418947 931-8831467
白銀市台辦 甘肅省 943-8221736
吉林省台辦 吉林省 431-8904089 431-8928402
吉林市台辦 吉林省 432-2010414 432-2010433
長春市台辦 吉林省 431-88776532 431-88776531 431-88991254
江西省台辦 江西省 791-6816626 791-6802722
南昌市台辦 江西省 791-3885555 791-3885550
九江市台辦 江西省 792-8211674 792-8222557
贛州市台辦 江西省 797-8391638
797-6523932
797-8391692
797-6523933
景德鎮市台辦 江西省 798-8234535 798-8223396
萍鄉市台辦 江西省 799-6772715 799-6772715
新余市台辦 江西省 790-6436750 790-6436750
鷹潭市台辦 江西省 701-6431789 701-6431789
宜春市台辦 江西省 795-3232698 795-3232698
上饒市台辦 江西省 793-8221365 793-8221365
江蘇省台辦 江蘇省 25-83317175
25-83317149
25-83303194
南京市台辦 江蘇省 25-83363899
25-86634757
25-86634757
25-83608160
昆山市台辦 江蘇省 512-57315237
512-57367701
512-57366969
蘇州市台辦 江蘇省 512-65212060
512-65222995
512-65222995
無錫市台辦 江蘇省 510-2752474
510-2768075
510-2700497
泰州市台辦 江蘇省 523-86398855 523-86398822
徐州市台辦 江蘇省 516-3735603 516- 3701897
吳江市台辦 江蘇省 512-63422357 512-63422357
鎮江市台辦 江蘇省 511-4424448 511-4427945
揚州市台辦 江蘇省 514-7864475 514-7864485
張家港市台辦 江蘇省 520-58682858 520-58681812
淮安市台辦 江蘇省 517-83605294 517-83605013
通州市台辦 江蘇省 513-6516013 513-6512813
南通市台辦 江蘇省 513-5517350 513-5104009
常州市台辦 江蘇省 519-8166010 519-8170337
鹽城市台辦 江蘇省 515-8190309 515-6660309
建湖縣台辦 江蘇省 515-6212019 515-6212648
江陰市台辦 江蘇省 510-6861153 510-6861168
連雲港市台辦 江蘇省 518-5825286 518-5825109
河北省台辦 河北省 311-87903876 311-87903293
秦皇島市台辦 河北省 335-3033337 335-3036066
唐山市台辦 河北省 315-2821494 315-2827658
保定市台辦 河北省 312-3089917 312-3089930
海南省台辦 海南省 898-5364187
898-5337879
898-5334135
浙江省台辦 浙江省 571-87055960
571-87053890
571-7053891
杭州市台辦 浙江省 571-87229751
571-87229825
571-87229829
寧波市台辦 浙江省 574-56128015
574-56128167
574-56128018
嘉興市台辦 浙江省 573-2521866 573-2711568
平湖市台辦 浙江省 573-5022592
奉化市台辦 浙江省 574-8590000 574-8526109
湖州市台辦 浙江省 572-2063344 572-2064082
諸暨市台辦 浙江省 575-7116309 575-7012934
長興縣台辦 浙江省 572-6052408 572-6022742
桐鄉市台辦 浙江省 573-8313660 573-8107585
紹興市台辦 浙江省 575-5147279 575-5126875
陝西省台辦 陝西省 29-5397001
29-5397010
29-5397005
咸陽市台辦 陝西省 910-3210184 910-3210697
湖北省台辦 湖北省 27-87822165
27-87890841
27-85820298
27-87814956
武漢市台辦 湖北省 27-85881946
27-85881945
27-85881942
宜昌市台辦 湖北省 717-6223161 717-6447728
武漢市
東西湖區台辦
湖北省 27-83217508 27-83217508
襄樊市台辦 湖北省 710-3524768
黃石市台辦 湖北省 714-6524283
荊州市台辦 湖北省 716-8443749
黃岡市台辦 湖北省 713-8352881
孝感市台辦 湖北省 712-2823902
十堰市台辦 湖北省 719-8666281
咸寧市台辦 湖北省 715-8256712轉6209
恩施州台辦 湖北省 718-8221747
神農架林區台辦 湖北省 719-3334020
隨州市台辦 湖北省 722-3062493
仙桃市台辦 湖北省 728-3491161
潛江市台辦 湖北省 728-6242370轉3176
荊門市台辦 湖北省 724-2378382
鄂州市台辦 湖北省 716-3222004
天門市台辦 湖北省 728-5222800轉2036
雲南省台辦 雲南省 871-3102465
871-3102471
871-3100231
黑龍江省台辦 黑龍江省 451-53636589
451-53621481
451-53609749
451-53621481
哈爾濱市台辦 黑龍江省 451-84696285 451-84613644
新疆維吾爾自治區台辦 新疆維吾爾
自治區
991-2391983
991-2391815
991-2391319
福建省台辦 福建省 591-87839641
591-87856014
591-87855370
福州市台辦 福建省 591-87711196
591-87731753
591-87730573
廈門市台辦 福建省 592-5151730
592-5558421
592-5526142
592-5076581
泉州市台辦 福建省 595-2168665 595-2168655
漳州市台辦 福建省 596-2029459 596-2031315
莆田市台辦 福建省 594-2692623 594-2690337
三明市台辦 福建省 598-8228868 598-8265705
廣西壯族自治區台辦 廣西壯族
自治區
771-5883281
771-5852192
771-5874303
南寧市台辦 廣西壯族
自治區
771-2820451
桂林市台辦 廣西壯族
自治區
773-2824941
773-2816298
773-2854946
773-2823330
廣東省台辦 廣東省
20-83333071
20-83376511
廣州市台辦 廣東省 20-83105001
20-83105023
20-83546681
廣州市
花都區台辦
廣東省 20-36898856 20-36898853
中山市台辦 廣東省 760-8312796 760-8312796
深圳市台辦 廣東省 755-82101354
755-82105178
755-82102446
肇慶市台辦 廣東省 758-2278713
758-2220477
758-2233958
東莞市台辦 廣東省 769-2239475
769-2219533
769-2219445
珠海市台辦 廣東省 756-2120723 756-2120653
佛山市台辦 廣東省 757-83365408 757-83366120
惠州市台辦 廣東省 752-2809936 752-2817619
湛江市台辦 廣東省 759-3102706 759-3105391
梅州市台辦 廣東省 753-2252992 753-2250313
茂名市台辦 廣東省 668-2910359 668-2910359
遼寧省台辦 遼寧省 24-23128393
24-23128399
24-23868326
瀋陽市台辦 遼寧省 24-22863196 24-22719264
大連市台辦 遼寧省 411-2727753 411-2709691
鐵嶺市台辦 遼寧省 410-4832926 410-4832461
鞍山市台辦 遼寧省 412-2213998 412-2213198
本溪市台辦 遼寧省 414-2845362 414-2845362
盤錦市台辦 遼寧省 427-2823826 427-2825226
營口市台辦 遼寧省 417-2669227 417-2633946
遼陽市台辦 遼寧省 419-2308867
419-2312393
419-2308259
湖南省台辦 湖南省 731-2219792
731-2219798
731-4444496
長沙市台辦 湖南省 731-8667403 731-8667412
張家界市台辦 湖南省 744-8282183 744-8380519
常德市台辦 湖南省 736-7786248
安徽省台辦 安徽省 551-3644431 551-3644431
合肥市台辦 安徽省 551-2675400 551-2657020
青海省台辦 青海省 971-8482427 971-8482430
貴州省台辦 貴州省 851-5892044 851-5823120
西藏自治區台辦 西藏自治區 891-6334917 891-6334917
寧夏回族自治區台辦 寧夏回族
自治區
951-6087219
951-5056098
0951-6087219