中文的,主要是%date的使用。

可以通过截取获得日期对应的星期几。

 

EXP userid=user/password@oracledatabase file=C:\dumpfolder\%date:~11,3%.dmp

 

echo %date:~11,3%

得到"星期五";

 

echo %date%
得到"2009-04-24 星期五"
posted @ 2009-04-24 14:58 深渊野鱼 阅读(20) | 评论 (0)编辑
对于SQL语句
select nvl(to_char(floor(avg((apfndtm-apdldtm)*24*3600))),0) from emflib.eqapypf 
 where apydat >= 20080902 and apydat <= 20080902 and apcfmfg ='C' and apapyfg='A' and  apytim >= 090000 and apytim <= 173000 AND apdeal >= 0 and apntg3 = 0 and apctg4='FANGXN'

如果使用参数化的
速度慢
select nvl(to_char(floor(avg((apfndtm-apdldtm)*24*3600))),0) from emflib.eqapypf 
 where apydat >= :apydat1 and apydat <= :apydat2 and apcfmfg =:apcfmfg and apapyfg=:apapyfg and  apytim >= :apytim1
 and apytim <= :apytim2 AND apdeal >= :apdeal and apntg3 = :apntg3 and apctg4=:apctg4

如下这条,少了一个条件,速度倒还可以
select nvl(to_char(floor(avg((apfndtm-apdldtm)*24*3600))),0) from emflib.eqapypf 
 where apydat >= :apydat1 and apydat <= :apydat2 and apcfmfg =:apcfmfg and apapyfg=:apapyfg and  apytim >= :apytim1
 and apytim <= :apytim2 AND apdeal >= :apdeal and apntg3 = :apntg3

如果把SQL改成
select nvl(to_char(floor(avg((apfndtm-apdldtm)*24*3600))),0) from emflib.eqapypf 
 where apydat >= :apydat1 and apydat <= :apydat2 and apcfmfg =:apcfmfg and apapyfg=:apapyfg and  apytim >= :apytim1
 and apytim <= :apytim2 AND apdeal >= :apdeal and apntg3 = :apntg3  and apctg4='FANGXN'
那么速度也是暴快,真是汗,有些搞不明白为何如此。数据分布
    apctg4         count(*)
1    HUANGJF       106
2    ZHANGYJ       117
3    LINLIJU       2
4    WEISQ         53
5    ZHANGDC       28
6    FANGXN        217
7    LDWANGL       166
8    LINYZ         166
9    SHIXY         184
10    SHAONH        163
11    LIYY          160
12    LDCHENWF      9


根据经验估计,虽然是全部的SQL参数,但是SQL访问计划可能因为数据的分布或者SQL的统计信息的不及时,倒是ORACLE使用全表扫描,而使用直接SQL则可以使其又归回正确的轨道。不过看来,额滴ORACLE功底还是不够深,如果有人晓得,烦请告知原因,实在是没有精力挖那么深啊
posted @ 2008-09-02 16:57 深渊野鱼 阅读(60) | 评论 (0)编辑
因为一个客户要把虚拟主机转成另外一种类型 ,结果需要转移服务器,迁移到另外一台机器,log4net死活生成不了日志,并且sqlite的写入一直是失败的。后来查了下,肯定是权限缺失。比如asp.net无法写入,后来让虚拟主机的技术支持把权限设置成完全,才彻底搞定。不过他们公司有一台服务器死活就是不行,这个也够汗的,或许那台服务器死活就是要和我作对。。。

另外不晓得为什么公司服务器最近权限更改后,log4net日志怎么都没法子写入.........
posted @ 2008-08-07 15:22 深渊野鱼 阅读(81) | 评论 (0)编辑
这几天新装的系统,把一应齐全都给装了,norton 360safe U盾 开发软件,还有一堆乱七八糟的软件。
貌似没有问题的情况下,做了一个ghost.
没想到这两天,发现输入东西的时候,当前窗口的焦点老是丢失,哇咔咔,以前曾经碰到问题是由于杀毒软件引起的,
于是乎决定试着把罪怪到norton.不料删除的时候,建欣说他好像也遇见过,似乎是一个叫hhukcert的进程引起的,于是咔嚓了那个进程,没问题了。5555,norton已经没法子停止删除。哎,只能再次装了,再次更新病毒库。消耗了一个小时。
这个罪魁祸首的hhukcert就是工行U盾的华虹的驱动带的,想起来一个堂堂的中国工行下的人做出来的程序居然没测试通过就发布,极大的损害了我们对工行的信任。
于是乎,系统重启后,把hhukcert的服务给关了,下次要用U盾的时候再打开即可~~。
工商银行做出来也不保障,失败啊,失败啊。
posted @ 2008-07-22 22:32 深渊野鱼 阅读(157) | 评论 (0)编辑
iframe是一个一个的打开
有时候客户有不同的要求,就必须得用iframe
但是iframe的打开速度实在是那个慢啊,后来搜搜搜,终于发现终极之道-javascipt在body 的onload的时候指定frame的location,发现速度快的不是一般的多.
for example:
 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2<html xmlns="http://www.w3.org/1999/xhtml">
 3<head>  
 4  <script language="javascript" type="text/javascript">
 5        function bodyLoad()
 6        {
 7            mp3.location ="mp3.htm";
 8            myblog.location ="Default.aspx";
 9        }

