Monthly Archives: September 2005

修改ORACLE的DATAFILE文件名

今天增加数据文件时,将数据库文件名多填了一个点,虽然也能使用,但在操作系统察看文件时却感觉很不爽,查了一些资料,修改方法总结如下: 1. 关闭数据库 SQLPLUS /NOLOG SHUTDOWN; 2. 在操作系统中将数据文件改名 3. 加载数据库,在ORACLE中修改数据库文件名 SQLPLUS /NOLOG START MOUNT; ALTER DATABASE RENAME FILE ‘OLD_FILENAME’ TO ‘NEW_FILENAME’; 4. 打开数据,检查修改是否成功 ALTER DATABASE OPEN; SELECT NAME, STATUS FROM V$DATAFILE;

SQLLDR的一个简单例子

1、导入表的结构: CREATE TABLE MARA1(MATNR VARCHAR2(18) NOT NULL,  MATKL VARCHAR2(3)  DEFAULT ‘ ‘,  GROES VARCHAR2(40) DEFAULT ‘ ‘,  ERSDA DATE); 2、参数文件内容: USERID=TEST/TEST@FIRSTDBCONTROL=MARA.CTLROWS=10 3、控制文件内容: LOAD DATAINFILE ‘MARA.TXT’APPEND INTO TABLE MARA FIELDS TERMINATED BY X’09′ OPTIONALLY ENCLOSED BY ‘"’(MATNR,MATKL,GROES,ERSDA DATE "YYYY-MM-DD") 4、命令行输入内容: SQLLDR PARFILE=MARA.PAR

EXPLAIN PALN AND TKPROF

从网上找了两篇不错的学习资料,学习中… 简介 详细教程

使用AT SELECTION-SCREEN事件验证用户输入条件的反思

    回想一下,为什么要在AT SELECTION-SCREEN事件验证用户输入条件?好像是第一次做ABAP培训中老师提到的,当时也没有觉得有什么问题,以后在程序中也就按照这样的思路去写代码了.像下面简单的代码,对我来说已经是司空见惯了. SELECT-OPTIONS: s_matnr FOR mara-matnr. AT SELECTION-SCREEN.  IF s_matnr[] IS INITIAL.    MESSAGE e001 WITH ‘请输入物料号!’.  ENDIF.     从逻辑上来看没什么问题,这样可以确实要求用户必须输入物料号这个条件.    但是当用户输入多个物料号的时候,麻烦来了.用户一般已经在其它地方将需要输入的物料号复制到剪贴板上,希望能一次粘贴到选择条件中.但是有了上面的语句,用户必须复制一个物料号,粘贴到s_matnr对应的编辑框内,然后切换回物料号列表的窗口,复制剩余的物料号,点击"多项选择"按钮再进行粘贴,无形中多出了三个操作步骤.    如果每天使用这样的报表使用几次,那可能也算不了什么.但是如果要几十甚至上百次使用这样的报表,您不觉得烦吗?     如果在AT SELECTION-SCREEN事件中写了比较复杂的验证代码,那就更麻烦了.因为用户每次点击"多项选择"按钮都会触发AT SELECTION-SCREEN中的所有代码,那么对于用户来说,每次操作都需要一定时间的等待!另外一方面,AT SELECTION-SCREEN中的所有代码在触发START-OF-SELECTION事件前还会执行一次,对系统来说也是不必要的资源浪费.     还是看看关于AT SELECTION-SCREEN的Online help吧!    You should only perform very expensive checks with AT SELECTION-SCREEN     考虑到上面的情况,大多数情况下面,我们还是把验证用户输入条件的代码放在START-OF-SELECTION事件处理中比较合适. —————————————————     对AT SELECTION-SCREEN又做了一些研究,如果在事件处理中加一些限制条件后,基本上和写在START-OF-SELECTION事件中效果相同,不过出错时的提示界面更友好,用户可以直接修改输入值,这也是使用START-OF-SELECTION事件不好的地方.代码框架如下:   IF sscrfields-ucomm = ‘ONLI’ OR     sscrfields-ucomm = [...]

小议ABAP中的宏

    从接触ABAP的宏开始,逐渐在程序中使用了一些宏.感觉主要的好处是可以比较随意的组合代码,因为宏使用的参数名称替代,可以完成一些FORM难以实现的功能.     今天却深刻体会到了使用宏的烦恼.起因是我想在程序中实现一段代码的可复用性,但是写FORM的话需要传递不少的参数,便偷懒写了宏来替代.以前这段代码工作的很好,一直没有问题.现在用户突然反映有问题,我便跟踪程序,到源代码中宏语句的地方却傻眼了,根本无法进行单步跟踪!使用step in跟踪,只能跳转到宏里面的FORM,具体的执行过程却无从下手察看.只好另开一个窗口对照源程序,费了很大的力气才解决问题.     看来复杂的逻辑实现还是不要使用宏,FORM虽然写起来麻烦,但是起码不会有调试的问题!