10    
11    </script>
12
13</head>
14<body onload="bodyLoad();">
15    <iframe border="0" name="mp3" scrolling="no" marginwidth="0" framespacing="0" marginheight="0"
16        frameborder="0" noresize width="100%" height="77px" vspale="0" allowtransparency>
17    </iframe>
18    <iframe border="0" name="myblog" scrolling="no" marginwidth="0" framespacing="0"
19        marginheight="0" frameborder="0" noresize width="100%" height="1200" vspale="0"
20        allowtransparency></iframe>
21</body>
22</html>
posted @ 2008-05-06 14:48 深渊野鱼 阅读(251) | 评论 (1)编辑
 如何向远程系统提交命令?
解答 我们知道,在分布式数据处理的环境下,对远程系统上文件内容的操作可以有很多方式,但是如果想简单地在本地对远程系统进行文件管理方面的操作,则可以由一条命令实现:SBMRMTCMD。现在介绍该命令的用法:

1. 首先确保双方系统上的分布式处理服务已启动:
STRTCPSVR SERVER(*DDM)

2. 为目标系统创建DDM文件:
CRTDDMF FILE(Lib/TESTAAA) RMTFILE(Lib/AAA) RMTLOCNAME(s102rncm *IP)
其中:TESTAAA是DDM文件名; AAA是远程系统s102rncm上要操作的文件的名称。

3. 在本地系统上运行文件管理方面的命令,例如:撤消用户USERBBB对文件AAA的所有权限:
SBMRMTCMD CMD('RVKOBJAUT OBJ(LIB/AAA) OBJTYPE(*FILE) USER(USERBBB) AUT(*ALL)') DDMFILE(LIB/TESTAAA)
这样,我们就能很方便地在本地系统上,实现远程系统上文件操作方面的管理。
posted @ 2008-01-09 15:14 深渊野鱼 阅读(174) | 评论 (0)编辑
 RUNRMTCMD命令使用
解答 能够向client access发送命令的系统包括AS/400,VM,AIX以及其他版本的UNIX。

发送的命令应当预先在PC的DOS窗口运行,如果有输出,在把输出内容传送到OS/400并产生相应的spool file(QSYSPRT,使用的print file为QSYSPRT);如果命令本身并不产生输出则也会产生一个spool file,内容是无输出。

从OS/400使用RUNRMTCMD命令性client access发送远程命令。PC端可以同时处理多个命令请求,按接收的顺序运行这些命令。

入局远程命令的目的是运行非交互式命令和程序。交互式命令或WINDOWS程序可以运行,并且看起来好象已经从请求系统运行成功,但可能仍在PC运行并等待与用户进行人机对话。

入局远程命令可以使用TCP/IP和SNA,不适用于IPX。

CWBRXD.EXE 用于使用TCP/IP通信时启动入局远程命令精灵程序。
CWBRXDSD.EXE 用于使用TCP/IP通信时停止入局远程命令精灵程序。
AREXECDW.EXE 用于象PCOM那样的WINCPIC兼容栈
AREXECDN.EXE 用于NetSoft栈

语法:
RUNRMTCMD CMD(’pc 命令‘)
----RMTLOCNAME('xxx.xxx.xxx.xxx' *IP)
----RMTUSER(remote user-id)
----RMTPWD(xxxxxx)
----CCSID(pc ccsid)