在ABAP中访问外部数据库

因为公司SAP使用的后台数据库为ORACLE,需要访问的外部数据库也是ORACLE,所以问题相对简单了些.加上这段时间也了解一些ORACLE的原理和体系方面的知识,对解决问题也多了些帮助,主要的步骤如下:1. 在SAP的应用服务器上设置TNSNAMES.ORA文件,增加对外部数据库的连接,注意定义TNSNAME的格式.2. 设置数据库连接: 使用事务码DBCO,或者使用SM30维护表DBCON的内容.对于ORACLE数据库,连接信息为TNSNAMES配置的连接名称3. 使用NATIVE SQL访问外部数据库,示范代码如下: * 连接到外部数据库EXEC SQL.  connect to ‘DB1′ as ‘CONN1′ENDEXEC. check sy-subrc = 0. * 执行SQL语句EXEC SQL.  select field1  into :var1  from schema.tablenameENDEXEC. * 断开连接EXEC SQL.  DISCONNECT ‘CONN1′ENDEXEC. 参考资料:1. EXCE SQL语句的online help2. NOTES 323151,关于SAP中MultiConnect的信息3. NOTES 571623,关于修改TNSNAMES.ORA文件的信息

配置Oracle Enterprise Manager过程总结

1. 启动Enterprise Manager Configuration Assistant2. 按照向导的提示一步步操作,最终将生成OEMREP数据库.3. 启动Enterprise Manager Console,选择"登陆到Oracle Management Server"选项4. 使用sysman/oem_temp登陆,第一次登陆请更改口令5. 进入配置->首选项菜单,填写各节点和数据库的身份证明信息6. 对于WINDOWS平台,需要将验证节点登陆的用户增加"登录为批处理作业"权限,具体操作如下:依次打开管理工具->本地安全策略,选择本地策略->用户权利指派,增加"作为批处理作业登陆"策略的用户 网友renxiao2003在ChinaUnix论坛上发表过一个详细的教程在Win2k下配置使用OEM,值得参考.

创建Oracle数据库用户过程小结

1. 创建保存用户数据的表空间2. 创建用户,分配用户的默认表空间和临时表空间3. 分配用户角色,普通用户给CONNECT角色就可以了;管理员需要增加DBA角色4. 如果用户需要使用OEM,需要增加SELECT ANY DICTIONARY系统权限5. 如果用户需要管理数据库(如启动,关闭数据库),需要增加SYSDBA或SYSOPER系统权限.6. 设置用户在表空间上的限额

两个SQL语句写法的性能测试

测试表: MARA,MAKTMARA表的记录数大约为44000 =======================================测试一:DATA: BEGIN OF it_mara OCCURS 0,        matnr LIKE mara-matnr,        maktx LIKE makt-maktx,      END OF it_mara.第一种写法:  SELECT matnr  INTO it_mara  FROM mara.    APPEND it_mara.  ENDSELECT.      平均运行结果: 366,740微秒 第二种写法:  SELECT matnr  INTO TABLE it_mara  FROM mara.平均运行结果: 148,360微秒=======================================测试二:  DATA: BEGIN OF it_mara OCCURS 0,        matnr LIKE mara-matnr,        maktx LIKE makt-maktx,      END OF it_mara. DATA: BEGIN OF [...]

ABAP中的SAPCE在ORACLE数据库中的表示

    和一般的开发语言有所不同,在ABAP中空格和空字符串都等同于SPACE,写OPEN SQL语句时也可以直接使用SPACE,但是在数据库SPACE又是如何体现的呢?     最简单的方法是直接连接到后台的Oracle数据库去查看.很遗憾,我手头没有可以直接访问Oracle数据库的用户.但是没关系,我们自己写个程序验证一下吧!顺便也练习一下在ABAP中NATVIE SQL的写法. DATA: icount TYPE i. START-OF-SELECTION.   SELECT COUNT(*)  INTO icount  FROM mara  WHERE matkl = space.  IF sy-subrc = 0.    WRITE: AT /1 icount.  ENDIF. 先用OPEN SQL算一下物料组为空的物料号数量. 运行结果为151. 到底SPACE在Oracle数据库中的表示是什么呢?是NULL吗?试试看. DATA: icount TYPE i. START-OF-SELECTION.   EXEC SQL.    select count(*)    into :icount    from mara    where mandt = ’220′ and          matkl is [...]