其中RMTUSER必须时PC上设定的有效用户[注1]。
如果用户和密码有小写,则必须用单引号',否则全部转换成大写处理(NT是大小写敏感的)。
CCSID必须和PC端操作系统的语言相匹配,例如中文Win98、中文NT为1381,而英文Win98、英文NT为437。(用CHCP这个DOS命令看到的PC语言代码不十分可靠)

APPC格式:
RUNRMTCMD CMD(’pc 命令')
----RMTLOCNAME(appn.系统名 *SNA)
----RMTUSER(远程用户 ID)
----RMTPWD(‘口令’)
----CCSID(pc ccsid)

例:
RUNRMTCMD CMD(‘dir c:\/w') RMTLOCNAME('4.17.19.95' *IP) CCSID(437)
要求PC使用英文Win98,并且不需要用户和口令。

RUNRMTCMD CMD('copy c:\config.sys c:\config.bak') RMTLOCNAME('7.19.19.93' *IP)
RMTUSER(MOKCK) RMTPWD('ibmas400') CCSID(437)
spool file结果为’1 file copied'.

ADDJOBSCDE JOB(MYJOBD) CMD(RUNRMTCMD CMD("c:\mydir\daily.bat')
RMTLOCNAME(APPN.PC01 *SNA)) FRQ(*WEEKLY) SCDDAY(*ALL)
SCDTIME(180000)

RUNRMTCMD CMD('c:\progra~1\IBM\RTOPCB c:\MYDATA\MYTFR.TTO')
RMTLOCNAME(YOURNET.PC01 *SNA) RMTUSER(MOKCK)

RUNRMTCMD CMD('c:\windows\calc.exe') RMTLOCNAME(MYPC *IP) CCSID(437)
PC端的计算器会被激活,同时400端出现pending(等待),直到把PC端计算器关闭,400端作业才被释放。

[注1]
CHGPRTF FILE(QSYSPRT) IGCDTA(*YES)
在中文DBCS环境下运行RUNRMTCMD命令时,必须使得spool file的打印摸板QSYSPRT支持DBCS。
[注2]
在NT上运行RUNRMTCMD时必须指定要运行程序的全称路径,默认路径是C:\

用户设定:
在Win98端

默认情况下PC端没有任何关于‘入局远程命令的’设置。单击‘添加’

系统和用户支持*通配符。
系统名应当和DSPNETA中指定的系统名相同,用户则可以任意设置。
第2步:

如果不使用WIN95口令高速缓冲,则必须指定client access入局远程命令。

在NT中把登录client access入局远程命令的管理全部委托给NT的安全管理程序来管理,但要求有效的用户名不能超过10个字符。

启动入局远程命令:
Win98平台运行 c:\windows\cwbrxd.exe
NT把入局远程命令放到[control]==>[service]中,使用start即可激活。

停止入局远程命令:
Win98平台运行 c:\windows\cwbrxdsd.exe
NT把入局远程命令放到[control]==>[service]中,使用stop即可停止。


失败原因检查:

1、执行RUNRMTCMD调用NT端应用,返回‘无效的密码或用户’
检查该用户在NT上是否存在。
RUMRMTCMD中该用户的password是否大小写正确,是否使用了单引号。
在Win98上最好使用system = *,user=*的基本配置

2、RUNRMTCMD返回‘客户端没有启动’
检查RUNRMTCMD在PC端的server精灵程序是否已经启动。

3、SNA,anynet也可以使用RUNRMTCMD

4、如果NT支持GUEST 用户而且没有口令,则RUNRMTCMD时可以设置PWD(*NONE)。

5、在中国5250键盘的仿真中,\被解析成Y(人民币符号),无法通过客户化键盘的方式进行
修正,但在VT100的模式下可以不受影响。
posted @ 2008-01-09 15:13 深渊野鱼 阅读(293) | 评论 (0)编辑
 OS/400与UNIX功能相似的部分命令
解答 对于大多数SAP的用户,比较习惯UNIX及WINDOWS命令,而对于OS/400的命令缺少使用经验,这里结合SAP系统经常用到的命令,比较OS/400与UNIX功能相似的命令及其格式。

1.与文件系统有关的命令:

unix命令 对应的AS/400的命令
--------------------------------------------
cd ------CD (后跟路径名用单引号括起来)
ls ------WRKLNK
ls -l ---WRKLNK 命令,再用8,9或12选择项
more ----DSPSTMF
tail ----DSPSTMF 并按F17功能键
vi ------EDTF
cp ------CPY (拷贝的目标文件必须不存在)
mv ------MOV (目标文件必须不存在)
ren -----REN
rm ------DEL 删除文件;RD 删除目录
chgmod --CHUAUT
mount/ln ADDLNK
bdf -----WRKSYSSTS 或WRKDSKSTS查看存储空间

2.与进程有关的命令:

unix命令 对应的AS/400的命令
--------------------------------------------
ps ------WRKACTJOB 用来查看系统上所有的作业,WRKUSRJOB用来查看某个用户的作业;WRKSMBJOB *JOB 查看用户提交的所有作业
kill -9 -ENDJOB OPTION(*IMMED) LOGLMT(0)
执行程序 -CALL PGM(程序) PARM('参数')
程序& ---SMBJOB
exit ----SIGNOFF ENDCNN(*YES)

3.与用户有关的命令:

passwd - CHGPWD用来修改自己的口令;CHGUSRPRF用来修改指定用户的口令

4.其它命令:
ftp ------FTP
telnet ---TELNET
ping -----PING
sqlplus --strsql 或SQLUTIL
posted @ 2008-01-09 15:08 深渊野鱼 阅读(232) | 评论 (0)编辑

编辑---键盘---自定义
          定制---点C--功能:编辑复制 --〉到CTRL
               点V--功能:编辑粘贴 --〉到CTRL
保存,然后指定键盘的方式

posted @ 2008-01-09 15:07 深渊野鱼 阅读(176) | 评论 (0)编辑
 1.ShareODP:
在PF或者LF编译的时候,有个SHARE(Share Open Data Path)的参数,控制该文件是否共享其打开路径。
如果指定SHARE为*NO的话,程序在每次打开一个文件的时候,都会为该文件建立一次访问路径;如果指定SHARE为*YES的话,程序在第一次打开该文件的时候,系统建立该文件的访问路径,在同一个ActiveGroup中再打开该文件时,就不再重新建立该文件的访问路径,而是共享使用之前建立的路径,从而提高了程序运行的速度。
一般在编译的时候该参数设置为*NO,即不是共享打开。在需要共享打开的时候,使用OVRDBF对该参数进行更改。

使用ShareODP需要注意的一些东西:
1).由于在不同的ActiveGroup之间不能ShareODP,所以如果几个程序在编译的时候没有加入到同一个ActivationGroup中,ShareODP就不会有什么效果。
2). 如果PGMA打开FILEA并定位到了第一条记录,然后PGMA调用PGMB;PGMB也打开了FILEA并直接读FILEA,将读到第二条记录; PGMB运行完后PGMA又继续读FILEA下一条记录,此时它读到的将是第三条记录。而如果没有ShareODP的话,PGMA两次读到的会是第一条和第二条记录,PGMB读到的会是第一条记录。

ActiveGroup:
在CRTPGM 的时候,有个参数ACTGRP(ActivationGroup),控制该PGM在运行的时候属于哪个ActiveGroup。如果指定*NEW,则该 PGM会重新建立一个ActiveGroup;如果指定为*CALLER,则该PGM会与调用它的PGM使用同一个ActiveGroup。

2.UserOpen:
RPG程序在使用F表引用外部文件的时候,有一个KeyWords是USROPN。
在没有使用USROPN的时候:系统会在每次运行该程序的时候自动打开所引用的文件;一般可以通过设置*LR为*ON来自动关闭文件,但是如果是SubProcedure,系统不会自动关闭所打开的文件。
如果指定了USROPN:则系统不再控制文件的打开与关闭,由用户手工进行文件的OPEN与CLOSE;如果一个模块已经打开还没有关闭文件的情况下,该模块将不能再对该文件做打开的操作。
USROPN比系统自动打开文件要慢一些。在打开同一个文件5000次的情况下,USROPN使用了400毫秒,系统自动打开只用了4毫秒。

使用UserOpen需要注意的一些东西:
1).在OPEN之前最好使用 %OPEN(FileName) 检查要打开的文件是否已经打开,如果没有打开再执行OPEN的操作。
2). CLOSE *ALL的命令可以关闭本模块打开的所有文件。如果一个文件没有指定为USROPN,Close *ALL也将关闭该文件。并且如果该模块是不参与RPG Cycle的程序,如一个SubProcedure,则在第二次运行本模块的时候,该文件将不会再自动打开,此时如果再对该文件做操作,就会出错。所以最好指定文件名来CLOSE,并注意只关闭USROPN的文件。
posted @ 2008-01-09 15:07 深渊野鱼 阅读(126) | 评论 (0)编辑