2006年11月9日
摘要: 检查宏定义
WIN32
_DEBUG
_WINDOWS
_USRDLL
阅读全文
GDB笔记
概览
基础
用户态会话
调试模式
3种调试已有进程
gdb exe
.
gdb –args exe [args]
.
gdb
file exe
run [args]
.
gdb –args gcc a.c -o a
命令行参数
show args
set args 多次运行设置命令行参数
环境变量和执行路径
path directory
.
show paths
.
show environment [varname]
.
set environment varname[=value] 清除或者设置环境变量
工作目录
继承进入gdb工作目录
改变工作目录
cd dirctory
显示路径
pwd
输入输出
info terminal
run > a.txt
tty /dev/ttyb
远程调试可用这些辅助。
inferior 下层 多个进程调试
inferior gdb维护的一系列对象,每个inf对应一个调试目标进程。
info inferior 显示下层信息
NULL 程序没有跑或者已经终止
clone-inferior -copies 2 复制当前下层2份
(gdb) info inferiors
Num Description Executable
* 1 process 10087 /home/gao/code/a
(gdb) clone-inferior -copies 2
Added inferior 2.
Added inferior 3.
(gdb) info inferiors
Num Description Executable
3 程序没有跑或者已经终止 /home/gao/code/a
2 /home/gao/code/a
* 1 process 10087 /home/gao/code/a
(gdb)
切换下程
inferior 2 切换2这个下程。
进程号是0,没开始运行。
run 运行起来。
.
增加一个运行下层
add-inferior -exec executeable 增加一个运行下层
比如说调试一个服务端程序,一个客户端程序。
remove-inferior n 删掉一个下层
detach inferior 继续运行 quit
kill inferior 调试进程退了,但是inferior纪录还在。
Tab 帮助
(gdb) remove-
remove-inferiors remove-symbol-file
(gdb) remove-
remove-inferiors remove-symbol-file
(gdb) remove-
file 命令
file a.exe 可自行文件和符号文件是一个文件
可自行文件和符号文件分开
exec-file 指定目标文件
.
symbol-file 指定符号文件
run 开始运行
可以支持 run > >> < 重定向
set args 清理命令行参数
附加到进程
gdb –pid= pid
attach pid
终止调试进程
detach pid 分离进程继续运行
.
quit 进程退出
.
q
ctrl
+ D
执行控制
断点
软件断点
break 普通
tbreak 一次性
rbreak 正则表达式一批断点
- 基于cpu断点指令,x86 int3机器码0xcc。
- 替换断点位置的指令
- CPU自执行这里触发断点异常。
- 没有断点数量限制。
硬件断点
- 基于cpu调试寄存器,dr0~dr7,数量限制。x86可以设定4个断点。数量限制。
- 不修改代码,在只读内存上设置断点。EEPROM上的代码设置。
- 有数量限制。
location
- 行号
- -/+ 偏移
- 文件名 :行号
- 函数名
- 函数:标号
- 文件名:函数
标号
- -source linename
- -function function
- -label label
-line number
- address location
break * address
实践
file banner
b main 中断在main函数
info funciton useage 显示useage函数地址
info *0x88888e4 直接写地址设定断点
info b 显示所有断点
list usage 显示useage函数
b line.c:11
b +2 当前显示到14行+2行所以设定在17行
虚拟机设定硬件断点会失败.
(gdb)hbreak hd_ioctl
(gdb) info b
物理机可以设定.
(gdb) hbreak v
Hardware assisted breakpoint 2 at 0x40053a: v. (2 locations)
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y
breakpoint already hit 1 time
1.1 y 0x000000000040054f in main at a.c:10 inf 1
1.2 y 0x000000000040054f in main at a.c:10 inf 2
2 hw breakpoint keep y
2.1 y 0x000000000040053a in v at a.c:4 inf 1
2.2 y 0x000000000040053a in v at a.c:4 inf 2
(gdb)
管理断点
info b 显示断点
delete 1 删除
disable 1
enable 1
delete 删除所有的断点
clear sum 删除sum函数入口的所有断点
扩展断点
watchpoint 监视一个表达式,值变化中断。
watch a*b+c/d
watch *( int * )
watch fd 监控局部变量fd
c 继续运行
info b //
注意,x86硬件调试,写操作,执行过这一行,gdb显示下一行,要看上一行。hw watchpoint,在x86平台wachtpoint基于硬件实现,其他平台可能是基于软件实现。 vc6纯软件执行,执行目标速度低。
执行位置超过当前区域,无效监视点会被删除。
访问监视点
rwatch 读停下来。
awatch 读或写停下来。 awatch fd
watch -l
b hd_ioctl thread 1
info threads 带* 当前线程
繁忙函数解决方案
b hd_ioctl thread 1 if fd > 0
当断点,断了后执行命令
()command 12
()silent
()print “fd is %d\n”,fd
()continue
()end
动态ping不修改代码。
tracepoint 远程主机通讯调试,前端stub立刻恢复执行,但会记录下来。
catchpoint
执行控制
进入子函数内部。单步 step
汇编 stepi
stepi 4
类似nexti
不要进入子函数
next
继续执行
continue
跑起来直到3号断点命中
until 3
跑起来直到3号断点命中,快捷禁止其他断点。
恢复执行直到函数返回。
finish
调用函数!
gdb 杜撰代码调用函数。
call sum(1,2) …
强制返回
强制main函数 return。
return 1
触发中断
异常或断点进入调试器。
调试器发起中断,让程序中断下来。ctrl+C,app收到中断信号,进入调试器。
符号
调试器读区 调试符号。
二进制-调试符号-源码
linux dwarf 存储调试符号信息。gcc
readelf -h filename
里面如果有line location debug标示
readelf -w 导出调试文件
gcc -g 才能输出符号
ubuntu 符号服务器
< ddebs.ubuntu.com/pool/main/>
分离操作
strip
安装ubunte的linux 内核符号
https://askubuntu.com/questions/197016/how-to-install-a-package-that-contains-ubuntu-kernel-debug-symbols
安装libc符号
dpkg -s /lib/x86_64-linux-gun/libc-2.15.so
dpkg -s libc.so.6
sudo apt-get -c aptproxy.conf install libc6-dbg
libc 调试符号
sudo apt-get install libc6-dbg
符号路径
gdb 使用file 或 symbol-file 加载符号文件
自动搜索 path 路径
(gdb)i share
* 共享库没调试信息
搜索符号
info vaiables regex 类名/函数名/变量名
内存地址与符号互换
info addriess 函数名
info symbol 地址
(gdb) info address main
Symbol “main” is a function at address 0x400547.
(gdb) info symbol 0x400547
main in section .text of /home/gao/code/a
.
info os
查看加载的文件内存位置
info files
列出全局变量
info variable
info va
显示源码
list
list -
dir 源码路径
show dir
常用命令源码
安装系统工具源码和调试
apt-get source coreutils
sudo apt-get install coreutils-dbgsym
gdb /bin/ls
list main
dir ~/src/coreutils-7.4/src
list main
libc
sudo apt-get source libc6-dev
/home/ge/eglibc-2.15
dir 搜索路径 :分割
$cdir 编译路径
cwd 当前工作路径
查看调试目标
观察寄存器
info reg
栈
子函数返回地址
函数参数
局部变量
bt n 观察函数返回地址
frame n 切换栈帧
up n
down n
info frame [address]
info args
info locals
注意,切换栈帧之后可能会发生,本地变量值不准确,因为值存在寄存器中需要小心。
观察内存
print
p /f 表达式 表达式要打印位置
xduotcf
x
x /Nuf
N 打印几个单元
u 每个单元大小 b-1byte w-2byte h-4byte g-8byte
f s字符串i指令格式
x/s 0xfffff81946000 打印字符串
x /32bx arg bit 16禁制
(gdb) x /32bx &i
0x7fffffffc76c: 0x01 0x00 0x00 0x00 0x70 0x05 0x40 0x00
0x7fffffffc774: 0x00 0x00 0x00 0x00 0x40 0xfa 0xa2 0xf7
0x7fffffffc77c: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
0x7fffffffc784: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
(gdb)
p arg[0]
p arg[i]
p *&a[0]@10 a0数组开始的10个元素
反汇编
disas main main反汇编代码
x/5i schedule 这个地址开始的5条汇编指令。
gdb mov 从左往右赋值at&t汇编。
高级技巧
信号
stop 要不要中断下来看
printf 打印信息
pass 要不要传递给应用程序。
- handle 修改规则
handle signal act
print
noprint
stop
nostop
pass
nopass
handle SIGPIPE 不要中断下来,打印一个信息,网络程序常用
(gdb) handle SIGPIPE nostop
Signal Stop Print Pass to program Description
SIGPIPE No Yes Yes Broken pipe
Thread
info threads
LWP-light weight process 线程编号。
* gdb当前线程
切换当前线程
thread 2
打印所有线程
thread apply all bt 针对一群线程的命令避免切换来看。
线程改名字
thread name [name]
我自己经验 LWP 可以很好的观察线程负载情况。
摘要: 绘图控件重绘->其他操作->绘图控件重绘
进入了这样一个死循环,函数堆栈空间分配不足够.
阅读全文
eclipse 配置遇到 object 找不到问题 ?The type java.lang.object cannot be resolved - Eclipse buildpath not working
因为替换了 jvm版本.
解决办法: build->library -> add library->add jre library.tomcat部署问题.?1.清理 部署 重启. 2.先删掉部署项目,可以重新配置config.tomcat 找不到oracle 驱动程序?Tomcat error: java.sql.SQLException: No suitable driver found for jdbc
catalina_home/lib 中已经放入了jar文件后还是报错.请在 context.xml 中配置 <WatchedResource>WEB-INF/web.xml</WatchedResource>
<ResourceLink global="jdbc/oracle" name="jdbc/oracle" type="javax.sql.DataSource"/>
在 server.xml <Resource
name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@10.243.140.111:1521:test"
username="core"
password="core"/>
eclipse 项目属性, web deployment assembly设置 source: /webcontent deploypath: /
tomcat 开启gzip压缩
http://blog.csdn.net/hbcui1984/article/details/5666327
Setting property 'source' to 'org.eclipse.jst.jee.server 这个不是问题.
解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题.
http://blog.csdn.net/foreversilent/article/details/11147847
测试代码的locality。
数组的读区方式不同,按照行读,被cache也是按行连续加载的。
如果按照列读区,那么效率很低,除非cache足够大,而且也要遍历所有的数据,并且cache hash算法也好,实现的硬件还是多路组相联的cache硬件实现。
** valgrind --tool=cachegrind ./test2**
code1:
#include <stdio.h>
#define MAXROW 8000
#define MAXCOL 8000
int main () {
int i,j;
static int x[MAXROW][MAXCOL];
printf ("Starting!\n");
for (i=0;i<MAXROW;i++)
for (j=0;j<MAXCOL;j++)
x[i][j] = i*j;
printf("Completed!\n");
return 0;
}
code2:
#include <stdio.h>
#define MAXROW 8000
#define MAXCOL 8000
int main () {
int i,j;
static int x[MAXROW][MAXCOL];
printf ("Starting!\n");
for (j=0;j<MAXCOL;j++)
for (i=0;i<MAXROW;i++)
x[i][j] = i*j;
printf("Completed!\n");
return 0;
}
```
##结果
Command: ./test1
Starting!
Completed!
I refs: 905,721,688
I1 misses: 4,177
LLi misses: 2,808
I1 miss rate: 0.00%
LLi miss rate: 0.00%
D refs: 514,830,867 (386,118,735 rd + 128,712,132 wr)
D1 misses: 4,025,828 ( 23,565 rd + 4,002,263 wr)
LLd misses: 4,008,456 ( 6,997 rd + 4,001,459 wr)
D1 miss rate: 0.8% ( 0.0% + 3.1% )
LLd miss rate: 0.8% ( 0.0% + 3.1% )
LL refs: 4,030,005 ( 27,742 rd + 4,002,263 wr)
LL misses: 4,011,264 ( 9,805 rd + 4,001,459 wr)
LL miss rate: 0.3% ( 0.0% + 3.1% )
gcc -o test2 test2.c
** valgrind --tool=cachegrind ./test2**
I refs: 905,720,801
I1 misses: 4,113
LLi misses: 2,811
I1 miss rate: 0.00%
LLi miss rate: 0.00%
D refs: 514,830,348 (386,118,427 rd + 128,711,921 wr)
D1 misses: 64,025,705 ( 23,462 rd + 64,002,243 wr)
LLd misses: 4,016,427 ( 6,977 rd + 4,009,450 wr)
D1 miss rate: 12.4% ( 0.0% + 49.7% )
LLd miss rate: 0.8% ( 0.0% + 3.1% )
LL refs: 64,029,818 ( 27,575 rd + 64,002,243 wr)
LL misses: 4,019,238 ( 9,788 rd + 4,009,450 wr)
LL miss rate: 0.3% ( 0.0% + 3.1% )
Starting!
Completed!
```
参考:
valgrind调试CPU缓存命中率和内存泄漏
http://laoxu.blog.51cto.com/4120547/1395236
摘要: <未完成>
容错系统的研究.
豆瓣可以搜索几本书.
阅读全文
摘要: wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O $HOME/.dircolors
echo 'eval $(dircolors -b $HOME/.dircolors)' >> $HOME/.bashrc
. $HOME/.bashrc
阅读全文
摘要: typedef struct AA
{
AA * ptr;
}AA ;
阅读全文
摘要: EXEC sp_configure 'remote query timeout', 0 ;
GO
RECONFIGURE ;
GO
阅读全文
摘要: 1. 用户提交
2. 有1/3重做日志缓冲区未被写入磁盘
3. 有大于1M的重做日志缓冲区未被写入磁盘
4. 每隔3 秒钟
5. DBWR 需要写入的数据的SCN大于LGWR记录的SCN,DBWR 触发LGWR写入。
阅读全文
摘要: time dd if=/dev/zero bs=1024 count=1000000 of=./1Gb.file
dd if=./1Gb.file bs=64k |dd of=/dev/null
dd if=./1Gb.file bs=1MB |dd of=/dev/null
阅读全文
摘要: mac为什么主机名.local
搞不清楚为什么.也许区分本地网络,进程间通讯优化? 为了程序方便 /ect/hosts 添加127.0.0.1 指向主机名.
sudo vim /etc/hosts
阅读全文
摘要: #ifdef WIN32
WSADATA wsa_data;
WSAStartup(0x0201, &wsa_data);
#endif
阅读全文
摘要: 在windows上编译openssl 和 libevent.
libevent-2.0.22-stable
openssl-1.0.2c
阅读全文
libevent windows构建
warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突
问题原因:
exe 是debug版本.
静态库是release版本.
编译libevent
C:\dev\mylibevent\libevent-2.0.22-stable>nmake /f Makefile.nmake
原来的修改 relase 版本多线程静态库 CFLAGS= /MT
编译的时候需要配置合适的线程库
拷贝出一个Makefile_D.nmake 多线程debug静态库
CFLAGS= .... /MTd
工程中链接对应的版本的lib文件.
参考:
https://msdn.microsoft.com/zh-cn/library/vstudio/abx4dbyh(v=vs.110).aspx
http://www.cnblogs.com/luxiaoxun/p/3603399.html
http://zyan.cc/libevent_windows/
摘要: 高性能Linux服务器构建实战:运维监控、性能调优与集群应用
构建高可用Linux服务器 2
阅读全文
摘要: 1.网络io文件大小未定,作为类库的设计者.
小文件太多,不好.IO性能差.
单个文件太大,如果都用memorybuffer,内存占用会非常的大.
设计者考虑2边的灵活性.
阅读全文
摘要: 8.8.8.8
114.114.114.114
223.5.5.5
223.6.6.6
阅读全文
摘要: xee下载地址
https://code.google.com/p/xee/downloads/detail?name=Xee2.2.zip&can=1&q=
自己开了一个分支
https://github.com/gddg/xee
阅读全文
摘要: 0.1000M 网络.
1.8口交换机
2.支持vlan
3.支持Qos
4.支持端口聚合.
Cisco SG200-08
5.POE 通过网线供电给USB CAM 功能.
阅读全文
Error running 'requirements_debian_libs_install gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool',
showing last 15 lines of /home/gao/.rvm/log/1431136216_ruby-2.2.2/package_install_gawk_libreadline6-dev_libssl-dev_libyaml-dev_libsqlite3-dev_sqlite3_autoconf_libgdbm-dev_libncurses5-dev_automake_libtool.log
sudo:/var/lib/sudo 对非所有者可写(040777),模式应该为 0700
对不起,请重试。
正在读取软件包列表...
正在分析软件包的依赖关系树...
正在读取状态信息...
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
libssl-dev : 依赖: libssl1.0.0 (= 1.0.1f-1ubuntu2) 但是 1.0.1f-1ubuntu2.4 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
++ return 100
++ return 100
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解决办法?
Jumping Into C++ 完整英文版
http://vdisk.weibo.com/s/lFnhClqHrmi
摘要: http://askubuntu.com/questions/50704/sudo-error-is-mode-0777-should-be-0440
阅读全文
摘要: iconv -f gb2312 -t utf-8 20150422_0.log >>a.log
阅读全文
摘要: echo "IRB.conf[:PROMPT_MODE] = :DEFAULT" > ~/.irbrc
或
echo "IRB.conf[:PROMPT_MODE] = :SIMPLE" > ~/.irbrc
阅读全文
摘要: 非常喜欢的一篇文章.介绍了execption c# 设计思路.
阅读全文
摘要: vim ~/.bash_profile
alias ls='ls -F'
alias cls='clear'
alias grep='grep --color=auto'
CLICOLOR="xterm-color"
LSCOLORS="gxfxcxdxcxegedabagacad"
export CLICOLOR LsCOLORS
阅读全文
摘要: 这个终端主题颜色配置很舒服.各种软件对应的主题都有.
http://ethanschoonover.com/solarized/files/solarized.zip
阅读全文
摘要: 技术树概览
http://html5ify.com/fks/#index_内容贡献者
前端文摘:Web 开发模式演变历史和趋势
http://www.cnblogs.com/lhb25/p/web-development-mode-evolve.html
A brief history of web design for designers
http://blog.froont.com/brief-history-of-web-design-for-designers/
阅读全文
摘要: http://tonybai.com/2010/12/14/create-libraries-with-libtool/
使用 GNU Libtool 创建库
https://www.ibm.com/developerworks/cn/aix/library/1007_wuxh_libtool/
阅读全文
摘要: Git Community Book 中文版
http://gitbook.liuhui998.com/1_1.html
台湾ihower写的
https://ihower.tw/git/
阅读全文
摘要: Ruby on Rails 實戰聖經
https://ihower.tw/rails4/
笨方法學 Ruby
http://lrthw.github.io/
阅读全文
摘要: brew install coreutils
gun tools 替换掉osx
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
阅读全文
摘要: 下载key替换工具 karabiner
control_L to command_L
option_R to delete
FN 键盘+F1 F2 如果你想替换成直接按F1就调用的话,可以macosx 键盘里面找到。发现FN键盘无法移到别的键上。
目前还没看出来mac上option,control 键的原生用途。
键程和windows很不一样。
阅读全文
摘要: brew install libtool
brew install autoconf
brew install automake
glibtool --help
sh autogen.sh
./configure
make
make check
阅读全文
摘要: Docroot is: /usr/local/var/www
/usr/local/etc/nginx/nginx.conf to 8080
ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
nginx
阅读全文
摘要: chmod -R 777 /usr/local/
GMac:~ XXXX$ brew install cmake
阅读全文
摘要: pmset -g
sudo pmset -a hibernatemode 3
阅读全文
摘要: Go to System Preferences -> Keyboard -> Keyboard tab -> Modifier keys
Swap the Control and Cmd keys
阅读全文
摘要: 目前知名的mq :
zeromq -- c++ 实现
ActiveMQ
JMS -- java的消息服务,j2ee 各家实现不同
MS Queue --
RabbitMQ
nanomsg
lightq
阅读全文
摘要: Sublime Text 2
安装插件:
https://gitcafe.com/ghosTM55/sublime-config
阅读全文
1.vc 编译
头文件
#include <omp.h
omp_set_num_threads(threadNumber);
#pragma omp parallel default(shared) private(i,riskId)
{
#pragma omp for
}
}
GCC配置
1. 编译
-fopenmp
设定线程数量 export OMP_NUM_THREADS=6
参考
通过 GCC 学习 OpenMP 框架
http://www.ibm.com/developerworks/cn/aix/library/au-aix-openmp-framework/
摘要: SQLnet.ora
DIAG_ADR_ENABLED=OFF
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
阅读全文
摘要: 1.ms sql 的配置
安装了 sql- server2005 express ,安装默认会关闭网络连接的等.需要打开ip:1433端口.
账户密码需要使用,ms sql–server 登录登录.
2.sqlapi 的使用.
正确的sqlapi ++ ms sql server 串
char * dbname = "127.0.0.1\\SQL2005EXPRESS@master";
阅读全文
摘要: typedef unsigned short WORD;
#define WORD unsigned short
冲突
解决办法:
1.因为2个头文件来自不同项目. 修改源文件彻底解决掉这个问题.
2.先后引用位置 .
3.隐藏不必要的 .h文件,只有需要cpp才添加h引用.这样防止不必要的引用.
阅读全文
摘要: 关闭oracle api 异常侦测 sqlnet.ora
DIAG_ADR_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_RESTRICTED=FALSE
阅读全文
打开root 用户
http://www.macx.cn/thread-2051799-1-1.html
http://support.apple.com/zh-cn/HT1528
太难找了,竟然在菜单里,打开root 。
su root
whoami
sudo su
密码不对
Mac OS X:sudo 命令需要非空的管理员密码
c# oledb odbc foxpro driver win 64 驱动不兼容.
解决办法:
c#工程里面选择 x86.
安装foxpro odbc驱动.
Intellij IDEA和Android Studio默认使用JDK6,所以你有如下选择:
1,安装JDK6
2,安装其他版本的JDK,然后修改IDE的指向。
如果选择2,那么修改方式为:
打开应用的.app包,然后在Contents这个目录下,有个文件info.plist,修改JVMVersion这个key对应的value,从1.6*修改为你安装的版本即可。
1 用文本编辑器打开
/Applications/IntelliJ IDEA 13.app/Contents/Info.plist
2 搜索JVMVersion,将其值改为1.7*
3 再次运行应用即可看到应用成功运行
from :
http://www.zhihu.com/question/26086376
摘要: 分析表空间
execute dbms_stats.gather_schema_stats('CORE');
阅读全文
摘要: 1.种方法
#define WIN32_LEAN_AND_MEAN
放在windows.h 之前.
2. 先引入socket2.h文件.
3. 项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义
在其中添加 : WIN32_LEAN_AND_MEAN
阅读全文
linux DNS 设置
sudo vim /etc/resolv.conf
http://www.alidns.com/setup/#linux
wget http://www.alidns.com/static/soft/SetAliDNS.sh -O SetAliDNS.sh && chmod +x SetAliDNS.sh && sudo ./SetAliDNS.sh
卸载
sudo ./SetAliDNS.sh restore
键盘修改
xmodmap -e "keycode 105=Delete"
先确保执行这个. win7 以上才支持 WER windows error report 功能 .
windows 弹出提示框, 然后进程管理器,右键手工导出也行.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="c:\\"
"DumpCount"=dword:00000030
"DumpType"=dword:00000002
"CustomDumpFlags"=dword:00000000
c++ debug版本 + pdb文件
另外需要注意不是所有情况都生成core.
windows 改了注册表不生成core的原因:
· Debugging dump files of optimized code can be confusing. For example, compiler inlining of functions can result in unexpected call stacks and other optimizations might change the lifetime of variables.
· Dump files from 64-bit machines must be debugged on an instance of Visual Studio that is running on a 64-bit computer.
· In versions of Visual Studio before VS 2013, dumps of 32-bit apps that were run on 64-bit machines that were collected by some tools (such as Task Manager and 64-bit WinDbg) could not be opened in Visual Studio. This limitation has been removed in VS 2013.
· Visual Studio can debug dump files of native apps from ARM devices. Visual Studio can also debug apps dump files of managed apps from ARM devices, but only in the native debugger.
· To debug kernel-mode dump files in Visual Studio 2013, download the Windows 8.1 Version of Debugging Tools for Windows. See Kernel Debugging in Visual Studio.
· Visual Studio can't debug dump files saved in the older dump format known as a full user-mode dump. Note that a full user-mode dump is not the same a dump with heap.
· To debug with the SOS.dll (SOS Debugging Extension) in Visual Studio, you must install the Debugging Tools for Windows that is part of the Windows Driver Kit (WDK). See Windows 8.1 Preview: Download kits, bits, and tools.
参考:
Collecting User-Mode Dumps --注册表
http://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx
Crash Dump Analysis --- c++ 自己生成dump
http://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx
Use Dump Files to Debug App Crashes and Hangs in Visual Studio
http://msdn.microsoft.com/en-us/library/d5zhxt22.aspx#bkmk_requirements_and_limitations
Attach to Running Processes with the Visual Studio Debugger
http://msdn.microsoft.com/en-us/library/3s68z0b3.aspx
Just-In-Time Debugging in Visual Studio ------- 还没看
http://msdn.microsoft.com/en-us/library/5hs4b7a6.aspx
The Discipline and Method Architecture for Reusable Libraries (2000)
Citations
1489 | The C++ Programming Language - Stroustrup - 1991 |
1437 | Object-Oriented Software Construction - Meyer - 1997 |
861 | Design Patterns - Gamma, Helm, et al. - 1995 |
303 | Purify: Fast detection of memory leaks and access errors - Hastings, Joyce - 1991 |
232 | Rational design process: how and why to fake it - Parnas, Clements - 1986 |
118 | The Art of Computer Programming, Volume 1 - Knuth - 1998 |
89 | Scalable software libraries - Batory, Singhal, et al. - 1993 |
67 | The Library Scaling Problem and the Limits of Concrete Component Reuse - Biggerstaff - 1994 |
57 | Algorithm-oriented generic libraries - Musser, Stepanov - 1994 |
47 | Vmalloc: A general and efficient memory allocator - Vo - 1996 |
37 | Algorithms, 2nd edition - Sedgewick - 1988 |
30 | An Empirical Study of Delta Algorithms - Hunt, Vo, et al. - 1996 |
27 | Empirical measurements of six allocation-intensive C programs - Zorn, Grunwald - 1992 |
19 | Porting Unix to Windows NT - Korn |
19 | Xept: A software instrumentation method for exception handling - Vo, Wang, et al. - 1997
|
18 | Worst case fragmentation of first fit and best fit storage allocation strategies - Robson - 1977 |
17 | libg++, the GNU C++ library - Lea - 1988 |
13 | On the external storage fragmentation produced by first-fit and best-fit allocation strategies - Shore - 1975 |
11 | C Interfaces and Implementation - Hanson - 1997 |
10 | National Standard for Information Systems { Programming Language C. Technical Report X3J11/89{159, ANSI Accredited Standards Committee, X3 Information Processing Systems - American - 1989 |
9 | Ksh - an extensible high level language - Korn - 1994 |
7 | Associative arrays - Koenig - 1988 |
5 | CDT: A Container Data Type Library - Vo - 1997 |
5 | Making a vector Fit for a Standard - Stroustrup - 1994 |
4 | Vdelta: Differencing and Compression - Korn, Vo - 1995 |
4 | Kiem-Phong Vo. Principles for Writing Reusable Library - Fowler, Korn - 1995 |
3 | Practical Reusable Unix Software - Krisnamurthy - 1995 |
2 | Negotiated Interfaces for Software Reuse - Clements, Parnas, et al. - 1992 |
1 | Concrete software libraries - Vo - 1998 |
1 | Sfio: A Buffered I/O Library. Software---Practice and Experience - Fowler, Korn, et al. - 199
|
#include <sys/stat.h>
long file_length(char *f)
{
struct stat st;
stat(f, &st);
return st.st_size;
}
If you have the file stream (FILE * f):
fseek(f, 0, SEEK_END); // seek to end of file
size = ftell(f); // get current file pointer
fseek(f, 0, SEEK_SET); // seek back to beginning of file
// proceed with allocating memory and reading the file
Or,
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
fd = fileno(f);
struct stat buf;
fstat(fd, &buf);
int size = buf.st_size;
Or, use stat, if you know the filename:
#include <sys/stat.h>
struct stat st;
stat(filename, &st);
size = st.st_size;
relocation error: multiget: symbol _Z23wxHandleFatalExceptionsb, version WXU_2.8 not defined in file libwx_baseu-2.8.so.0
下载地址:
http://www.codeblocks.org/downloads/26
http://sourceforge.net/projects/codeblocks/files/Binaries/13.12-RC1/Linux%20(64bit)/
codeblocks-13.12-1.el5.x86_64.tar.bz2
安装的关键
Note: On RedHat/CentOS 5 and older revisions of 6 (up to 6.2 as far as I know) you need to add repoforge (former rpmforge) to your repolist, to be able to install the needed wxGTK-package. Seehttp://repoforge.org/use for an instruction.
更新yum的源 很重要
http://repoforge.org/use/ 下载对应的rpm
cat /etc/redhat-release
uname –a
wget http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -ivh package-filename
# yum install gcc
# yum install gcc-c++
如果之前失败过 yum erase wxGTK
# yum install wxGTK
然后
]# ls
codeblocks-12.11-1.el6.i686.rpm
codeblocks-contrib-12.11-1.el6.i686.rpm
codeblocks-contrib-devel-12.11-1.el6.i686.rpm
codeblocks-devel-12.11-1.el6.i686.rpm
# rpm -ivh codeblocks*
1. 下载repo文件
下载地址:http://mirrors.163.com/.help/CentOS6-Base-163.repo
2. 备份并替换系统的repo文件
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost ~]# mv CentOS-Base.repo CentOS-Base.repo.bak
[root@localhost ~]# mv /root/CentOS6-Base-163.repo CentOS-Base.repo
3. 执行yum源更新
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@localhost ~]# yum update
yum install gcc gcc-g++ autoconfig automake
参考:
http://blog.csdn.net/dupei/article/details/6428346
http://www.cnblogs.com/magialmoon/archive/2013/05/05/3061108.html
sqlplus 外面执行正常.
tomcat调用老有问题.多调用几次久正常.
可能是包中的全局变量引起的.
If so, that's because your package is stateful:
The values of the variables, constants, and cursors that a package declares (in either its specification or body) comprise its package state. If a PL/SQL package declares at least one variable, constant, or cursor, then the package is stateful; otherwise, it is stateless.
When you recompile the state is lost:
If the body of an instantiated, stateful package is recompiled (either explicitly, with the "ALTER PACKAGE Statement", or implicitly), the next invocation of a subprogram in the package causes Oracle Database to discard the existing package state and raise the exception ORA-04068.
After PL/SQL raises the exception, a reference to the package causes Oracle Database to re-instantiate the package, which re-initializes it...
You can't avoid this if your package has state. I think it's fairly rare to really need a package to be stateful though, so you should revisit anything you have declared in the package, but outside a function or procedure, to see if it's really needed at that level. Since you're on 10g though, that includes constants, not just variables and cursors.
But the last paragraph from the quoted documentation means that the next time you reference the package in the same session, you won't get the error and it will work as normal (until you recompile again).
existing state of packages has been discarded
means, that your Package had some sort of state.
This is caused by a global variable (or constant) stored in your Package Body.
Since the package has already been used in your session, Oracle assumes that this state is relevant for you. Some of these variables might have different values now, and when you recompile the Body, the values are reset.
This exception is thrown, so that your clients know that they can't rely on those variables any more.
You could try to remove all global variables and constants from the Package Body, or close your session and reconnect before calling the package again.
参考:
http://stackoverflow.com/questions/2502722/pl-sql-package-invalidated
http://stackoverflow.com/questions/19376440/ora-06508-pl-sql-could-not-find-program-unit-being-called
监听器配置少了.
lsnrctl
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = XE )
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(SID_NAME =XE )
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
1.安装 vnc-server
找包
http://www.rpmfind.net/linux/rpm2html/search.php?query=libtermcap&submit=Search+...&system=centos&arch=
如果window
vncserver :1
输入密码
vnc登录后
xhost +
解决display问题.
vncserver -kill :1
vnc 如果进入以后3个 提示选择 allow clipboard .
修改/root/.vnc/xstartup文件,把最后一行 twm& 修改成"startkde &" 或者"gnome-session &"
不然的话连接linux时只出现了一个终端编辑器窗口。
exec gnome-session &
oracle 安装
http://blog.itpub.net/7719012/viewspace-1139996
http://lowendtalk.com/discussion/5396/how-to-install-vnc-on-centos
二:使用Xmanager实现xhost挂接图形
http://hi.baidu.com/hanyanlovejoy/item/564ed582accef0efe496e017
删除
:g/.*ABC/m
:g/kernel32/d
:[range]g[lobal]/{pattern}/[cmd] :help :g
vim 查找一个文章段落, 开头字符 结尾字符
/.*#tag1\(.\+\n\+\)\{-}#tag2.*
删除掉 :
g/.*#tag1\(.\+\n\)\{-}#tag2.*/d
这句话\(.\+\n\+\) 采用分组
.\+ .任意字符 + 一个或多个
\n\+ 回车 一个或多个
\+1 或更多
\{-} 0 或更多尽可能少. 任意字符
\n 换行符
为什么 /This\_.*text/ 不可以,因为\_. 是全缓冲区匹配模式的.
概念分组、捕获
http://i.linuxtoy.org/docs/guide/ch26s08.html#id3120909
abc123.456.def
\d{3}表示三个数字,(\d{3}\.)表示三个数字加“.”为一组,{2}表示这一组内容重复两次
参考:
http://vimcdoc.sourceforge.net/doc/pattern.html#search-pattern
^\(.\+\n\)\{-}#.*tag1
http://stackoverflow.com/questions/10076834/multi-line-regex-in-vim-filtering-out-blocks-of-text-in-a-file
Vim 中删除符合条件的行
http://timothyqiu.com/archives/delete-lines-matching-pattern-in-vim/ https://github.com/railsinstaller/railsinstaller-windows/releases
RiskUnit0001.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
obj/Debug/src/RiskUnit0001/RiskUnit0001.o: could not read symbols: Bad value
为什么需要
解决办法编译器已经提示了:recompile with -fPIC
但是我们应该重新编译谁带上这个参数呢?经过我几番折腾,发现如下情况:
1、编译.o文件的时候,没有加参数-fPIC,这问题个在gcc version 3.4.6版本没有发生,可能那个编译器默认都给加上吧。
2、当前程序中有用到某个静态库,那个静态库编译.o文件的时候没有加上-fPIC(静态库其实就是.o文件打包)。补充一点:我发现手写Makefile时即使不加-fPIC也没有这个问题,这一点很郁闷,这个只在用automake工具编译出.a文件时才出现过。
知道原因了,解决办法自然有了,保证你编译.o文件的时候,都加上-fPIC,这样你才能编译出动态库来。
引用
http://hi.baidu.com/duizhe_memory/item/c4ccbb0831a5998d3d42e212
sqlplus "core/core@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.75.1)(Port=1521))(CONNECT_DATA=(SID=itmp)))"
sqlplus core/core@192.168.75.1:1521/itmp
参考一个 :
/***
* ORACLE客户端liunx安装部署说明
*
*/
配置步骤:
1,将本文件夹拷贝到相应的服务器上。
2,配置环境变量如下: 文件夹所在路径(/kfts/tools/oracle)
(永久修改方式)
vi /etc/profile
在文件最后添加:
export LD_LIBRARY_PATH=/kfts/tools/oracle:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_HOME=/kfts/tools/oracle/
export PATH=/kfts/tools/oracle/:$PATH
export TNS_ADMIN=/kfts/tools/oracle/network/admin
之后运行命令生效:
source /etc/profile
relocation error: multiget: symbol _Z23wxHandleFatalExceptionsb, version WXU_2.8 not defined in file libwx_baseu-2.8.so.0
下载地址:
http://www.codeblocks.org/downloads/26
http://sourceforge.net/projects/codeblocks/files/Binaries/13.12-RC1/Linux%20(64bit)/
codeblocks-13.12-1.el5.x86_64.tar.bz2
安装的关键
Note: On RedHat/CentOS 5 and older revisions of 6 (up to 6.2 as far as I know) you need to add repoforge (former rpmforge) to your repolist, to be able to install the needed wxGTK-package. Seehttp://repoforge.org/use for an instruction.
更新yum的源 很重要
http://repoforge.org/use/ 下载对应的rpm
cat /etc/redhat-release
uname –a
rpm -ivh package-filename
# yum install gcc
# yum install gcc-c++
如果之前失败过 yum erase wxGTK
# yum install wxGTK
然后
]# ls
codeblocks-12.11-1.el6.i686.rpm
codeblocks-contrib-12.11-1.el6.i686.rpm
codeblocks-contrib-devel-12.11-1.el6.i686.rpm
codeblocks-devel-12.11-1.el6.i686.rpm
# rpm -ivh codeblocks*
yum install gcc gcc-g++ autoconfig automake
参考:
http://blog.csdn.net/dupei/article/details/6428346
http://www.cnblogs.com/magialmoon/archive/2013/05/05/3061108.html
目标缓冲区 小于 实际缓冲区
char *name = "1234567890";
char name2[6]={0};
memcpy_s( name2 , sizeof(name2) , name, strlen(name));
动态执行失败 (DEBUG ASSERTION FAILED !) 运行库和调试库都会提示出错.
注意: 指针sizeof( 指针 ) = 4
strncpy(name2,name ,sizeof(name) ); 打印name2 1234
strncpy(name2,name ,strlen(name) ); 打印name2 123456IOIPNUUY
优化这个语句,尽量拷贝内容
strncpy(name2,name , strlen(name)>sizeof(name2)? sizeof(name2): strlen(name) );
目标缓冲区 小于 实际缓冲区
strncpy(name2,name ,sizeof(name2)-1 );
sizeof(name2)-1 ------------>让最后一个name2字符留给\0 否则这个字符也被拷贝了.
看一下LINUX下的两个函数的源代码,印象会更加深刻一些
void * memcpy(void * dest,const void *src,size_t count)
{
char *tmp = (char *) dest, *s = (char *) src;
while (count--)
*tmp++ = *s++;
return dest;
}
char * strcpy(char * dest,const char *src)
{
char *tmp = dest;
while ((*dest++ = *src++) != '\0')
/* nothing */;
return tmp;
}
老实讲,这两个函数长得是很帅
参考
http://stackoverflow.com/questions/4593907/difference-between-strncpy-and-memcpy
http://www.cppblog.com/Tim/archive/2011/04/02/143259.aspx
Visual Studio 2008 命令提示
cl /EHsc simple.cpp
参考:
http://msdn.microsoft.com/zh-cn/library/ms235639(v=vs.90).aspx
http://msdn.microsoft.com/zh-cn/library/1370z17c.aspx
Visual C++ 示例应用程序
Visual Studio 2008
其他版本
- 通用示例
-
包含一些示例,这些示例可以在 Visual C++ 的所有版本(包括 Visual C++ 速成版)中使用。
- Visual C++ 2008 中的演练
-
包含一些演练链接,这些演练重点演示了 Visual C++ 的功能。
- STL 示例
-
包含演示标准模板库功能的一些示例。
- ATL 示例
-
包含演示活动模板库 (ATL) 功能的一些示例。
- 编译器 COM 支持示例
-
包含一些示例,这些示例演示 Visual C++ 编译器对 COM 的内置支持。
- 自定义向导示例
-
包含一些示例,这些示例说明如何创建您自己的向导来优化与创建自定义应用程序或添加代码相关的任务。
- 事件处理示例
-
包含一些示例,这些示例演示 Visual C++ 中的事件处理。
- 扩展性
-
包含一些示例,这些示例演示如何扩展 Visual Studio 和 Visual C++。
- 国际示例
-
包含一些示例,这些示例演示如何针对国际市场编写代码。
- 互操作性示例
-
包含一些示例,这些示例演示 COM 和 .NET Framework 之间的互操作性。
- MASM 示例
-
包含一些示例,这些示例演示 Visual C++ 中的 Microsoft Macro Assembler (MASM) 源文件支持。
- MFC 示例
-
包含一些示例,这些示例演示 Microsoft 基础类 (MFC) 功能。
- Windows SDK 示例
-
包含一个示例,此示例演示 Windows 图像获取 (WIA) 应用程序编程接口 (API)。
互操作性示例
http://msdn.microsoft.com/zh-cn/library/wd6032c3.aspx
标准模板库示例
http://msdn.microsoft.com/zh-cn/library/f1dtts6s.aspx
warning MSB8012: TargetPath(C:\dev\APPFF_SQ2\APP\.\Release\APP_SQ1.exe) 与 Linker 的 OutputFile 属性值(C:\dev\APPFF_SQ2\APP\Release\MDU2FF_SQ.exe)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
warning MSB8012: TargetName(MDU2FF_SQ1) 与 Linker 的 OutputFile 属性值(MDU2FF_SQ)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
1> MD .vcxproj -> C:\dev\APPFF_SQ2\APP\.\Release\ .exe
project name 修改名字.
另外工程配置,链接生成--->输出文件统一.
摘要: 一般来说,如果你不是MFC工程,需要引用HANDLE的话, 最好自己将其类型改为void*,比如,你本来变量的类型为HANDLE, 你把它改为void*就可以了。 -------------------------------------------------------------------------------- ...
阅读全文
1、工作空间默认
Windows -> Preferrences -> C/C++ -> Editor -> Documentation tool comments
默认为none,修改为Doxygen即可
2、工程特别属性
如果不想设置为整个工作空间的默认属性,可以在工作属性对话框的这里找到:
Project -> Properties -> C/C++ General -> Enable project specific settings
选择Doxygen即可
备忘
发生在析够函数中, vs2010 debug 模式 .
CriticalSection::~CriticalSection(void){
DeleteCriticalSection(&m_CritSect);
}
我开始推测,必须退出section才能delete ?
InitializeCriticalSection(&m_CritSect);
EnterCriticalSection(&m_CritSect);
DeleteCriticalSection(&m_CritSect);
实际上这样退出是可以的.
问题在哪里?
一个回调处理函数类注册到另外一个线程里面.另外一个线程一直有消息推送或者调用其内部函数.
~主类(){
aa->release(); //之前没有这句话 ,内部aa 线程一直在运行 ,可能是排在析构 (DeleteCriticalSection)之后或者之前,损坏了这个变量 m_CritSect
}
这里开始调用 DeleteCriticalSection(&m_CritSect); 并且报错了.
别的项目里面拿来的 .h .cpp
因为本项目未使用预编译头.
但是预编译头这个头文件存在,里面东西很多.
导致很多宏 或者 常量重复定义.
定义成标准头
int main(int argc, char *argv[])
argv[i]
非标准
int main() {
PWSTR cmdLine = GetCommandLineW();
int argc;
PWSTR *argv = CommandLineToArgvW(cmdLine, &argc);
}
//参数使用
if (argc==3)
{
if (strcmp(argv[0], "-e")==0)
{
iMode = 1;
}
else if (strcmp(argv[0], "-d")==0)
{
iMode =2;
}
sInput=argv[1];
sOutput=argv[2];
}
_tmain
Unicode下就是wmain
否则就是main
[参考]
http://stackoverflow.com/questions/16706632/c-tchar-to-stdstring
我老是搞错.
boy.h
class Boy
boy.cpp
Boy g_boy;
使用全局变量
Collection.h
#include “boy.h”
extern Boy g_boy;
似乎更优雅的方式
#ifdef _BOY__HH__
extern Boy g_boy ;
#endif
错误方式: 定义宏根本解决不了这个问题
boy.h
#pragma once
#ifndef _BOY__HH__
#define _BOY__HH__
class boy
Boy g_boy;
#endif
编译错误
1> .obj : error LNK2005: "class class 全局变量名 " (?g_CITSCache@@3VMarketCache@@A) 已经在 XXX.obj 中定义
1> 正在生成非 SAFESEH 映像。
1>D:\XXX.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
等我看了编译原理再来解释.
如何防止循环引用?
A->b->c->A
一直报错,说找不到引用.
2>Quote.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall 某类::某类(char *)" (??0某类@@QAE@PAD@Z),该符号在函数 "public: __thiscall Quote::Quote(void)" (??0Quote@@QAE@XZ) 中被引用
2>Quote.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall 某类::Init(void)" (?Init@某类@@UAE_NXZ)
2>Quote.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall 某类::Kill(void)" (?Kill@某类@@UAEXXZ)
2>Quote.obj : error LNK2001: 无法解析的外部符号 "private: virtual int __thiscall 某类::Run(void)" (?Run@某类@@EAEHXZ)
2>Quote.obj : error LNK2001: 无法解析的外部符号 "private: virtual bool __thiscall 某类::Terminate(void)" (?Terminate@某类@@EAE_NXZ)
2>Quote.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall 某类::~某类(void)" (??1CW
1.使用编译---------> verbose 显示能找到库.
2.可以看到那个方法连接到那个库文件里面的.
3.通过depends 看这个dll暴露出来的方法.
#ifdef EXPORT_API
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
class MY_API MyClass {
...
};
#include <e://testClass.h>
#pragma comment(lib, "//Debug//ServerDLL.lib")
参考
http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL
http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.html
SetBlockMode(false); // NONBLOCK mode
e = connect(m_socket, (struct sockaddr*)&addr, sizeof (addr));
if (e<0) {
e = GET_LAST_SOCK_ERROR(); printf(" socket error code = %d \n",e);
if ((e==EWOULDBLOCK||e==EINPROGRESS || e == WSAEWOULDBLOCK ) && CheckSendAvailable(waitms)>0)
{ e = 0; // 表示连接成功
}
else {
e = -1; // 表示连接失败,或者在等待的时间之内连接失败 }
我临时修改。
if ((e==EWOULDBLOCK||e==EINPROGRESS || e == WSAEWOULDBLOCK ) && CheckSendAvailable(waitms)>0)
WSAEWOULDBLOCK = 10037
问题找到了。
切换到项目配置。平台工具集---->vs2008 连接win sdk 6的库
切换到项目配置。平台工具集---->vs2012 连接win sdk 8 的库
有区别。
正在生成代码...
1> Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1>
1>
1> 正在搜索库
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
1> 正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:
1> 正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1> 正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\libcpmtd.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
1> 正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:
1> 正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1> 正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\libcpmtd.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
1> 正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
1>
1> 已完成库搜索
1> Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1>
1> MDUSJS.vcxproj -> D:\dev\cmd3\cmdsiimdsi\MDUSJS2012\.\Debug\MDUSJS.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
平台工具 连接的库不一样。
> 正在生成代码...
1>dbf.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/SAFESEH”规范)
1>
1> 正在搜索库
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1>
1> 已完成库搜索
1>
1> 正在搜索库
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1>
1> 已完成库搜索
1> MDUSJS.vcxproj -> D:\dev\cmd3\cmdsiimdsi\MDUSJS2012\.\Debug\MDUSJS.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
参考:
ms connect
http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625(v=vs.85).aspx
ioctlsocket function 控制柱塞非柱塞
http://msdn.microsoft.com/en-us/library/windows/desktop/ms738573(v=vs.85).aspx
http://blog.csdn.net/s3olo/article/details/8014872
http://developerweb.net/viewtopic.php?id=7246
代码 windows tcp 通过select方式实现 connect non block
http://bbs.csdn.net/topics/10426810
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
Windows Sockets Error Codes
***************
测试模拟工具发送大数据量消息时,发现时而发送成功,时而失败。追踪代码发现,抛出的是一个错误码为10035的socket错误。上网查资料发现这个错误码描述是Service temporarily unavailable.也就是说有可能send的时候遇到socket缓冲区满,无法写入,引起发送失败。
如果是这样的话,那么这就是一个常规的异常情况,需要对它进行处理,而不是异常退出。
最后代码改成这个样子,send然后分析返回结果,如果错误,且错误码为10035,那么就重发,直到发成功时,break。
目前尚不知道,这样改的副作用有没有,反正现在问题暂时解决鸟
***********************************
Winsock connect函数返回错误,使用WSAGetLastError得到10035,10037,是什么原因
MSDN注释:
WSAEWOULDBLOCK
10035
Resource temporarily unavailable.
This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
WSAEALREADY
10037
Operation already in progress.
An operation was attempted on a nonblocking socket with an operation already in progress—that is, calling connect a second time on a nonblocking socket that is already connecting, or canceling an asynchronous request (WSAAsyncGetXbyY) that has already been canceled or completed.
网络翻译:
10035—WSAEWOULDBLOCK
资源暂时不可用。对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。比如说,在一个非暂停套接字上调用 connect,就会返回这个错误。因为连接请求不能立即执行。
10037—WSAEALREADY
操作已完成。一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。比如,在一个已处于连接进程的非锁定套接字上,再一次调用 connect 或 WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的 Winsock函数)的进程中时,也会出现这个错误。
我描述下问题:使用socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);创建一个TCP/IP套接字,然后创建一个线程,不停地用connect函数进行链接,直到链接成功,才退出线程,问题来了,connect函数它有时候返回成功,有时候又返回错误,用WSAGetLastError得到享受10035, 10037这两种错误值,我将错误值打印出来,结果是:10035,10035,10037,10037,10037,10037,10037.......,10037。
****************************************************************
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET){return 0;}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}
------------------------------------------
// Socket中如何设置连接超时
// AntGhazi/2001.12.14 主页:antghazi.yeah.net
/*
把CSDN与中文yahoo翻了底朝天, 也没找到如何设置socket的连接超时的满意方法, 问此问题的兄弟已有一大堆,
这里偶就讲一下win下如何设置socket的connect超时. 设置connect的超时很简单, CSDN上也有人提到过使用select,
但却没有一个令人满意与完整的答案. 偶所讲的也正是select函数, 此函数集成在winsock1.1中, 简单点讲,"作用使
那些想避免在套接字调用过程中被锁定的应用程序, 采取一种有序的方式, 同时对多个套接字进行管理"
(<<Windows网络编程技术>>原话). 使用方法与解释请见《Windows网络编程技术》.
在使用此函数前, 需先将socket设置为非锁定模式, 这样, 在connect时,才会立马跳过,
同时, 通常也会产生一个WSAEWOULDBLOCK错误,这个错误没关系. 再执行select则是真正的超时.
*/
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(WSAStartup(MAKEWORD(2,0),&wsd))
{
return 0;
}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET)
{
return 0;
}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr.s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE)
{
return 0;
}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec = 0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR)
{
::closesocket (cClient);
return 0;
}
/////////////////////////////////////////////////////////////////
以前我从csdn上找到的,注意如果调用connect返回SOCKET_ERROR,那么你要调用 WSAGetLastError(),看错误是不是WSAEWOULDBLOCK,如果是,则忽略,否则是真的出错了。
-------------------------------------------------------------
这个应该是可以用的,因为我用过,我的代码是这样的,供你参考
LPHOSTENT ScanIPAddr(DWORD dwIP)
{
SOCKET sock = INVALID_SOCKET;
LPHOSTENT lphost = NULL;
SOCKADDR_IN server;
u_long ul = 1;
struct timeval timeout ;
fd_set r;
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = _nPort;
server.sin_addr.s_addr = htonl((u_long)dwIP);
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock == INVALID_SOCKET)
return NULL;
//设置非阻塞方式连接
if(ioctlsocket(sock, FIONBIO, (u_long*)&ul)==SOCKET_ERROR)
return NULL;
if(0 != connect(sock, (SOCKADDR*)&server, sizeof(server)))
{
if(WSAGetLastError() != WSAEWOULDBLOCK)
{
closesocket(sock);
return NULL;
}
}
//select 模型,即设置超时
FD_ZERO(&r);
FD_SET(sock, &r);
timeout.tv_sec = 0; //连接超时0秒
timeout.tv_usec = 700;
if(select(0, 0, &r, 0, &timeout) <= 0)
{
closesocket(sock);
return NULL;
}
lphost = gethostbyaddr((const char *)&(server.sin_addr), 4, AF_INET);
closesocket(sock);
return lphost;
}
-----------------------------------------------------------------------------
下面是我的实现代码:
char sBuf[2048];
int i;
int iSRTimeOut = 6000;
u_long arg=1;
rc4_key key;
int r;
struct sockaddr_in sockaddr;
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock==INVALID_SOCKET)
{
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
return Error(_T(sBuf));
}
//设置接收超时6000毫秒
if(setsockopt(sock,IPPROTO_TCP,SO_RCVTIMEO,(const char FAR*)&iSRTimeOut,sizeof(int))==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
//return Error(_T(sBuf));
}
//设置发送超时6000毫秒
if(setsockopt(sock,IPPROTO_TCP,SO_SNDTIMEO,(const char FAR*)&iSRTimeOut,sizeof(int))==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
//return Error(_T(sBuf));
}
//设置非阻塞连接方式
unsigned long ul = 1;
r = ::ioctlsocket(sock, FIONBIO, (unsigned long*)&ul);
if(r==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
// return Error(_T(sBuf));
}
//进行连接操作
switch (m_ProxyType)
{
case 0:
sockaddr.sin_addr.s_addr=inet_addr(m_SvrAddr);
sockaddr.sin_port=htons((unsigned short)m_SvrPort);
break;
default:
sockaddr.sin_addr.s_addr=inet_addr(m_ProxyAddr);
sockaddr.sin_port=htons((unsigned short)m_ProxyPort);
break;
}
sockaddr.sin_family=AF_INET;
memset(sockaddr.sin_zero,0,8);
int iReturn;
connect(sock,(struct sockaddr*)&sockaddr,sizeof(struct sockaddr_in));
iReturn = ConnectedReady(sock);// 连接延时
if(iReturn == 0)
{
return Error(_T("Connect TimeOut!"));
}
if(iReturn >1)
{
sprintf(sBuf,"Winsock Error:%d",iReturn);
return Error(_T(sBuf));
}
//设置回阻塞模式
unsigned long ul1= 0 ;
r = ioctlsocket(sock, FIONBIO, (unsigned long*)&ul1);
if(r==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket (sock);
sprintf(sBuf,"Winsock Error:%d",r);
return Error(_T(sBuf));
}
说明:进行setsockopt、设置非阻塞模式、一直到最后设置回阻塞模式,都有错误码返回!
功能描述:本来我的程序就是要实现:自己定义一个timeout值,在网络不通或阻塞时,客户端调用connect,最长等待timeout秒。
msn:himming@hotmail.com
---------------------------------------------------------------------
http://www.cnblogs.com/BloodAndBone/archive/2012/05/22/2513338.html
变相的实现connect的超时,我要讲的就是这个方法,原理上是这样的:
1.建立socket
2.将该socket设置为非阻塞模式
3.调用connect()
4.使用select()检查该socket描述符是否可写(注意,是可写)
5.根据select()返回的结果判断connect()结果
6.将socket设置为阻塞模式(如果你的程序不需要用阻塞模式的,这步就省了,不过一般情况下都是用阻塞模式的,这样也容易管理)
// widonws: 默认设置socket TCP client connect为阻塞模式
void TcpConnect(char* strIP, UINT nPort)
{
struct sockaddr_in serverAddress;
SOCKET hSocket = NULL;
hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if( hSocket==INVALID_SOCKET)
{
return;
}
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr(strIP);
serverAddress.sin_port = htons((short)nPort);
int iTimeOut = 3000;
setsockopt(hSocket,SOL_SOCKET,SO_RCVTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));
setsockopt(hSocket,SOL_SOCKET,SO_SNDTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));
if( SOCKET_ERROR==connect(hSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) )
{
closesocket(hSocket);
DWORD gle = WSAGetLastError();
return;
}
char buff[] = "hello";
int sl=::send(hSocket,(char*)buff, sizeof(buff), 0);
if( sl<0 )
{
closesocket(hSocket);
return ;
}
closesocket(hSocket);
}
// widonws: 设置socket TCP client connect非阻塞模式
void SockSelect(char* strIP, UINT nPort)
{
SOCKET/*int*/ sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sockfd < 0)
{
return;
}
struct sockaddr_in serv_addr;
//以服务器地址填充结构serv_addr
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(strIP);
serv_addr.sin_port = htons(nPort);
int error = -1;
int len = sizeof(int);
timeval tm;
fd_set set;
unsigned long ul = 1;
ioctlsocket(sockfd, FIONBIO, &ul); //设置为非阻塞模式
bool ret = false;
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
{
tm.tv_sec = 3;
tm.tv_usec = 0;
FD_ZERO(&set);
FD_SET(sockfd, &set);
if( select(sockfd+1, NULL, &set, NULL, &tm) > 0)
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char *)&error, /*(socklen_t *)*/&len);
if(error == 0)
ret = true;
else
ret = false;
}
else
ret = false;
}
else
ret = true;
ul = 0;
ioctlsocket(sockfd, FIONBIO, &ul); //设置为阻塞模式
if(!ret)
{
closesocket( sockfd );
fprintf(stderr , "Cannot Connect the server!/n");
return;
}
fprintf( stderr , "Connected!/n");
char buff[] = "hello";
int sl=::send(sockfd,(char*)buff, sizeof(buff), 0);
closesocket( sockfd );
}
分类: c/c++, VC++
1. 简单解决问题的方式是
找cpp 缺少 #include "stdafx.h" 添加。并且使用 《预编译选项》
2.被动解决方式
又分为2种方式
1.选择排除 lib 再附加lib nafxcwd.lib LIBCMTD.lib 附加的顺序不一样来操作。
2.另外一种简单的做法 在附加lib处添加 nafxcwd.lib
使用 Client.lib 会出现问题,libc 和mfc的库冲突问题。
这边可以在编译时加lib参数 nafxcwd.lib。但是我项目本身不使用mfc。
。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 libcpmtd.lib(newaop.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
1> 正在创建库 ..\bin\Service.lib 和对象 ..\bin\Service.exp
1>..\bin\Service.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1> 正在搜索库
1> 正在搜索 ../lib/CMDClient.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1> 正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib\uafxcwd.lib:
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1> 正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\msimg32.lib:
MSDN 解决问题链接
http://support.microsoft.com/kb/148652/zh-cn
CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。
回到顶端 | 提供反馈
该问题有两种解决方法。第一种方法是强制链接器按照正确的顺序链接库。第二种方法是由您亲自查找导致问题的模块并纠正它。
注意 以下步骤基于 Visual C++ 6.0。
解决方案一:强制链接器按照正确的顺序链接库
- 在“项目”菜单上,单击“设置”。
- 在“项目设置”对话框的“以下项目的设置”视图中,单击以选中出现链接错误的项目配置。
- 在“链接”选项卡上,单击以选中“类别”组合框中的“输入”。
- 在“忽略库”框中,插入库名(例如,Nafxcwd.lib;Libcmtd.lib)。
注意:等效的链接器命令行是:/NOD:<library name>。
- 在“对象/库模块”框中,插入库名。必须确保这些库按顺序列出,而且是行中的前两个库(例如,Nafxcwd.lib 和 Libcmtd.lib)。
要在 Visual C++ .NET 中设置该选项,请阅读“设置 Visual C++ 项目属性”联机帮助主题。
解决方案二:查找导致问题的模块并纠正它
若要查看当前的库链接顺序,请按照下列步骤操作:
- 在“项目”菜单上,单击“设置”。
- 在“项目设置”对话框的“以下项目的设置”视图中,单击以选中出现链接错误的项目配置。
- 在“链接”选项卡上的“项目选项”框中键入 /verbose:lib。
- 重新生成项目。在链接过程中,这些库将在输出窗口中列出。
回到顶端 | 提供反馈
这种现象是设计导致的。
回到顶端 | 提供反馈
使用 MFC 库时,务必先链接它们,然后再链接 CRT 库。这可以通过确保项目中的每个文件都首先包含 Msdev\Mfc\Include\Afx.h 来完成。
直接包含 ( #include <Afx.h> ) 或间接包含 (#include <Stdafx.h>) 都可以。Afx.h 包含文件会通过使用 #pragma comment (lib,"<libname>") 指令来强制采用库的正确顺序。
如果源文件的扩展名为 .c,或者该文件的扩展名为 .cpp 但不使用 MFC,则可以创建一个较小的头文件 (Forcelib.h) 并将其放在模块的顶端。这个新的头文件可确保按照正确的顺序搜索库。
Visual C++ 不包含该头文件。要创建此文件,请按照下列步骤操作:
- 打开 Msdev\Mfc\Include\Afx.h。
- 选定 #ifndef _AFX_NOFORCE_LIBS 和 #endif //!_AFX_NOFORCE_LIBS 之间的行。
- 将选定部分复制到 Windows 剪贴板。
- 创建一个新文本文件。
- 将剪贴板的内容粘贴到这个新文件中。
- 将该文件另存为 Msdev\Mfc\Include\Forcelib.h。
在 Visual C++ .NET 中重现问题的步骤
- 启动 Microsoft Visual Studio .NET。
- 在“文件”菜单上,指向“新建”,然后单击“项目”。
- 单击“项目类型”下的“Visual C++ 项目”,然后单击“模板”下的“MFC 应用程序”。
- 在“名称”文本框中,键入 Q148652。
- 在“位置”文本框中,键入 C:\Test,然后单击“确定”。
- 在“MFC 应用程序向导”对话框中,单击“应用程序类型”。
- 单击“应用程序类型”下的“基于对话框”,然后单击“MFC 的使用”下的“在静态库中使用 MFC”。
- 单击“完成”。
- 在“解决方案资源管理器”中,选择“源文件”下的全部三个 .cpp 文件。
- 右键单击三个选定的文件,然后单击“删除”。
- 右键单击“源文件”,指向“添加”,然后单击“添加新项”。
- 单击“模板”下的“C++ 文件”。在“名称”文本框中,键入 Aa。单击“打开”。
- 将以下代码粘贴到 Aa.cpp 中:
int test(){new int; return 1;}
- 右键单击“源文件”,指向“添加”,然后单击“添加现有项”。
- 选择以下文件:
- Q148652.cpp
- Q148652Dlg.cpp
- stdafx.cpp
- 单击“打开”。
- 您在第 15 步中选择的文件将出现在“源文件”下。
- 选择“源文件”下的全部四个 .cpp 文件。
- 右键单击选定的四个 .cpp 文件,然后单击“属性”。
- 展开“配置属性”,然后展开“C/C++”。
- 单击“预编译头”。
- 将“创建/使用预编译头”属性设置为“不使用预编译头”。单击“确定”。
- 在“生成”菜单上,单击“重新生成解决方案”。
回到顶端 | 提供反馈
注意:本篇“快速发布”文章是从 Microsoft 支持组织直接创建的。 文中包含的信息按原样提供,用于响应紧急问题。 由于发布仓促,材料可能包含印刷错误,并且可能随时修订,恕不另行通知。 有关其他注意事项,请参阅使用条款。
静态库才会发生。
solution
1. static lib
2.exe windows console client .
3 .setting MDLIB to lib directionary.
设置它本身依赖的dll
4. lib 目录情况
5. main project setting include dir
6. mian link
ok 就可以了。 static lib pdb 就可以编译进 main project 文件里了。
重建了项目!找这个问题花了我2个小时。
或者在编译自己手工改
编译要使用pdb写入。连接需要使用pdb。 静态库最终将合并入exe文件所以pdb文件也需要一起用。
/VERBOSE 会把
MSDN 相关内容
链接
http://msdn.microsoft.com/zh-cn/library/t2fck18t(v=vs.80).aspx
LINK 还使用 PDB 保存 .exe 文件或 .dll 文件的调试信息。程序的 PDB 既是输出文件也是输入文件,因为 LINK 在重新生成程序时更新 PDB。
http://msdn.microsoft.com/zh-cn/library/6y6t9esh(v=vs.80).aspx
link 配置目录。
CL 使用 CL 和 INCLUDE。
生成 C/C++ 程序
在命令行上生成
为命令行生成设置路径和环境变量
NMAKE 参考
运行 NMAKE
生成文件的内容
描述块
生成文件中的命令
宏和 NMAKE
推理规则
点指令
生成文件预处理
VCBUILD 参考
VCBUILD 系统要求
VCBUILD 命令行
VCBUILD 选项
Quote of the Day:
Alcohol, if taken in sufficient quantities, produces all the effects of intoxication.
--Oscar Wilde
参考
pdb多 进程征用
http://www.cnblogs.com/joeylee/archive/2012/12/12/2815210.html
http://hi.baidu.com/vc_net/item/ffd829c4132d0862f6c95d48
http://www.cppblog.com/sunicdavy/archive/2011/08/09/152850.html
他的方法需要xcopy复制。解决4099方法。
http://www.cppblog.com/huyutian/archive/2012/10/06/192930.html
vc 编译选项
http://hi.baidu.com/odzienkvkodvxze/item/88e75cd8f9a06edf251f408e
混合显卡intel + gpu 卡 .
买一个 displaylink 转换卡。
铭鑫 taobao usb3
摘要: class Father
{
public virtual void do1(){
Console.WriteLine("father do1");
}
public virtual void do2()
{
Console.WriteLine("father do2");
}
}
class Son :Father
{
public void do1()
{
Console.WriteLine("Son do1");
}
public override void do2()
{
Console.WriteLi
阅读全文
摘要: select * from tables() ;
function 返回成游标
select function(a) from dual ;
阅读全文
摘要: cmd.CommandText = @"INSERT INTO (
VALUES
(:date_ ) ; ";
阅读全文
SQL*Plus系统环境变量有哪些?如何修改?
软件环境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:\ORANT
实现方法:
show和set命令是两条用于维护SQL*Plus系统变量的命令
SQL> show all --查看所有68个系统变量值
SQL> show user --显示当前连接用户
SQL> show error --显示错误
SQL> set heading off --禁止输出列标题,默认值为ON
SQL> set feedback off --禁止显示最后一行的计数反馈信息,默认值为"对6个或更多的记录,回送ON"
SQL> set timing on --默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能
SQL> set sqlprompt "SQL> " --设置默认提示符,默认值就是"SQL> "
SQL> set linesize 1000 --设置屏幕显示行宽,默认100
SQL> set autocommit ON --设置是否自动提交,默认为OFF
SQL> set pause on --默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页
SQL> set arraysize 1 --默认为15
SQL> set long 1000 --默认为80
说明:
long值默认为80,设置1000是为了显示更多的内容,因为很多数据字典视图中用到了long数据类型,如:
SQL> desc user_views
列名 可空值否 类型
------------------------------- -------- ----
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
SQL> define a = '''20000101 12:01:01''' --定义局部变量,如果想用一个类似在各种显示中所包括的回车那样的常量,
--可以用define命令来设置
SQL> select &a from dual;
原值 1: select &a from dual
新值 1: select '20000101 12:01:01' from dual
'2000010112:01:01
-----------------
20000101 12:01:01
问题提出:
1、用户需要对数据库用户下的每一张表都执行一个相同的SQL操作,这时,一遍、一遍的键入SQL语句是很麻烦的
实现方法:
SQL> set heading off --禁止输出列标题
SQL> set feedback off --禁止显示最后一行的计数反馈信息
列出当前用户下所有同义词的定义,可用来测试同义词的真实存在性
select 'desc '||tname from tab where tabtype='SYNONYM';
查询当前用户下所有表的记录数
select 'select '''||tname||''',count(*) from '||tname||';' from tab where tabtype='TABLE';
把所有符合条件的表的select权限授予为public
select 'grant select on '||table_name||' to public;' from user_tables where 《条件》;
删除用户下各种对象
select 'drop '||tabtype||' '||tname from tab;
删除符合条件用户
select 'drop user '||username||' cascade;' from all_users where user_id>25;
快速编译所有视图
----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,
----因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。
SQL> SPOOL ON.SQL
SQL> SELECT'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB;
SQL> SPOOL OFF
然后执行ON.SQL即可。
SQL> @ON.SQL
当然,授权和创建同义词也可以快速进行,如:
SQL> SELECT 'GRANT SELECT ON '||TNAME||' TO 用户名;' FROM TAB;
SQL> SELECT 'CREATE SYNONYM '||TNAME||' FOR 用户名.'||TNAME||';' FROM TAB;
SQL*PLUS常用命令列表
[ 天堂之水 2002年9月18日,阅读人数36人 ]
软件环境:
1、Windows 98 第二版
2、Oracle数据库版本为:Personal Oracle7 Release 7.3.4.0.0
3、Oracle安装路径为:C:\ORAWIN95
命令列表:
假设当前执行命令为:select * from tab;
(a)ppend 添加文本到缓冲区当前行尾 a order by tname 结果:select * from tab order by tname;
(注:a后面跟2个空格)
(c)hange/old/new 在当前行用新的文本替换旧的文本 c/*/tname 结果:select tname from tab;
(c)hange/text 从当前行删除文本 c/tab 结果:select tname from ;
del 删除当前行
del n 删除第n行
(i)nput 文本 在当前行之后添加一行
(l)ist 显示缓冲区中所有行
(l)ist n 显示缓冲区中第 n 行
(l)ist m n 显示缓冲区中 m 到 n 行
run 执行当前缓冲区的命令
/ 执行当前缓冲区的命令
r 执行当前缓冲区的命令
@文件名 运行调入内存的sql文件,如:
SQL> edit s<回车>
如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,
在其中输入“select * from tab;”,存盘退出。
SQL> @s<回车>
系统会自动查询当前用户下的所有表、视图、同义词。
@@文件名 在.sql文件中调用令一个.sql文件时使用
save 文件名 将缓冲区的命令以文件方式存盘,缺省文件扩展名为.sql
get 文件名 调入存盘的sql文件
start 文件名 运行调入内存的sql文件
spool 文件名 把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上,默认文件扩展名为.lst
spool 显示当前的“假脱机”状态
spool off 停止输出
例:
SQL> spool a
SQL> spool
正假脱机到 A.LST
SQL> spool off
SQL> spool
当前无假脱机
exit 退出SQL*PLUS
desc 表名 显示表的结构
show user 显示当前连接用户
show error 显示错误
show all 显示所有68个系统变量值
edit 打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑
edit 文件名 把当前目录中指定的.sql文件调入编辑器进行编辑
clear screen 清空当前屏幕显示
SQL> show all
appinfo 为 OFF 并且已设置为 "SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace ON EXPLAIN STATISTICS
blockterminator "." (hex 2e)
btitle OFF 为下一条 SELECT 语句的前几个字符
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK 为 ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
用于 6 或更多行的 FEEDBACK ON
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
instance "local"
linesize 80
lno 14
loboffset 1
logsource ""
long 80
longchunksize 80
markup HTML OFF HEAD "<style type='text/css'> body {font:10pt Arial,Helvetica,sa
ns-serif; color:black; background:White;} p {font:10pt Arial,Helvetica,sans-seri
f; color:black; background:White;} table,tr,td {font:10pt Arial,Helvetica,sans-s
erif; color:Black; background:#f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0
px 0px;} th {font:bold 10pt Arial,Helvetica,sans-serif; color:#336699; backgroun
d:#cccc99; padding:0px 0px 0px 0px;} h1 {font:16pt Arial,Helvetica,Geneva,sans-s
erif; color:#336699; background-color:White; border-bottom:1px solid #cccc99; ma
rgin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} h2 {font:bold 10pt Ar
ial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-t
op:4pt; margin-bottom:0pt;} a {font:9pt Arial,Helvetica,sans-serif; color:#66330
0; background:#ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;}</
style><title>SQL*Plus Report</title>" BODY "" TABLE "border='1' width='90%' alig
n='center' summary='Script output'" SPOOL OFF ENTMAP ON PREFORMAT OFF
newpage 1
null ""
numformat ""
numwidth 10
pagesize 14
PAUSE 为 OFF
pno 0
recsep WRAP
recsepchar " " (hex 20)
release 1002000100
repfooter OFF 为 NULL
repheader OFF 为 NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool OFF
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlpluscompatibility 10.2.0
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "sql"
tab ON
termout ON
timing ON
trimout ON
trimspool OFF
ttitle OFF 为下一条 SELECT 语句的前几个字符
underline "-" (hex 2d)
USER 为 "ITMP"
verify ON
wrap : 将换至下一行
SQL>
1.port 被占用了
360看看 kill掉
ps -ax
netstat -an
2. host 主机解析出了问题 linux 上
[oracle@oracle bin]$
more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.2.50 oracle oracle
[oracle@oracle bin]$
3. 安装oracle 创库的时候 往往会自动的 创立一个监听器..
比如一台机器上有2个库 ....那么很可能有2个监听器.... listener 1521
NL-00853: undefined command "ls". Try "help"
LSNRCTL> start
Starting /opt/app/oracle/product/10.2.0/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /opt/app/oracle/product/10.2.0/network/admin/listener.ora
Log messages written to /opt/app/oracle/product/10.2.0/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 01-DEC-2009 20:11:55
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/oracle/product/10.2.0/network/admin/listener.ora
Listener Log File /opt/app/oracle/product/10.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>
LSNRCTL>
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 01-DEC-2009 20:11:55
Uptime 0 days 0 hr. 2 min. 38 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/oracle/product/10.2.0/network/admin/listener.ora
Listener Log File /opt/app/oracle/product/10.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "idmp" has 1 instance(s).
Instance "idmp", status READY, has 1 handler(s) for this service...
Service "idmpXDB" has 1 instance(s).
Instance "idmp", status READY, has 1 handler(s) for this service...
Service "idmp_XPT" has 1 instance(s).
Instance "idmp", status READY, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>
CREATE OR REPLACE FUNCTION get_hash_val (p_in VARCHAR2)
RETURN VARCHAR2
IS
l_hash VARCHAR2 (6000);
BEGIN
l_hash :=RAWTOHEX(UTL_RAW.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.md5 (input_string=> p_in)));
RETURN l_hash;
END;
在 System.Collections.ArrayList.ToArray(Type type)
在 log4net.Appender.MemoryAppender.GetEvents()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
lock (MemoryAppender){
MemoryAppender.GetEvents()
MemoryAppender.clear()
}
TMD 到底什么是异常
程序按照预期的流程运行..正常态
出现未预计到的情况..比如网线断了gddg...文件打开失败...
这个时候 程序是继续执行 还是 其他的选择 或者 退出app ....
实际的情况是 有可能可以恢复,从业务角度出发..我可以重新试图连接...可以重新打开文件或者换一个文件 或者重新创建一个新的文件....
只要不是致命的问题..通常是可以恢复的...没必要退出app...
如果你不捕获 网络断开或者文件无法打开的 异常 ...那么为什么程序退出了呢...因为你没有告诉你的程序 如果出错了应该怎么办...sun 规避风险,你出错了,可能下一步要错误的扣除你工资,为了解除这种不确定执行的巨大风险...那么就把你app shutdown了....
如果你有catch 对于程序来说 你有防备 出现异常的准备...那么真到了异常 那么就看你异常的处理流程 是否奏效....
异常体系....瞎扯淡...就是几个异常类的继承关系(虚拟机内部异常,用户定义异常 ...).....还能有什么 .
无非是 根据不同的出错类型来 包装异常...给这个这种类型的异常 或者 这类问题取一个名字....
当你没看堆栈信息的时候大概可以 判断一下 问题再那里而已.....
异常来跳转 程序是因为 无法预期异常后下步该如何执行 所以跳转...
异常是比较消耗系统资源的.
.net 为什么没有主动要求你 抛出异常....
因为.net的主要架构师 再设计.net时候看到了 很多程序员 一层一层的抛出异常只在最底层 main中截获异常....
那么大量的函数都是 throws 其实根本无意义....所以他再设计的时候就没有采取和java 相同的方式 .
片段 "
public LocationInfo(Type callerStackBoundaryDeclaringType)
{
// Initialize all fields
m_className = NA;
m_fileName = NA;
m_lineNumber = NA;
m_methodName = NA;
m_fullInfo = NA;
#if !NETCF
if (callerStackBoundaryDeclaringType != null)
{
try
{
StackTrace st = new StackTrace(true);
int frameIndex = 0;
// skip frames not from fqnOfCallingClass
while (frameIndex < st.FrameCount)
{
StackFrame frame = st.GetFrame(frameIndex);
if (frame != null && frame.GetMethod().DeclaringType == callerStackBoundaryDeclaringType)
{
break;
}
frameIndex++;
}
// skip frames from fqnOfCallingClass
while (frameIndex < st.FrameCount)
{
StackFrame frame = st.GetFrame(frameIndex);
if (frame != null && frame.GetMethod().DeclaringType != callerStackBoundaryDeclaringType)
{
break;
}
frameIndex++;
}
if (frameIndex < st.FrameCount)
{
// now frameIndex is the first 'user' caller frame
StackFrame locationFrame = st.GetFrame(frameIndex);
if (locationFrame != null)
{
System.Reflection.MethodBase method = locationFrame.GetMethod();
if (method != null)
{
m_methodName = method.Name;
if (method.DeclaringType != null)
{
m_className = method.DeclaringType.FullName;
}
}
m_fileName = locationFrame.GetFileName();
m_lineNumber = locationFrame.GetFileLineNumber().ToString(System.Globalization.NumberFormatInfo.InvariantInfo);
// Combine all location info
m_fullInfo = m_className + '.' + m_methodName + '(' + m_fileName + ':' + m_lineNumber + ')';
}
}
}
catch(System.Security.SecurityException)
{
// This security exception will occur if the caller does not have
// some undefined set of SecurityPermission flags.
LogLog.Debug("LocationInfo: Security exception while trying to get caller stack frame. Error Ignored. Location Information Not Available.");
}
}
#endif
}
C# Preprocessor Directives
时间
select
trunc(86400*
(to_date('2009-1-1 23:15:01','yyyy-mm-dd hh24:mi:ss') -
to_date('2009-1-1 23:10:00','yyyy-mm-dd hh24:mi:ss'))
)
from dual ;
在启动时关闭sendmail 服务 [其它服务也一样]
posted by JianNeng in Opensource 在启动时关闭sendmail- -
对其他的服务可以采取同样的措施。
而对于那些不是从inetd启动的服务,则通过命令来关闭,例如需要关闭sendmail服务,则:
/etc/rc.d/init.d/sendmail stop
然后再设置其不在系统启动时启动:
chkconfig -levels 12345 sendmail off
[root@oracle xinetd.d]# chkconfig --level 123456 sendmail off
[root@oracle xinetd.d]#
linux 关机
[root@oracle ~]# shutdown -h now
摘要: plsql developer plsql 调试无法 ..包没加入所有的函数的定义到 包头文件定义.
阅读全文
摘要: 为什么log4j 显示行号
(2) 建立一个Throwable的对象来取得当前运行堆栈的快照...Throwable.fillInStackTrace();
(3) 从抛出的Throwable对象中,来分析出当前log信息的行号...
阅读全文
摘要: 其实,很简单,并不是因为系统打了补丁的问题,而是因为VS 2008打了补丁,导致没法删除,可以在“添加/删除程序”面板中,选中上方的“显示更新”,然后找到VS 2008,下面多多少少会挂了几个更新或者补丁,全部先删掉,然后再删VS 2008,熟悉的维护界面又回来了,输入序列号,OK,正常使用~~~
阅读全文
摘要: lsnrctl services
阅读全文
摘要: sqlplus Xdmp/Xdmp@127.0.0.1:1521/Xdmp
SQL> conn sys/oracle @itmp_rac as sysdba
阅读全文
摘要: 左连接 .如果一边的没有记录, nvl (右边,0) 否则会造成整列无法,无数据.
select d.crunit_ - nvl( a.stkamt_ ,0)
from dl_fundetf d ,
(select c.stkcode_, c.exchgcode_,c.stkamt_ ,c.stkcost_
from acc_proflstk c
where 1=1
and c.fundid_ = '55'
and c.cellid_ = '50001'
and c.proflid_ = '080724113732'
) a
where 1=1
and d.exchgcode_ = 'SH'
and d.fundid_ = '510051'
and a.exchgcode_ (+)= d.exchgcode_
and a.stkcode_ (+)= d.fundid_
阅读全文
摘要: 1.作用: 屏蔽方法名 ,灵活性动态性函数指针
2 .使用:
定义一个委托: 和一个类一样的
delegatevoid Del (int x);
或者
delegatevoid Del
(T x);
定一个委托变量和赋值
Main(){
Del d = obj.DoWork; 实例方法或者静态方法都可以
}
阅读全文
摘要: 检查客户机器上的输入法区域设置。如果默认输入法不是中文,则先调用一下方法,切换到中文。
Top
阅读全文
SQL>
exec dbms_stats.gather_table_stats('IDMP','TEST_GDDG');
PL/SQL 过程已成功完成。
SQL>
select num_rows from dba_tables
where owner='IDMP' and table_name ='TEST_GDDG';
NUM_ROWS
----------
182
SQL>
truncate table test_gddg
2 ;
表被截断。
SQL>
select num_rows from dba_tables
where owner='IDMP' and table_name ='TEST_GDDG';
NUM_ROWS
----------
182
SQL>
exec dbms_stats.gather_table_stats('IDMP','TEST_GDDG');
PL/SQL 过程已成功完成。
SQL>
select num_rows from dba_tables
where owner='IDMP' and table_name ='TEST_GDDG';
NUM_ROWS
----------
0
SQL>
另外 补充
http://www.dbanotes.net/database/oracle_dbms_stats.html
导出和回复统计信息
dbms_stats VS analyze
http://yumianfeilong.com/2007/05/26/dbms_stats-vs-analyze/
众所周知,Table是分区的时候,analyze根据所有partition上的已有的统计信息“计算”出整个表级别上的统计信息;而dbms_stats是实际去计算整个表范围的统计信息,因此表级别的统计信息比analyze更精确,反映表上真实的情况.
摘要: iSQL*Plus URL: -----一般重装 都没问题
http://localhost:5560/isqlplus
系统服务:
iSQL*Plus Application Server
F:\oracle\product\10.2.0\db_1\bin\isqlplussvc.exe
从装会有 问题 ,特别是 主机名修改了.......比较麻烦的
Enteprise Manager 10g Database Control URL:
http://localhost:5500/em
看我修理 .......的文章 ............
OracleDBConsoleidmp
F:\oracle\product\10.2.0\db_1\bin\nmesrvc.exe
阅读全文
性能上, 没什么太大的区别...
但是 pro *C 需要外部的编译和调试好.扩展性更强....
如果大家都执行了一次,那么性能一改是一样的....
摘要: 1. Upgrade to the newest version legally and without paying money
1。合法升级到最新版本却不花一分钱
2. Have the latest version of the operating system run faster than the previous version on the same hardware
2。同一个硬件平台上最新的操作系统却比老的更快。
阅读全文
摘要: import .
anthoer name
资源 释放.关闭啊网络,文件 ,.... IDisposable 接口
阅读全文
摘要: (一)DotNet中的版本组成
DotNet中的版本由4个物理号码组成,如图(一)
在程序集里面,我们可以通过加上AssemblyVersion特性来设置它,
如[assembly: AssemblyVersion("2.0.2.11")]
(二) GAC:
计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称,一个程序集如果注册到了GAC里,被其他程序集合引用的时候,将不会拷贝副本到引用的程序目录中。 (本文只讨论注册到GAC中的程序集)
阅读全文
摘要: 外围报盘程序 .net 调用
传递的参数 varchar2 100
阅读全文
摘要: try{
= () 强转
}catch (){
}
string s = someObject as string;
if (s != null)
{
// someObject is a string.
}
阅读全文
摘要: 在脚本中用
SQL> set define off;
是把默认的&绑定变量的功能取消, 可以把'&字符'当成普通字符处理
SQL> set define on;
打开&绑定变量的功能, &后面的字符串当变量使用.
SQL> show define;
阅读全文
摘要: 解决 : 程序在中文目录中
换到根目录 下面 路径中没有中文试试.
阅读全文
摘要: dba_synonyms
User_Synonyms
select * from dba_synonyms e
阅读全文
摘要: oracle cursor oracle 游标用法
阅读全文
摘要: select tt.column_name
from dba_constraints t, dba_ind_columns tt
where t.table_name =upper('dl_cjhb')
and tt.table_name=t.table_name
and t.constraint_type='P'
and t.index_name = tt.index_name
阅读全文
摘要: 先备份一下 C:\oracle\product\10.2.0\db_2\dbs
SPFILEIDMP.ORA
alter system set open_cursors=600 scope=spfile;
阅读全文
摘要: asc 序列 54 45 0 0 12
String str = new String( byte[] ..) ;
阅读全文
摘要: select userenv('LANGUAGE'),
userenv('ISDBA'),
userenv('SESSIONID'),
userenv('ENTRYID'),
userenv('LANG'),
userenv('INSTANCE'),
userenv('terminal')
FROM DUAL
阅读全文
重新安装vim 就可以了.百度说是因为ubuntu 8 带的是简化版.
get 方式安装 就行..这点很不错..
sudo apt-get install vim
摘要: ? 5?10 00:00:03 CST 2008
[root@idmp sybase]# export LANG=en_US
[root@idmp sybase]# date
Sat May 10 00:00:20 CST 2008
[root@idmp sybase]# date -s 10:20:37
Sat May 10 10:20:37 CST 2008
[root@idmp sybase]#
阅读全文
摘要: select to_char ( systimestamp , 'yyyy:mm:dd-hh24:mi:sssss' ) from dual ;
SELECT to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF3') FROM DUAL ;
阅读全文
摘要: c#
ref -----双向传递 数据 ----必须是instance 好的
out ----- 只是出来不进去的 , 给个引用就可以了
阅读全文
摘要: csc /t:library /out:A.dll a.cs
csc /r:acme.dll Test.cs
csc /t:library /out:A.dll a.cs
csc /r:A.dll MyTest.cs
------------------------------
csc /res:rmc.resources /res:rmc.es-ES.resources r
阅读全文
java 中反复执行,碰巧这个表又没有 主键。
stmt.execute();
stmt.execute();
oracle 里面 测试都是 正常的。
不要想当然的认为 某个部分并不会出错。 这次就是java 代码多执行了一下。
SQL> set timing on
SQL> analyze table dl_hqk compute statistics;
Table analyzed
Executed in 0.219 seconds
摘要: ghost 安装 ide 方式转换ata 方式 Intel Matrix Storage 蓝屏 此计算机未达到安装此软件的最低要求
阅读全文
摘要: for 定制循环次数
while 动态判断 条件
阅读全文
show parameter cur%
显示参数
alter system set flush sharedpool ;
显示当前用户 oracle 当前回话下面
SQL> show user ;
USER 为"HR"
plsql 数字 输出 格式化 column format 输出 千
SQL> col pc format 999,999,999,999,999.9
SQL> select 8*333 pc from dual;
PC
----------------------
2,664.0
----------------------
2,664.0
摄入 数字oracle
SQL> select round( 8*333.99999 , 2 ) pc from dual;
PC
----------------------
2,672.0
plsql 命令
根据字段 不同 时候换行.
SQL> break on job_id skip 2 ;
SQL> select first_name , job_id from employees
2 where rownum < 10 order by job_id ;
FIRST_NAME JOB_ID
-------------------- ----------
Steven AD_PRES
Neena AD_VP
Lex
Nancy FI_MGR
SELECT DECODE(TOTALQ, 0, 'No Requests',
WAIT/TOTALQ || ' HUNDREDTHS OF SECONDS') "AVERAGE WAIT TIME PER REQUESTS"
FROM V$QUEUE
WHERE TYPE = 'COMMON';
摘要: where 1=1 and 'true' = ( case
when t.bssign_ = 0 and t.ordbs_ in ('B','S') then 'true'
else 'false'
end) ;
阅读全文
update temp_Test_pm_order t
set ( t.stkname_ , t.STKTP_ , t.HIGHPRICE_ , t.LOWPRICE_ , t.PRICEUNIT_ , t.CURRENCY_CODE_
, t.ISSTOP_ ,t.DEALUNITNAME_ ,t.MARTUNIT_ , t.UPDEALNUM_ , t.LOWDEALNUM_ , t.BUY_UNIT_ ,t.SALE_UNIT_
, t.IV_UNIT_ )
= (select stkname_ ,d.STKTP_ ,d.HIGHPRICE_ , d.LOWPRICE_ ,d.PRICEUNIT_ , d.CURRENCY_CODE_
, d.ISSTOP_, d.DEALUNITNAME_ , d.MARTUNIT_ , d.UPDEALNUM_ ,d.LOWDEALNUM_ , d.BUY_UNIT_ ,d.SALE_UNIT_
, d.IV_UNIT_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_ and d.stkcode_ = t.stkcode_)
UPDATE STATEMENT, GOAL = CHOOSE
UPDATE Object owner=IDMP Object name=TEMP_TEST_PM_ORDER
TABLE ACCESS FULL Object owner=IDMP Object name=TEMP_TEST_PM_ORDER
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
update temp_Test_pm_order t
set
t.STKTP_ = (select d.STKTP_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.HIGHPRICE_ = (select d.HIGHPRICE_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.LOWPRICE_ = (select d.LOWPRICE_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.PRICEUNIT_ = (select d.PRICEUNIT_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.CURRENCY_CODE_ = (select d.CURRENCY_CODE_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.ISSTOP_ = (select d.ISSTOP_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.DEALUNITNAME_ = (select d.DEALUNITNAME_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.MARTUNIT_ = (select d.MARTUNIT_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.UPDEALNUM_ = (select d.UPDEALNUM_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.LOWDEALNUM_ = (select d.LOWDEALNUM_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.BUY_UNIT_ = (select d.BUY_UNIT_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.SALE_UNIT_ = (select d.SALE_UNIT_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_),
t.IV_UNIT_ = (select d.IV_UNIT_
from dl_stkcode d
where d.exchgcode_ = t.exchgcode_
and d.stkcode_ = t.stkcode_)
UPDATE STATEMENT, GOAL = CHOOSE
UPDATE Object owner=IDMP Object name=TEMP_TEST_PM_ORDER
TABLE ACCESS FULL Object owner=IDMP Object name=TEMP_TEST_PM_ORDER
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
TABLE ACCESS BY INDEX ROWID Object owner=IDMP Object name=DL_STKCODE
INDEX UNIQUE SCAN Object owner=IDMP Object name=PK_DL_STKCODE
select *
from col =199012
select *
from col='199012'
查的字段 col 是数字的 还是用col =199012 快.
摘要: Ethereal是一个网络包的分析仪。
阅读全文
摘要: select lower( column_name) ||','||'--'||comments
from user_col_comments c
where c.table_name = upper('acc_fundcap')
阅读全文
摘要: 1. 一台机器上装了2个oracle, tns 文件2个都要更新一下 找到主要目录.
datalink 提示 ora-12154 tns 无法处理服务名
2 远程控制的机器 tns file添加了 , 然后连接到其他的机器上的 在其他机器上创建 datalink 和 synonym .不查询的时候不报错..一旦查询了 就开始说tns 没没找到.
阅读全文
摘要: oracle 访问 防火墙只要一个端口
阅读全文
摘要: oracle 9i 一个表空间 导入到另外一个表空间
阅读全文
set echo on
set echo off
表示打开或者关闭查询的显示
三个环境变量的设置
echo 是否现实执行的命令内容
feedback 是否现实 * rows selected
pagesize 页面大小设置
可分开写
set echo on/off
set feedback on/off
set pagesize 999
set echo on,则显示出文件中的每条命令和该命令执行的结果,如果设为set echo off,则只显示命令执行的结果,而不显示出命令本身。
很好用的SQLPLUS命令汇总【转】
文章所属标签: 我的技术专题
下面介绍一些常用的sql*plus命令:
1. 执行一个SQL脚本文件
SQL>start file_name
SQL>@ file_name
我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。
2. 对当前的输入进行编辑
SQL>edit
3. 重新运行上一次运行的sql语句
SQL>/
4. 将显示的内容输出到指定文件
SQL> SPOOL file_name
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
5. 关闭spool输出
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
6.显示一个表的结构
SQL> desc table_name
7. COL命令:
主要格式化列的显示形式。
该命令有许多选项,具体如下:
COL[UMN] [{ column|expr} [ option ...]]
Option选项可以是如下的子句:
ALI[AS] alias
CLE[AR]
FOLD_A[FTER]
FOLD_B[EFORE]
FOR[MAT] format
HEA[DING] text
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
LIKE { expr|alias}
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT]|PRI[NT]
NUL[L] text
OLD_V[ALUE] variable
ON|OFF
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
1). 改变缺省的列标题
COLUMN column_name HEADING column_heading
For example:
Sql>select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- ---------
10 ACCOUNTING NEW YORK
sql>col LOC heading location
sql>select * from dept;
DEPTNO DNAME location
--------- ---------------------------- -----------
10 ACCOUNTING NEW YORK
2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上:
Sql>select * from emp
Department name Salary
---------- ---------- ----------
10 aaa 11
SQL> COLUMN ENAME HEADING ’Employee|Name’
Sql>select * from emp
Employee
Department name Salary
---------- ---------- ----------
10 aaa 11
note: the col heading turn into two lines from one line.
3). 改变列的显示长度:
FOR[MAT] format
Sql>select empno,ename,job from emp;
EMPNO ENAME JOB
---------- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
Sql> col ename format a40
EMPNO ENAME JOB
---------- ---------------------------------------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
4). 设置列标题的对齐方式
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
SQL> col ename justify center
SQL> /
EMPNO ENAME JOB
---------- ---------------------------------------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
对于NUMBER型的列,列标题缺省在右边,其它类型的列标题缺省在左边
5). 不让一个列显示在屏幕上
NOPRI[NT]|PRI[NT]
SQL> col job noprint
SQL> /
EMPNO ENAME
---------- ----------------------------------------
7369 SMITH
7499 ALLEN
7521 WARD
6). 格式化NUMBER类型列的显示:
SQL> COLUMN SAL FORMAT $99,990
SQL> /
Employee
Department Name Salary Commission
---------- ---------- --------- ----------
30 ALLEN $1,600 300
7). 显示列值时,如果列值为NULL值,用text值代替NULL值
COMM NUL[L] text
SQL>COL COMM NUL[L] text
8). 设置一个列的回绕方式
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
COL1
--------------------
HOW ARE YOU?
SQL>COL COL1 FORMAT A5
SQL>COL COL1 WRAPPED
COL1
-----
HOW A
RE YO
U?
SQL> COL COL1 WORD_WRAPPED
COL1
-----
HOW
ARE
YOU?
SQL> COL COL1 WORD_WRAPPED
COL1
-----
HOW A
9). 显示列的当前的显示属性值
SQL> COLUMN column_name
10). 将所有列的显示属性设为缺省值
SQL> CLEAR COLUMNS
8. 屏蔽掉一个列中显示的相同的值
BREAK ON break_column
SQL> BREAK ON DEPTNO
SQL> select DEPTNO, ENAME, SAL
FROM EMP
WHERE SAL < 2500
ORDER BY DEPTNO;
DEPTNO ENAME SAL
---------- ----------- ---------
10 CLARK 2450
MILLER 1300
20 SMITH 800
ADAMS 1100
9. 在上面屏蔽掉一个列中显示的相同的值的显示中,每当列值变化时在值变化之前插入n个空行。
BREAK ON break_column SKIP n
SQL> BREAK ON DEPTNO SKIP 1
SQL> /
DEPTNO ENAME SAL
---------- ----------- ---------
10 CLARK 2450
MILLER 1300
20 SMITH 800
ADAMS 1100
10. 显示对BREAK的设置
SQL> BREAK
11. 删除6、7的设置
SQL> CLEAR BREAKS
12. Set 命令:
该命令包含许多子命令:
SET system_variable value
system_variable value 可以是如下的子句之一:
APPI[NFO]{ON|OFF|text}
ARRAY[SIZE] {15|n}
AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
AUTOP[RINT] {ON|OFF}
AUTORECOVERY [ON|OFF]
AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
BLO[CKTERMINATOR] {.|c}
CMDS[EP] {;|c|ON|OFF}
COLSEP {_|text}
COM[PATIBILITY]{V7|V8|NATIVE}
CON[CAT] {.|c|ON|OFF}
COPYC[OMMIT] {0|n}
COPYTYPECHECK {ON|OFF}
DEF[INE] {&|c|ON|OFF}
DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]
ECHO {ON|OFF}
EDITF[ILE] file_name[.ext]
EMB[EDDED] {ON|OFF}
ESC[APE] {|c|ON|OFF}
FEED[BACK] {6|n|ON|OFF}
FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}
FLU[SH] {ON|OFF}
HEA[DING] {ON|OFF}
HEADS[EP] {||c|ON|OFF}
INSTANCE [instance_path|LOCAL]
LIN[ESIZE] {80|n}
LOBOF[FSET] {n|1}
LOGSOURCE [pathname]
LONG {80|n}
LONGC[HUNKSIZE] {80|n}
MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL
{ON|OFF}] [PRE[FORMAT] {ON|OFF}]
NEWP[AGE] {1|n|NONE}
NULL text
NUMF[ORMAT] format
NUM[WIDTH] {10|n}
PAGES[IZE] {24|n}
PAU[SE] {ON|OFF|text}
RECSEP {WR[APPED]|EA[CH]|OFF}
RECSEPCHAR {_|c}
SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_
WRAPPED]|TRU[NCATED]}]
SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
SHOW[MODE] {ON|OFF}
SQLBL[ANKLINES] {ON|OFF}
SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}
SQLCO[NTINUE] {> |text}
SQLN[UMBER] {ON|OFF}
SQLPRE[FIX] {#|c}
SQLP[ROMPT] {SQL>|text}
SQLT[ERMINATOR] {;|c|ON|OFF}
SUF[FIX] {SQL|text}
TAB {ON|OFF}
TERM[OUT] {ON|OFF}
TI[ME] {ON|OFF}
TIMI[NG] {ON|OFF}
TRIM[OUT] {ON|OFF}
TRIMS[POOL] {ON|OFF}
UND[ERLINE] {-|c|ON|OFF}
VER[IFY] {ON|OFF}
WRA[P] {ON|OFF}
1). 设置当前session是否对修改的数据进行自动提交
SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}
2).在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
SQL> SET ECHO {ON|OFF}
3).是否显示当前sql语句查询或修改的行数
SQL> SET FEED[BACK] {6|n|ON|OFF}
默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off 时,一律不显示查询的行数
4).是否显示列标题
SQL> SET HEA[DING] {ON|OFF}
当set heading off 时,在每页的上面不显示列标题,而是以空白行代替
5).设置一行可以容纳的字符数
SQL> SET LIN[ESIZE] {80|n}
如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。
6).设置页与页之间的分隔
SQL> SET NEWP[AGE] {1|n|NONE}
当set newpage 0 时,会在每页的开头有一个小的黑方框。
当set newpage n 时,会在页和页之间隔着n个空行。
当set newpage none 时,会在页和页之间没有任何间隔。
7).显示时,用text值代替NULL值
SQL> SET NULL text
8).设置一页有多少行数
SQL> SET PAGES[IZE] {24|n}
如果设为0,则所有的输出内容为一页并且不显示列标题
9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。
SQL> SET SERVEROUT[PUT] {ON|OFF}
在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。
10).当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。
SQL> SET WRA[P] {ON|OFF}
当输出的行的长度大于设置的行的长度时(用set linesize n命令设置),当set wrap on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。
11).是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
SQL> SET TERM[OUT] {ON|OFF}
在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
12).将SPOOL输出中每行后面多余的空格去掉
SQL> SET TRIMS[OUT] {ON|OFF}
13)显示每个sql语句花费的执行时间
set TIMING {ON|OFF}
14.修改sql buffer中的当前行中,第一个出现的字符串
C[HANGE] /old_value/new_value
SQL> l
1* select * from dept
SQL> c/dept/emp
1* select * from emp
15.编辑sql buffer中的sql语句
EDI[T]
16.显示sql buffer中的sql语句,list n显示sql buffer中的第n行,并使第n行成为当前行
L[IST] [n]
17.在sql buffer的当前行下面加一行或多行
I[NPUT]
18.将指定的文本加到sql buffer的当前行后面
A[PPEND]
SQL> select deptno,
2 dname
3 from dept;
DEPTNO DNAME
---------- --------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL> L 2
2* dname
SQL> a ,loc
2* dname,loc
SQL> L
1 select deptno,
2 dname,loc
3* from dept
SQL> /
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
19.将sql buffer中的sql语句保存到一个文件中
SAVE file_name
20.将一个文件中的sql语句导入到sql buffer中
GET file_name
21.再次执行刚才已经执行的sql语句
RUN
or
/
22.执行一个存储过程
EXECUTE procedure_name
23.在sql*plus中连接到指定的数据库
CONNECT user_name/passwd@db_alias
24.设置每个报表的顶部标题
TTITLE
25.设置每个报表的尾部标题
BTITLE
26.写一个注释
REMARK [text]
27.将指定的信息或一个空行输出到屏幕上
PROMPT [text]
28.将执行的过程暂停,等待用户响应后继续执行
PAUSE [text]
Sql>PAUSE Adjust paper and press RETURN to continue.
29.将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库)
COPY {FROM database | TO database | FROM database TO database}
{APPEND|CREATE|INSERT|REPLACE} destination_table
[(column, column, column, ...)] USING query
sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST
create emp_temp
USING select * FROM EMP
30.不退出sql*plus,在sql*plus中执行一个操作系统命令:
HOST
Sql> host hostname
该命令在windows下可能被支持。
31.在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回sql*plus:
!
sql>!
$hostname
$exit
sql>
该命令在windows下不被支持。
32.显示sql*plus命令的帮助
HELP
如何安装帮助文件:
Sql>@?/sqlplus/admin/help/hlpbld.sql ?/sqlplus/admin/help/ ?/sqlplus/admin/help/helpus.sql
Sql>help index
33.显示sql*plus系统变量的值或sql*plus环境变量的值
Syntax
SHO[W] option
where option represents one of the following terms or clauses:
system_variable
ALL
BTI[TLE]
ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|
TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name]
LNO
PARAMETERS [parameter_name]
PNO
REL[EASE]
REPF[OOTER]
REPH[EADER]
SGA
SPOO[L]
SQLCODE
TTI[TLE]
USER
1) . 显示当前环境变量的值:
Show all
2) . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息
Show error
当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。
3) . 显示初始化参数的值:
show PARAMETERS [parameter_name]
4) . 显示数据库的版本:
show REL[EASE]
5) . 显示SGA的大小
show SGA
6). 显示当前的用户名
show user
oracle 10g binary_float or binary_double 高性能数字
特点:
比number 省空间。
比number 速度快。
binary_float + binary_float = binary_float
ieee 要求。
范围更广精度。
缺点 版本兼容性差。
create table
(
bin_float binary_float ,
)
insert (4.2f, 333.0d)
《oracle 10g sql 开发指南 》
P18
[转载]上海地铁超全: 1-18号线!
轨道一号线
一列庞巴迪列车,正停在上海轨道交通一号线常熟路站
长度: 28.795公里
投入运营:莘庄至上海火车站 1995年4月,上海火车站至共富新村2004年12月
标志色:大红色
途经站点:莘庄(南起迄站) -
外环路-莲花路-锦江乐园-上海南站-漕宝路- 上海体育馆-徐家汇- 衡山路-常熟路-陕西南路-黄陂南路-人民广场-新闸路 -汉中路-上海火车站 -中山北路-延长路-上海马戏城-汶水路-彭浦新村- 共康路-通河新村- 呼兰路-共富新村(北起迄站)......
轨道二号线
长度:全长57公里
投入运营:
标志色:浅绿色
途经站点:中山公园(西起迄站)-
江苏路-静安寺-石门一路 -人民广场-河南中路 -陆家嘴-东昌 路-东方路-上海科技馆-世纪公园 -龙阳路-张江高科(东起迄站)
延伸情况:地铁二号线西起虹桥机场,经天山居住区、中山公园、静安寺、人民公园,并通过上海最繁忙的闹市区--南京东路,跨越黄浦江至浦东花木地区,把多个商业中心及浦东开发区连接起来,与浦东新建国际空港连接。
轨道三号线
(高架轨道)长度:全长40.3公里,29座车站
投入运营:
标志色:黄色
途经站点:上海南站(南起迄站) -石龙路-龙漕路-漕溪路-宜山路- 虹桥路-延安西路-中山公园 -金沙江路-曹阳路-镇坪路-中潭路-上海火车站 -宝山路-东宝兴路- 虹口足球场-赤峰路-汶水东路-江湾镇(北起迄站) 向北延伸到宝钢
轨道五号线
(轻轨线路)长度:17.04公里
投入运营:2003年11 月
标志色:紫色
途经站点:莘庄(起迄站)-春申路-银都路- 颛桥-北桥 -剑川路-东川路-金平路-华宁路-文井路-闵行开发区(起迄站)
磁悬浮轨道上海磁浮示范运营线
是上海市交通发展的重大项目,也是世界上第一条投入商业化运营的磁浮示范线,具有交通、展示、旅游观光等多重功能。西起上海地铁 2号线龙阳路站,东到上海浦东国际机场,主要解决连接浦东机场和市区的大运量高速交通需求。线路正线全长约 30公里,双线上下折返运行,设计最高运行速度为每小时430公里,单线运行时间约8分钟。
长度:33公里
投入运营:2002年12月 31日
最高时速:430公里/小时
途经站点:轨道交通2号线龙阳路站- 浦东国际机场
票价:单程人民币50元,往返人民币80元,持当日机票可优惠20%。
运营时间:每日8:30-17:30
票价
上海轨道交通多级票价表
一票通简介
2005年12月25 日起,上海所有轨道交通将实行一票通的全路网计价模式,无论乘客跨线乘坐多少地铁,均按进出两站间最短换乘里程计费。年底 4号线试运营同时价加入一票通
12 月25日起可换乘的车站为莘庄(1号线与5号线)、上海南站(1 号线和 3号线)、人民广场(1号线和2号线)、中山公园(2号线和3号线 ) 。
4号线试运营时增加和改动的换乘站为:上海体育馆(1号线和4号线)、虹桥路、延安西路、中山公园、金沙江路、曹杨路、镇坪路、中潭路、上海火车站( 北广场 )、宝山路9座3、4号线共线车站。其中中山公园站为2、3、4号线的换乘枢纽。 http://design.5tomusic.com
2、4号线东方路站将在恢复使用时实施一票通。
票价标准
(1)仅乘坐5号线(莘庄 -闵行开发区)6公里以内2 元,6-16公里3元。
(2)其他情况:6公里以内 3元,6-16公里4 元,16-26公里5元,26-36公里6元,36-46 公里7元,46-56 公里 8元。 (3)实行一票通后,最远换乘累计里程为50公里,即票价8元封顶。 (4)根据相关规定,无票乘车或遗失车票可按单程最高票价加收票款,并加以5 倍以下付款。
首末班车时刻表
一号线首末班车时刻表
首班车发车时刻 首班车发车时刻 首班车发车时刻 末班车发车时刻 末班车发车时刻 末班车发车时刻
站名 往火车站 往共富新村 往莘庄 往火车站 往共富新村 往莘庄
莘庄 5:30 5:30 — 22:20 —
外环路 5:32 5:32 6:06 22:22 23:32
莲花路 5:35 5:35 6:04 22:24 23:29
锦江乐园 5:38 5:38 6:01 22:27 23:27
上海南站 4:55 5:18 5:57 22:31 23:22
漕宝路 4:58 5:20 5:54 22:33 23:20
上海体育馆 5:00 5:22 5:51 22:36 23:18
徐家汇 5:03 5:25 5:48 22:38 23:16
衡山路 5:05 5:27 5;46 22:40 23:13
常熟路 5:08 5:29 5:43 22:42 23;11
陕西南路 5:10 5:31 5:41 22:44 23:10
黄陂南路 5:12 5:33 5:39 22:46 23;07
人民广场 5:16 5:36 5:36 22:49 23:05
新闸路 5:18 5:37 5:34 22:51 23:03
汉中路 5:20 5:39 5:31 22:52 23:01
上海火车站 — 5:42 5:30 — 22:55 23:00
中山北路 — 5:44 6:24 — 22:57 22:50
延长路 — 5:47 6:21 — 23:00 22:48
上海马戏城 — 5:49 6:19 — 23:02 22:45
汶水路 — 5:52 6:16 — 23:05 22:43
彭浦新村 — 5:56 6:12 — 23:07 22:40
共康路 — 5:59 6:09 — 23:10 22:37
通河新村 — 6:02 6:06 — 23;13 22:35
呼兰路 — 6:05 6:03 — 23:15 22:32
共富新村 — — 6:00 — — 22:30
二号线首末班车时刻表
首班车发车时刻 首班车发车时刻 末班车发车时刻 末班车发车时刻
站名 往中山公园 往张江高科 往中山公园 往张江高科
中山公园 — 5:53 — 23:03
江苏路 5:47 5:55 22:57 23:05
静安寺 5:45 5:57 22:54 23:07
石门一路 5:42 6:00 22:52 23:10
人民广场 5:38 6:03 22:49 23:12
河南中路 5:36 6:06 22:47 23:15
陆家嘴 5:33 6:09 22:44 23:18
东昌路 5:31 6:12 22:42 23:20
东方路(暂停使用) 5:28 6:14 22:40 23:22
上海科技馆 5:25 6:17 22:37 23:25
世纪公园 5:22 6:20 22:35 23:28
龙阳路 5:21 6:22 22:33 23:30
张江高科 6:28 — 22:30 —
三号线首末班车时刻表
首班车发车时刻 首班车发车时刻 末班车发车时刻 末班车发车时刻
站名 往上海南站 往江湾镇 往上海南站 往江湾镇
上海南站 - 6:00 - 21:24
石龙路 6:47 5:15 22:37 21:27
龙漕路 6:46 5:18 22:35 21:29
漕溪路 6:44 5:20 22:33 21:31
宜山路 6:41 5:23 22:31 21:33
虹桥路 6:38 5:26 22:28 21:35
延安西路 6:35 5:29 22:26 21:37
中山公园 6:32 5:32 22:24 21:39
金沙江路 6:29 5:35 22:22 21:42
曹杨路 6:27 5:37 22:20 21:44
镇坪路 6:24 5:40 22:18 21:46
中潭路 6:21 5:43 22:16 21:48
上海站 6:17 5:47 22:13 21:51
宝山路 6:13 5:50 22:10 21:54
东宝兴路 6:11 5:53 22:08 21:56
虹口足球场 6:08 5:56 22:06 21:58
赤峰路 6:05 5:58 22:04 22:00
汶水东路 6:03 6:00 22:02 22:02
江湾镇 6:00 — 22:00
上海轨道交通2号线西延伸
全长6.2千米,从中山公园至临空园区,预计2006 年年底建成通车。2号线远景规划西至虹桥机场,东至浦东国际机场,近期( 2010年以前)至虹桥机场段预留,暂不实施。2号线西延伸段(从中山公园至临空园区),共设4个站点。
淞虹路站-北新泾站-威宁路站-娄山关路站。
上海轨道交通3号线北延伸
http://design.5tomusic.com
江湾镇站-殷高路站-长江南路站-军工路站-吴淞镇站-水产路站-宝杨路站-铁力路站
上海轨道交通4号线
2005年底将投入运营的轨道交通4号线 C字型新路(浦西大木桥至浦东蓝村路车站)全长27 千米,共22座车站(已开通)。
大木桥站-东安路站-上海体育场站-上海体育馆站-宜山路站-虹桥路站-延安西路站-中山公园站-金沙江路站-曹杨路站-镇坪路站-中潭路站-上海火车站站-宝山路站-海伦路站-临平路站-大连路站-杨树浦路站-浦东大道站-东方路站-浦电路站-蓝村路站
其中虹桥路站至宝山路站共9个车站将与已建成正在运营的轨道交通3 号线共线运营。
2003年7月1 日越江隧道联络通道因大量泥砂涌入,引起隧道受损及周边地区地面沉降。修复工程有望在2007 年完成。最终将成为33.6公里、26个车站的环线。
修复段:蓝村路站-塘桥站-南浦大桥站-西藏南路站-鲁班路站-大木桥路站
上海轨道交通6号线
轨道交通6号线贯穿整个浦东新区,北起高桥镇港城路,南至三林地区主题公园,全长约 33.1千米,27个车站。 2010年世博会前贯通。
外环路站-华夏路站-高清路站-胡岗站-成山路站-滨州路站-浦三路站-龙阳路站-蓝村路站-浦电路站-世纪大道( 东方路)站-源深体育中心站-民生路站-北洋泾路站-罗山路站-云山路站-金桥路站-长岛路站-五莲路站-巨峰路站-东靖路站-五洲大道站-洲海路站-高南路站-春晖路站-高桥公园站-港城路站
上海轨道交通7号线
上海轨道交通七号线从宝山外环路站起,途经普陀、静安、徐汇至浦东的国际博览中心延伸段,全长35 千米,设站点28个,其中地下车站 27座,地面车站1座。2005年11月24日正式开工建设,2009 年底前试运行。
外环路站-上海大学站-南陈路站-沪太路站-场中路站-汶水路站-新沪路站-大华三路站-新村路站-铜川路 (岚皋路) 站-中山北路(镇坪路)站-长寿路站-昌平路站-静安寺站-常熟路站-肇嘉浜路(东安路)站-零陵路站-浦江南浦站-浦江耀华站-长清路站-上南路站-云台路站-东明路 (滨洲路 )站-杨高南路站-锦绣路站-沪南路站-白杨路站-龙阳路站
上海轨道交通8号线
上海轨道交通八号线起点为市光路站,终点为浦东成山路站,途经杨浦、虹口、闸北、卢湾、黄浦、浦东等六个行政区,全程长23.3 千米,全部为地下线。共设有22个车站。 2007年建成通车。
市光路站-嫩江路站-翔殷路站-黄兴公园站-延吉中路站-黄兴路站-江浦路站-鞍山新村站-四平路站-曲阳路站-虹口足球场站-西藏北路站-中兴路站-曲阜路站-人民广场站-大世界站-老西门路站-陆家浜路站-西藏南路站-周家渡站 - 耀华路站-成山路站
上海轨道交通9号线
上海轨道交通9号线一期工程自松江新城到宜山路,全程约31 千米,共设12个车站。预计 2009年建成通车。
松江新城站-大学城站-佘山旅游度假区二站-佘山旅游度假区站-泗泾站-九亭站-七宝站-外环路站-合川路站-虹梅路站-桂林路站-宜山路站
规划中线路
上海轨道交通10 号线
10号线一期为规划中的七宝高速铁路客运站至新江湾城站,二期将由新江湾城延伸至外高桥保税区。 目前部分标段已开始工程招标。 10号线规划设站:
高速铁路客站(七宝)- 七莘路站-航中路站- 外环路站- 吴中路站- 虹中路站- 虹许路站- 古北路站- 宋园路站- 凯旋路站-华山路站- 高安路站- 陕西南路站-马当路站- 西藏南路站-豫园站- 南京东路站- 天潼路站- 四川北路站- 海伦路站- 曲阳路站-四平路站 - 同济大学站- 国权路站- 国定路站- 五角场站- 三门路站- 殷高南路站-新江湾城站-(军工路站- 双江路站- 浦东北路站-外高桥保税区站)
上海轨道交通11号线
规划中的上海轨道交通11号线类似北京的地铁十号线,采取主线和支线两条线路,主线由嘉定新城到浦东三林(一期 ),支线在西北段上连接上海国际赛车场和安亭汽车城。线路总长 60公里。二期由浦东三林到南汇临港新城,总长也是60公里 主线规划设站:(嘉定停车场)城北路站- 静宁路站-叶城路站-墨玉路站-汽车城站- 同济嘉定校区站-赛车场站 -嘉定新城站-马陆站-环球乐园站(预留)-南翔站- 白丽新村站- 武威路站- 祁连山路站- 同济沪西分校站-上海西站站-铜川路站 -中山北路站- 隆德路站- 江苏路站-华山路站- 徐家汇站- 上体馆站- 龙漕路站 -龙水南路站- 济阳路站 - 上南路站- 三林站-御青路站-周浦站-航头站-新场站- 野生动物园站- 惠南站-浦东铁路站-临港新城 1站- 临港新城2站
上海轨道交通12号线
规划中的轨道交通12号线由虹梅路漕河泾科技园区至浦东的金桥出口加工区。 规划走向为: 漕宝路莲花路 -漕宝路- 龙漕路-龙华路或沿铁路沪杭线-大木桥路-陕西南路-茂名南路-茂名北路 -苏州河北岸- 东长治路-长阳路-复兴岛-浦东大道杨高北路一线-金桥停车场
规划设站:
虹梅路-桂林路-漕溪路(换乘 1号线)-龙漕路 (换乘3号线)-龙华路-南浦站(南浦站方案,换乘7号线)或东安路 (龙华路方案)-零陵路(换乘 4号线)-肇嘉浜路(换乘9号线)-陕西南路 (换乘10号线,接近 1号线)-长乐路(换乘14号线)- 南京西路(换乘2号线,近13号线)- 梅园路(换乘13号线和1号线)-曲阜路 (换乘8号线)-河南北路 (换乘10号线)-旅顺路-公平路- 大连路(换乘4号线)-江浦路( 换乘18号线)-黄兴路-隆昌路-军工路 -浦东大道-巨峰路(换乘 6号线)-杨高北路-金京路-申江路( 换乘9号线)-金海路-(金桥车辆段 )
上海轨道交通13号线
规划中轨道交通13号线由丰庄至浦东华夏西路。 规划走向为 北翟路车辆段 --嘉定区丰庄路站——金沙江路——宁夏路——华东政法学院校区——隆德路——穿越吴淞江——长寿路——天目西路——恒丰路——石门一路——石门二路—— 瑞金路——卢湾区政府大楼辅楼——马当路——蒙自路——穿越黄浦江——世博会园区——长清路——成山路——沪南公路——华夏西路
规划设站为:
(北翟路车辆段)-丰庄路 -万镇路-真北路- 大渡河路-中山北路-隆德路(换乘11号线)-武宁路( 换乘14号线)-常德路 (换乘7号线)-江宁路-汉中路(换乘 12号线和1号线)- 南京西路(换乘2号线,近12号线)-复兴中路(换乘10 号线)-徐家汇路(换乘9 号线)-中山南路-浦东世博园-耀华路(换乘7号线)-上南路 (换乘8号线 )-东明路(换乘6号线)-杨高南路-锦绣路-沪南路 -杨莲路-华夏西路- (川杨河车辆段)
轨道交通1-13号线中
1-5号为已建成线路,在建的有6、 7、8、9 号线,10号线、11号线已开始部分路段的工程招标,12、13号线正在进行环境影响公众调查评价 [1]
14-18号线为远景规划,目前尚未确定具体走向,预计在2010-2020 年间全部建设完成
上海轨道交通14号线
即原来的M6线,起讫点为环西二大道至金桥。
上海轨道交通15号线
即原来的轻轨L1线,起讫点为上海西站- 环南二大道
上海轨道交通16号线
即原来的轻轨L2线,起讫点为祁连山路- 虹口公园
上海轨道交通17号线
即原来的轻轨L3线,起讫点为上海西站- 军工路
上海轨道交通18号线
即原来的轻轨L5线,起讫点为长江西路- 华夏中路
线路新旧名称对照表
1号线 R1 (地铁一号线)
2号线 R2 (地铁二号线)
3号线 M3(明珠线一期,俗名轻轨(注)
4号线 M4 ( 明珠线二期)
5 号线 莘闵线(R1的一部分)
6号线 L4(浦东轻轨)
7号线 M7
8 号线 M8(杨浦线 )
9号线 R4(申松线)
10号线 M1
11号线 R3
12号线 M2
13号线 M5
14号线 M6
15号线 L1
16号线 L2
17号线 L3
18号线 L5
注:3号线为高架地铁,但普通市民经常将其误解为轻轨。
R: 市域级快速地铁(连接郊区与市中心)
M: 市级快速地铁(连接中心城区)
L:轻轨(载客量较地铁少,作为地铁的补充)
运营商
除轨道交通5 号线由上海现代轨道交通股份有限公司经营外,其余3条暂由上海地铁运营有限公司经营。
POPO 转载自《侬好!上海》
微软陈永正辞职信及上司回复(中英文对照)
ugmbbc发布于 2007-09-19 16:53:39| 540 次阅读 字体:大 小 打印预览
感谢发掘网的投递
我想同大家分享一下关于我本人未来计划的一项艰难决定。今天晚些时候,我将宣布从微软公司离任,转入一个全新的领域工作。想到即将告别这份不可思议的工作,离开四年来我有幸在微软遇到的诸位杰出的同事,我心情颇为沉重。
我们共同完成了很多人认为无法完成的工作。在短短的几年里,我们确定了推进微软中华区业务发展的清晰而稳固的战略框架。我们的销售增长了几乎一倍,大中华区的销售收入突破了10亿美元。过去的三年里,在中国大陆,我们将销售(含coverec OEMs)业绩提高了两倍,并为2008财年实现10亿美元的目标做好了准备。我们将未经授权的电脑使用率(CPU)降低了20多了百分点;新雇用了几百名员工;将业务运营扩展到了中国大陆、香港、台湾15个以上的城市。我们还加强了同客户和合作伙伴的关系,不仅在本地区乃至全球改变了人们看待微软的方式。
最重要的是,我们运用我们的技术帮助中国大陆、香港、台湾许许多多的人改善他们的生活和生计。一路走来。从你们每个人身上,我学到了很多;你们使我无法忘记我在微软经历。
诚然,变化总会伴随着一些不确定。但是,有一点我坚信不疑,那就是,公司有能力延续我们已经开始了的成功,我们已经制定了经过仔细斟酌的交接计划,并出世界最好的领导团队来完成。我对目前的管理团队及其战略充满信心,毕竟Big Rocks计划已经就为。毫无疑问,在不久的将来,微软大中华区谈论不再是10亿美元的突破,而是50亿美元新纪录的创造。
今天下午四点,我们将在现代汽车大厦召开全体员工大会介绍我的计划和详细的工作交接方案。最后,我想对微软大中华区的每一位员工表达我深深的谢意,感谢你们的辛勤工作,感谢你们为我们的成功所做的贡献。
陈永正
Tim Chen
英文版:
【发掘网讯】 I want to share with you some difficult news about my future plans. Later today, I will announce that I have resigned from Microsoft and will be taking a position in a different filed. It is not without a heavy heart that I contemplate leaving the incredible work and extraordinary people that I have been privileged to encounter during my four years at Microsoft.
Together, we have accomplished what some might have thought could not be done. In a few short years, we have defined a clear and stable strategic framework for Microsoft’s business in the Greater China region. We have nearly doubled sales and have broken through the $1 billion mark in revenue in GCR. In China itself, we have tripled our sales in the last three years. Including those of covered OEMs, and we are posed to hit $ 1 billion in FY08. we have reduced the UPC rate by more than 20%. We have added hundreds of new people and expanded our operations to more than 15 locations across the region. We have strengthened our customer and partner relationships and transformed the way people view Microsoft, not just locally but all around the globe as well.
Most importantly, we’ve been able to use our technology to help improve the lives and livelihood of millions of people throughout the Greater China region. I have learned from each of you along the way and you have made my experience at Microsoft one that I will never forget.
While change always comes with its share of unknowns, there is one thing that I have absolutely no question about, and that is this organization’s ability to continue the great work that we’ve begun. We have a well-thought our transltion plan in place and some of the finest leadership in the team and in our strategy with the Big Rocks plan in place. I have no doubt that in the very near future, Microsoft Greater China region will no longer be talking about breaking through the $1 billion but about the $5 billion mark. J
At 4 PM today, we will have an all-hands meeting in the Millennium Building to discuss my plans and the transition in more detail. In the meantime, I’d like to express my deep thanks to every one of you in the Microsoft Greater China region for your hard work and for your contribution to our continued success.
Tim Chen
微软大中华区回复:
我要感谢Tim为微软所作的贡献,并祝愿他在新的工作中一切顺利。在中国IT产业重要的发展时期,Tim同大中华区的高层管理团队一道为我们的业务制定了方向并领导了业务的发展。对微软大中华区来说,过去的四年的确是非凡的四年。我相信这仅仅是成功的开始,在未来的岁月里,我们将延续这种成功。
然而,变化从来都不是一件轻松的事。Tim对公司架构、大中华区的高层管理团队以及公司的市场前景充满信心,我同样充满信心。我们的交接计划完善,并已开始物色负责微软大中华区业务的新的首席执行官,预计将在2008年年初宣布新的任命。在此期间,我很高兴地宣布负责微软中国研发集团的全球资深副总裁张亚勤将即刻出任代理首席执行官,并直接向我汇报。亚勤仍将负责由1,500名员工组成的研发集团。
同时,我将任命Peter Cray临时负责管理市场,销售与服务业务,汇报给亚勤,同时也将跟我一道密切工作,作为代理COO,Peter Cray即日起将同大中华区的高层管理团队一道负责公司日常运营工作。我对他的领导才能充满信心,期待着与Peter和亚勤一道确保交接顺利,使大中华区的业务保持持续发展的势头。
未来充满着不可思议的机会。诸位正在为微软大中华区不断取得成功竭诚尽敬,我对各位的工作充满信心。在我对中国大陆、香港、台湾的工作访问中,有机会同你们当中的许多人一起工作,了解到你们所处的区域幅员辽阔、生机勃勃。我将致力于扩大微软在过去的五年中所作的投入,使大中华区不仅在业务上取得前所未有的成长,而且成为微软促进实现下一个10亿人获得社会和经济持续发展这一长期愿景的实证。
我们对大中华区的发展雄心勃勃。我期待着与诸位以及大中华区高层管理团队一道共同实现我们的雄心壮志,在2008财年继续保持我们的发展势头。
谢谢!
转载请注原文地址:
中文版:http://www.itdigger.com/2007/09/19/151431421.htm
英文版:http://www.itdigger.com/2007/09/19/15115378.htm
http://plod.popoever.com/archives/000737.html
微软ceo
分类: 耳边风
Steve Ballmer的过激反应
看到这么一个花边新闻,是从M$诉Google聘用李开复一案的一份名为Declaration of Mark Lucovsky(Mark Lucovsky的声明)的文件中流出来的,关于M$的CEO Steve Ballmer在其中有大量four-letter-word,属于限制级......
文中Mark Lucovsky在2004年11月4日离开微软去Google之前和Ballmer曾有过一次谈话
Prior to joining Google, I set up a meeting on or about November 11, 2004 with Microsoft's CEO Steve Ballmer to discuss my planned departure....At some point in the conversation Mr. Ballmer said: "Just tell me it's not Google." I told him it was Google.
然后,Ballmer便有了这样一席惊人的举动和言辞
而最新的消息是
Ballmer yesterday dismissed Lucovsky’s version of the events as “a gross exaggeration of what took place”. He said the engineer’s decision to leave Microsoft was “disappointing”. “I urged him strongly to change his mind,” Ballmer said. “His characterisation of that meeting is not accurate.”
这个乱哟!Gentlemen都哪里去了?厕所门上?
via battellemedia & Business Telegraph
Posted by POPOEVER at 2005年09月05日 00:56 |
back to top
Trackback Pings
本篇日志的回溯引用地址:
http://plod.popoever.com/acp630/mt-tb.cgi/761
$tnsping idmp
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production on 18-9月 -2
007 13:56:26
Copyright (c) 1997 Oracle Corporation. All rights reserved.
已使用的参数文件:
C:\oracle\ora92\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = MICROSOF-365DB3)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SE
RVICE_NAME = idmp)))
OK(50毫秒)
SQL>
select trunc(sysdate ,'dd') from dual ; -- 2007-9-19
select trunc(sysdate ,'yyyy') from dual ; --2007-1-1
select trunc(sysdate ,'mm') from dual ; --2007-9-1
begin
dbms_output.put_line( to_char ( (sysdate) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( to_char ( (sysdate)+ 1/24/60/10 , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( to_char ( ((sysdate)+ 10 / ( 24*60*60 ) ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( to_char ( trunc((sysdate)+ 10 / ( 24*60*60 ) ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
end ;
/
begin
dbms_output.put_line( '当前时间 ' ) ;
dbms_output.put_line( to_char ( (sysdate) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( '当前时间 + 1 s ' ) ;
dbms_output.put_line( to_char ( (sysdate)+ (((1/24)/60)/60 ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( '当前时间 + 1 s ' ) ;
dbms_output.put_line( to_char ( (sysdate)+ (((5/24)/60)/60 ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( '当前时间 + 10s ' ) ;
dbms_output.put_line( to_char ( ((sysdate)+ ( 10 / ( 24*60*60 )) ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( '当前 日 ' ) ;
dbms_output.put_line( to_char ( trunc((sysdate)) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( '当前 第2天 1点 ' ) ;
dbms_output.put_line( to_char ( trunc(sysdate)+( 1 + 1/24 ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
dbms_output.put_line( '当前 第2天 9点 ' ) ;
dbms_output.put_line( to_char ( trunc(sysdate)+( 1 + 9/24 ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;
end ;
/
摘要: oracle 导数据引起的一些问题
阅读全文
[转载] oracle-快速删除重复的记录
文/Ray
做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。
对此,总结了一下删除重复记录的方法,以及每种方法的优缺点。
为了陈诉方便,假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,并且,col1,col2上加了索引。
1、通过创建临时表
可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:
creat table tbl_tmp (select distinct* from tbl);
truncate table tbl;//清空表记录
insert into tbl select * from tbl_tmp;//将临时表中的数据插回来。
这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。
2、利用rowid
在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同。SQL语句如下:
delete from tbl
where rowid in ( select a.rowid
from tbl a, tbl b
where a.rowid>b.rowid
and a.col1=b.col1 and a.col2 = b.col2)
如果已经知道每条记录只有一条重复的,这个sql语句适用。但是如果每条记录的重复记录有N条,这个N是未知的,就要考虑适用下面这种方法了。
3、利用max或min函数
这里也要使用rowid,与上面不同的是结合max或min函数来实现。SQL语句如下
delete from tbl a
where rowid not in (select max(b.rowid)
from tbl b
where a.col1=b.col1 and a.col2 = b.col2);//这里max使用min也可以
或者用下面的语句
delete from tbl a where rowid < (select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//这里如果把max换成min的话,前面的where子句中需要把"<"改为">"
跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。SQL语句如下:
delete from tbl
where rowid not in (select max(rowid)
from tbl t
group by t.col1, t.col2 );
delete from tbl
where (col1, col2) in (select col1,col2 from tbl group by col1,col2 having count(*) > 1) -- 只有一条记录的不参与
and
rowid not in (select nin(rowid) from tbl group by col1,col2 having count(*) > 1) -- 分组根据主建 同组中出1个rowid
还有一种方法,对于表中有重复记录的记录比较少的,并且有索引的情况,比较适用。假定col1,col2上有索引,并且tbl表中有重复记录的记录比较少,SQL语句如下4、利用group by,提高效率
[转]SQL Server和Oracle的常用函数对比 |
---------数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16 10.取平方根 S:select SQRT(4) value 2 O:select SQRT(4) value from dual 2 11.求任意数为底的幂 S:select power(3,4) value 81 O:select power(3,4) value from dual 81 12.取随机数 S:select rand() value O:select sys.dbms_random.value(0,1) value from dual; 13.取符号 S:select sign(-8) value -1 O:select sign(-8) value from dual -1 ----------三角函数相关 14.圆周率 S:SELECT PI() value 3.1415926535897931 O:不知道 15.sin,cos,tan 参数都以弧度为单位 例如:select sin(PI()/2) value 得到1(SQLServer) 16.Asin,Acos,Atan,Atan2 返回弧度 17.弧度角度互换(SQLServer,Oracle不知道) DEGREES:弧度-〉角度 RADIANS:角度-〉弧度 ---------数值间比较 18. 求集合最大值 S:select max(value) value from (select 1 value union select -2 value union select 4 value union select 3 value)a O:select greatest(1,-2,4,3) value from dual 19. 求集合最小值 S:select min(value) value from (select 1 value union select -2 value union select 4 value union select 3 value)a O:select least(1,-2,4,3) value from dual 20.如何处理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl --------字符串函数 21.求字符序号 S:select ascii('a') value O:select ascii('a') value from dual 22.从序号求字符 S:select char(97) value O:select chr(97) value from dual 23.连接 S:select '11'+'22'+'33' value O:select CONCAT('11','22')||33 value from dual 23.子串位置 --返回3 S:select CHARINDEX('s','sdsq',2) value O:select INSTR('sdsq','s',2) value from dual 23.模糊子串的位置 --返回2,参数去掉中间%则返回7 // 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=996&d=dwn1rn S:select patindex('%d%q%','sdsfasdqe') value O:oracle没发现,但是instr可以通过第四个参数控制出现次数 select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6 24.求子串 S:select substring('abcd',2,2) value O:select substr('abcd',2,2) value from dual 25.子串代替 返回aijklmnef S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual 26.子串全部替换 S:Replace O:select Translate('fasdbfasegas','fa','我' ) value from dual 27.长度 S:len,datalength O:length 28.大小写转换 lower,upper 29.单词首字母大写 S:没发现 O:select INITCAP('abcd dsaf df') value from dual 30.左补空格(LPAD的第一个参数为空格则同space函数) S:select space(10)+'abcd' value O:select LPAD('abcd',14) value from dual 31.右补空格(RPAD的第一个参数为空格则同space函数) S:select 'abcd'+space(10) value O:select RPAD('abcd',14) value from dual 32.删除空格 S:ltrim,rtrim O:ltrim,rtrim,trim 33. 重复字符串 S:select REPLICATE('abcd',2) value O:没发现 34.发音相似性比较(这两个单词返回值一样,发音相同) S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差 返回0-4,4为同音,1最高 --------------日期函数 35.系统时间 S:select getdate() value O:select sysdate value from dual 36.前后几日 直接与整数相加减 37.求日期 S:select convert(char(10),getdate(),20) value O:select trunc(sysdate) value from dual select to_char(sysdate,'yyyy-mm-dd') value from dual 38.求时间 S:select convert(char(8),getdate(),108) value O:select to_char(sysdate,'hh24:mm:ss') value from dual 39.取日期时间的其他部分 S:DATEPART 和 DATENAME 函数 (第一个参数决定) O:to_char函数 第二个参数决定 参数---------------------------------下表需要补充 year yy, yyyy quarter qq, q (季度) month mm, m (m O无效) dayofyear dy, y (O表星期) day dd, d (d O无效) week wk, ww (wk O无效) weekday dw (O不清楚) Hour hh,hh12,hh24 (hh12,hh24 S无效) minute mi, n (n O无效) second ss, s (s O无效) millisecond ms (O无效) ---------------------------------------------- 40.当月最后一天 S:不知道 O:select LAST_DAY(sysdate) value from dual 41.本星期的某一天(比如星期日) S:不知道 O:SELECT Next_day(sysdate,7) vaule FROM DUAL; 42.字符串转时间 S:可以直接转或者select cast('2004-09-08'as datetime) value O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL; 43.求两日期某一部分的差(比如秒) S:select datediff(ss,getdate(),getdate()+12.3) value O:直接用两个日期相减(比如d1-d2=12.3) SELECT (d1-d2)*24*60*60 vaule FROM DUAL; 44.根据差值求新的日期(比如分钟) S:select dateadd(mi,8,getdate()) value O:SELECT sysdate+8/60/24 vaule FROM DUAL; 45.求不同时区时间 S:不知道 O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL; -----时区参数,北京在东8区应该是Ydt------- AST ADT 大西洋标准时间 BST BDT 白令海标准时间 CST CDT 中部标准时间 EST EDT 东部标准时间 GMT 格林尼治标准时间 HST HDT 阿拉斯加—夏威夷标准时间 MST MDT 山区标准时间 NST 纽芬兰标准时间 PST PDT 太平洋标准时间 YST YDT YUKON标准时间 Oracle支持的字符函数和它们的Microsoft SQL Server等价函数: 函数 Oracle Microsoft SQL Server 把字符转换为ASCII ASCII ASCII 字串连接 CONCAT (expression + expression) 把ASCII转换为字符 CHR CHAR 返回字符串中的开始字符(左起) INSTR CHARINDEX 把字符转换为小写 LOWER LOWER 把字符转换为大写 UPPER UPPER 填充字符串的左边 LPAD N/A 清除开始的空白 LTRIM LTRIM 清除尾部的空白 RTRIM RTRIM 字符串中的起始模式(pattern) INSTR PATINDEX 多次重复字符串 RPAD REPLICATE 字符串的语音表示 SOUNDEX SOUNDEX 重复空格的字串 RPAD SPACE 从数字数据转换为字符数据 TO_CHAR STR 子串 SUBSTR SUBSTRING 替换字符 REPLACE STUFF 将字串中的每个词首字母大写 INITCAP N/A 翻译字符串 TRANSLATE N/A 字符串长度 LENGTH DATELENGTH or LEN 列表中最大的字符串 GREATEST N/A 列表中最小的字符串 LEAST N/A 如果为NULL则转换字串 NVL ISNULL 日期函数 函数 Oracle Microsoft SQL Server 日期相加 (date column +/- value) or ADD_MONTHS DATEADD 两个日期的差 (date column +/- value) or MONTHS_BETWEEN DATEDIFF 当前日期和时间 SYSDATE GETDATE() 一个月的最后一天 LAST_DAY N/A 时区转换 NEW_TIME N/A 日期后的第一个周日 NEXT_DAY N/A 代表日期的字符串 TO_CHAR DATENAME 代表日期的整数 TO_NUMBER (TO_CHAR)) DATEPART 日期舍入 ROUND CONVERT 日期截断 TRUNC CONVERT 字符串转换为日期 TO_DATE CONVERT 如果为NULL则转换日期 NVL ISNULL 转换函数 函数 Oracle Microsoft SQL Server 数字转换为字符 TO_CHAR CONVERT 字符转换为数字 TO_NUMBER CONVERT 日期转换为字符 TO_CHAR CONVERT 字符转换为日期 TO_DATE CONVERT 16进制转换为2进制 HEX_TO_RAW CONVERT 2进制转换为16进制 RAW_TO_HEX CONVERT 其它行级别的函数 函数 Oracle Microsoft SQL Server 返回第一个非空表达式 DECODE COALESCE 当前序列值 CURRVAL N/A 下一个序列值 NEXTVAL N/A 如果exp1 = exp2, 返回null DECODE NULLIF 用户登录账号ID数字 UID SUSER_ID 用户登录名 USER SUSER_NAME 用户数据库ID数字 UID USER_ID 用户数据库名 USER USER_NAME 当前用户 CURRENT_USER CURRENT_USER 用户环境(audit trail) USERENV N/A 在CONNECT BY子句中的级别 LEVEL N/A 合计函数 函数 Oracle Microsoft SQL Server Average AVG AVG Count COUNT COUNT Maximum MAX MAX Minimum MIN MIN Standard deviation STDDEV STDEV or STDEVP Summation SUM SUM Variance VARIANCE VAR or VARP Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域: EXTRACT(YEAR FROM 日期)
|
文章比较乱 如果认真看 是可以看懂的
thinkpad 或者任意什么软件映射 基本都是这套东西
注意不熟悉的人先备份注册表。
1 注册表 关于键盘映射的
其實很多web browser都支持mouse gesture能夠做到backward, forward。用小紅點很方便﹐所以覺得用不到那兩個鍵。
具體步驟如下﹕
打開regedit﹐找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\KeyBoard Layout
注意﹐是keyboard layout﹐不是keyboard layouts
鼠標右鍵點擊keyboard layout﹐選擇New\Binary Value
把Name改成Scancode Map。
然後雙擊Scancode Map。這時會跳出一個窗口供輸入新值。
如果要backward->windows, forward -> Application
就輸入如下值﹕
00 00 00 00 00 00 00 00
03 00 00 00 5b e06a e0
5d e0 69 e0 00 00 00 00
其中第一行的8個00是固定的header
第二行的03 00 00 00代表後面有三個mapping﹕
5b e0 6a e0,5b e0是windows鍵的scancode,6a e0是backward
5d e0 69 e0,5d e0是application, 69 e0是forward
00 00 00 00 (這是一個null terminator mapping)
2 关于我想要的功能
RemapKey.exe 软件 修改没个功能到键任意 然后观察 注册表上面那个项的 变化就可以分析得到 结果。
然后。。。
---------------------
下面是参考的文章
Application 5d e0 windows 5b e0
其中第一行的8個00是固定的header 第二行的03 00 00 00代表後面有三個mapping﹕ 5b e0 6a e0,5b e0是windows鍵的scancode,6a e0是backward 5d e0 69 e0,5d e0是application, 69 e0是forward 00 00 00 00 (這是一個null terminator mapping)
這個對我來說就比較簡單了,回報一下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\IBM\TPHOTKEY\8001] "DispName"="Access IBM" "File"="C:\\Program Files\\IBM\\Access IBM\\aibm.exe"
把File路徑改成你要啟動的程式即可,如果是在RegEdit裡直接修改的話,改完後按F5更新即可立即作用,不需登出也不需重啟。
------------------------------------------------------------------
多謝X31和Dark Jedi指出“修改完後只需登出再登入即可” 以及“.reg第一句一定要先加 "Windows Registry Editor Version 5.00" 。
據我所知Fn鍵是沒有Scancode的﹐好像是IBM自己的driver 來handle這個鍵的﹐不過我也不肯定。如果是這樣的話﹐要 定義Fn+其他Fx恐怕也比較難吧。
不過我看到過在linux裡把Thinkpad鍵remap成啟動任意程序的﹐不知道在Windows XP裡要怎麼做。
01 1 Esc ?2 18 E ?3 35 H ?4 52 . > ?5 69 NumLock 02 2 1 ! ?3 19 R ?4 36 J ?5 53 / ? ?6 70 ScrollLck 03 3 2 @ ?4 20 T ?5 37 K ?6 54 Shft(R)?7 71 Home [7] 04 4 3 # ?5 21 Y ?6 38 L ?7 55 * PrtSc?8 72 ^ [8] 05 5 4 $ ?6 22 U ?7 39 ; : ?8 56 Alt ?9 73 PgUp [9] 06 6 5 % ?7 23 I ?8 40 " ' ?9 57 space ?a 74 K - 07 7 6 ^ ?8 24 O ?9 41 ` ~ ?a 58 CapsLck?b 75 < [4] 08 8 7 & ?9 25 P ?a 42 Shft(L)?b 59 F1 ?c 76 [5] 09 9 8 * ?a 26 [ { ?b 43 \ | ?c 60 F2 ?d 77 > [6] 0a 10 9 ( ?b 27 ] } ?c 44 Z ?d 61 F3 ?e 78 K + 0b 11 0 ) ?c 28 Enter?d 45 X ?e 62 F4 ?f 79 End [1] 0c 12 - _ ?d 29 Ctrl ?e 46 C ?f 63 F5 ?0 80 v [2] 0d 13 + = ?e 30 A ?f 47 V ?0 64 F6 ?1 81 PgDn [3] 0e 14 bksp?f 31 S ?0 48 B ?1 65 F7 ?2 82 Ins [0] 0f 15 Tab ?0 32 D ?1 49 N ?2 66 F8 ?3 83 Del [.] 10 16 Q ?1 33 F ?2 50 M ?3 67 F9 ?11 17 W ?2 34 G ?3 51 ,
< ?4 68 F10 ?============================================================================
======================================================================== Key Hex Sequence ?Key Hex Sequence ======================================================================== F11 ..................... 57 ?Home ........ e0 47 F12 ..................... 58 ?Shft-Home ... e0 aa e0 47 Right-Alt ............... e0 38 ?End ......... e0 4f Right-Ctrl .............. e0 1d ?Shft-End .... e0 aa e0 4f PrintScreen ............. e0 2a e0 37 ?^ ........... e0 48 Shft-PrintScreen (SysReq) e0 37 ?Shft-^ ...... e0 aa e0 48 Ctrl-PrintScreen (SysReq) e0 37 ?v ........... e0 50 Alt-PrintScreen ......... 54 ?Shft-v ...... e0 aa e0 50 Pause ................... e1 1d 45 e1 9d c5 ?PageUp ...... e0 49 Ctrl-Pause (Break) ...... e0 46 e0 c6 ?Shft-PageUp . e0 aa e0 49 Insert .................. e0 52 ?PageDown .... e0 51 Shft-Insert ............. e0 aa e0 52 ?Shft-PageDown e0 aa e0 51 Delete .................. e0 53 ?> ........... e0 4d Shft-Delete ............. e0 aa e0 53 ?Shft-> ...... e0 aa e0 4d < ....................... e0 4b ?K Enter ..... e0 1c Shft-< .................. e0 aa e0 4b ?K / ......... e0 35 ?Shft-K / .... e0 aa e0 35 ========================================================================
53 e0 5d e0
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\ACD Systems\ACDInTouch] "InTouchSettings"=hex:01,01,3d,00,00,00,00,00,07,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,50,00,\ 00,00 这个数据怎么用RegWrite函数来学徒写入注册表呢?请大家共同来探讨一下,这个问题困扰我很久了。
网友观点: 匿名 - [2006-7-5 21:34:00] 这个,不能用.reg的哪,只好用.exe才能完成 2006-6-28 0:13:00 ban_r 等级:丐帮弟子文章:19 积分:234 门派:无门无派注册:2004年6月2日 第 3 楼 --------------------------------------------------------------------------------
我们屏蔽左"WIN"键的注册表:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,00,00,5B,E0,00,00,00,00
用AUTOIT来写入的话可以这样写:
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\keyboard Layout","Scancode Map","REG_BINARY","00000000000000000200000000005be000000000")
大 | 中 | 小
[ 13:17 | by bigfee ]
IBM笔记本添加win键办法- - 一、Win 键修改大法第一重:hotkey tool 首先想到的是可以用驻留内存的软件来拦截键盘操作。。找到了这样的一个软件 TPKey to WinKey http://netcity2.web.hinet....这个软件可以利用 ThinkPad 键启动各种 WinKey 组合热键 与 其它特殊功能。。。呵呵。。是专门针对 IBM 机型开发的耶! 但是这个是要驻留内存的。。白白消耗了系统资源。。不爽!所以继续查找 。 二、Win 键修改大法第二重:修改注册表 呵呵。。找到了一个通过修改注册表来实现的方式,可以把 Alt 或 Ctrl 键来模拟 Win 键,这个方式可是实现了系统资源的零消耗。。哈哈。。 有位日本人写了很好的一个网页,免费的: http://www.flowering.ne.jp...(请将 IE 的「编码方式」改为「日文(自动选择)」即可读取。 在该页,选择看是 Win 2000 or Win NT,然后设定 remap 的机制,再将「入替有效」打勾即可。最多可以同时 remap 四个键。我是将右边的 Alt remap 成左边的 windows key。然后将产生的码存起来,存成 remap.reg,执行该档即可更新你的 keyboard 的 mapping。 如果有人也想将右边的 Alt 键变成 Windows key, 可以直接将这段 code 存成 remap.reg,执行即可: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout] \"Scancode Map\"=hex:00,00,00,00,00,00,00,00,\\ 02,00,00,00,\\ 5b,e0,38,e0,\\ 00,00,00,00 但是这个方式只能在 2000/Nt 系统下有效。。如果用的是 95/98 怎么办呢? 想来想去,好像以前在微软的 PowerToys 中看到有自定义键盘的东西,马上转向微软的网站。。一番搜索。。终于。。 三、Win 键修改大法第三重: RemapKey 谢谢您能看到这里,说明您和我一样,真的需要 Win 键了。。所以下面推出 终极完美方案: RemapKey !!!微软工具,而且是直接修改注册表,也是零消耗的耶。。 1. Windows 95/98: 到 http://www.microsoft.com/W...下载 Windows 95 Kernel Toys Set 执行 Keyboard Remap 2. Windows 2000: 需要 Windows 2000 Resource Kit 里的 RemapKey,可到 http://www.dynawell.com/su... 下载 注意:For Windows 2000 的这个 RemapKey 是笔者看到过得功能最强大的键盘 Remap 工具,竟然可以重新定义键盘上的每一个按钮功能。。。爽!!! 注:另外还找到了不少其它的软件,不过或多或少都存在一些问题,所以就不向大家介绍了。。呵呵。。欢迎大家多多交流笔记本的使用心得。 ===================================================== 以下内容是在 www.ibmuser.idv.tw 论坛上找到的,对于IBM的键映射提供了完善的解决方案。现在该网站已经关闭,只能在google的cache中可以看到。 發表於: 07-08-2003 07:09 PM 文章主題: -------------------------------------------------------------------------------- 其實很多web browser都支持mouse gesture能夠做到backward, forward。用小紅點很方便﹐所以覺得用不到那兩個鍵。 具體步驟如下﹕ 打開regedit﹐找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\KeyBoard Layout 注意﹐是keyboard layout﹐不是keyboard layouts 鼠標右鍵點擊keyboard layout﹐選擇New\Binary Value 把Name改成Scancode Map。 然後雙擊Scancode Map。這時會跳出一個窗口供輸入新值。 如果要backward->windows, forward -> Application 就輸入如下值﹕ 00 00 00 00 00 00 00 00 03 00 00 00 5b e0 6a e0 5d e0 69 e0 00 00 00 00 其中第一行的8個00是固定的header 第二行的03 00 00 00代表後面有三個mapping﹕ 5b e0 6a e0,5b e0是windows鍵的scancode,6a e0是backward 5d e0 69 e0,5d e0是application, 69 e0是forward 00 00 00 00 (這是一個null terminator mapping) 然後reboot﹐就大功告成了﹐backward變成windows﹐forward變成application. 另外還有一個更簡單的辦法就是把下面的內容寫到notepad裡﹐然後存成.reg文檔﹕然後雙擊此文檔就會自動load進registry裡 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,5d,e0,69,e0,5b,e0,6a,e0,00,00,00,00 這個辦法我沒試過﹐如果你試成功﹐請也一並告訴我﹐謝謝。 --------------------------------------------------------------------------------- 補充一些常用代碼好了 Code -- Key 38,00 Left {Alt} 38,E0 Right {Alt} 1D,00 Left {Ctrl} 1D,E0 Right {Ctrl} 2A,00 Left {Shift} 46,00 Right {Shift} 3A,00 {Caps Lock} 5B,E0 Left {Windows} 5C,E0 Right {Windows} 3B,00 {F1} 3C,00 {F2} 3D,00 {F3} 3E,00 {F4} 3F,00 {F5} 40,00 {F6} 41,00 {F7} 42,00 {F8} 43,00 {F9} 44,00 {F10} 57,00 {F11} 58,00 {F12} ------------------------------------------------------------------ 多謝X31和Dark Jedi指出“修改完後只需登出再登入即可” 以及“.reg第一句一定要先加 "Windows Registry Editor Version 5.00" 。 據我所知Fn鍵是沒有Scancode的﹐好像是IBM自己的driver 來handle這個鍵的﹐不過我也不肯定。如果是這樣的話﹐要 定義Fn+其他Fx恐怕也比較難吧。 如果有時間和興趣的話這裡有一系列討論可能會有幫助﹕ http://www.annoyances.org/...不過我看到過在linux裡把Thinkpad鍵remap成啟動任意程序的﹐不知道在Windows XP裡要怎麼做。 -------------------------------------------------------------------- 這個對我來說就比較簡單了,回報一下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\IBM\TPHOTKEY\8001] "DispName"="Access IBM" "File"="C:\\Program Files\\IBM\\Access IBM\\aibm.exe" 把File路徑改成你要啟動的程式即可,如果是在RegEdit裡直接修改的話,改完後按F5更新即可立即作用,不需登出也不需重啟。
妙用注册表 空手打造多媒体键盘
|
|
作者:刘明星 文章来源:yesky 点击数:
11 更新时间:2007-1-28 12:42:57 |
|
前 言
|
|
|
|
现在许多高档的多媒体键盘都有一些附加的功能键,通过这些功能键可以方便地实现音量调节、网页浏览、收发邮件等功能。只须手指轻轻一按,即可轻松遨游互联网络及多媒体世界,看着别人一键定乾坤的样子实在有点羡慕,无奈身上银子不多消受不起,难道就没有办法了吗?非也!实际上微软在Windows XP/Windows 2000 系统中,提供了一种新的键盘扫描码映射方法,使你能随意地设置键盘键位的布局。大家打开本文的第二页就可以看到详细的内容,第一页我们主要讲一些以前的专题和文章为这篇文章做个补充。 |
注册表使用技巧
|
|
|
|
如何更安全更有效的使用注册表,原野想很多朋友都希望了解,下面讲一些大全给大家。
·注册表实战集锦 下面讲一些注册表常用的修改方法[点这里看具体操作方法] ·Windows注册表应用的30个实例 这里主要给大家讲一些针对某些功能如何通过修改注册表来实现[点这里看具体操作方法] ·恶意网页修改注册表的12种现象 网友在浏览网页时,屡屡发生注册表被修改,更有甚者使浏览者的电脑在启动时出现一个提示窗口显示自己的广告,而且有愈演愈烈之势,遇到这种情况我们该怎样办呢?下面给大家讲讲遇到这种情况的应对方法[点这里看如何应对] ·注册表相关知识应用视频 对我们大多数人而言,注册表就像我们汽车上的密封垫片:我们知道它在那里,它至关重要而且我们感觉不到它的存在。本视频教程就来教你彻底征服注册表。[点这里看视频教程]
·注册表应用专区 专区中包含了基础知识,应用技巧,相关应用软件等内容。是我们对所在与注册表相关文章的一个系统性总结。[点这里看具体内容] |
|
Windows一键操作技巧 |
|
|
|
因为文章中有一键操作的相关设置,所以我们也给大家讲讲如何实现更多的一键操作。
·一“键”行天下 Windows一键操作技巧
一键操作,顾名思义就是指通过设置,可以用键盘上的一个按键来操作系统的某项功能,这些功能能让我们快速,方便的操作系统Windows,大大提高了使用效率。在下面的文章中,笔者就给大家介绍一些Windows操作系统的一键操作技巧,希望能给你使用电脑带来一定的帮助。
|
|
“一键”切换、锁定用户
|
|
一键休眠
|
一键关闭主机电源
|
一键使用屏保
|
一键抓图
|
一键打开网页
|
一键添加收藏网址
|
IE窗口一键隐藏
|
一键修复IE
|
一键完成网络诊断
|
一键打开记事本
|
一键“复印”资料
|
一键恢复
|
一键安装程序
|
一键启动所有聊天程序
|
QQ实现一键登录
|
一键排版
·“一键钟情” 让你的Windows聪明起来
“一键钟情”可以让普通的键盘变成功能强大的多功能键盘,它可让你按键控制系统音量、关机、重启、显示时间、锁定计算机、截取屏幕颜色、图像。[点这里看具体内容]
·系统崩溃无需重装 打造F11一键恢复系统
蓝巨人IBM的F11功能非常不错,无须启动盘。系统崩溃按下F11就自动恢复了,可惜为了这F11叫我等穷人去买IBM有点不太现实,难道我们就没办法了吗?
[点这里看如何自己打造F11键]
·一键关机——五种让你神速关机的技巧
平常关机,我们都要点击几下鼠标才能关闭系统,本文就给大家介绍五种一键关机的方法,方法不同,效果一样,大家可任选一种技巧进行设置。[点这里看具体方法]
现在许多高档的多媒体键盘都有一些附加的功能键,通过这些功能键可以方便地实现音量调节、网页浏览、收发邮件等功能。只须手指轻轻一按,即可轻松遨游互联网络及多媒体世界,看着别人一键定乾坤的样子实在有点羡慕,无奈身上银子不多消受不起,难道就没有办法了吗?
非也!实际上微软在Windows XP/Windows 2000 系统中,提供了一种新的键盘扫描码映射方法,使你能随意地设置键盘键位的布局,这就是注册表中的 “Scancode Map”(这可算是微软的一点人性化设计,不过遗憾的谴蠖嗍瞬⒉弧傲烨椤?。我们巧妙利用“Scancode Map”就可将普通键盘改造成准多媒体键盘。
而能改造的原因就在于多媒体键盘上的功能键通常也是通过扫描码(键盘处理器大部分时间在“扫描”, 监视着键矩阵. 一旦发现有键被按下,释放,或被按住不放,键盘处理器就会向计算机发送一个数据包,称为键盘扫描码)来实现的,因而在普通键盘上,只要将其他键位映射到这些功能键上即可实现这些功能。因而,我们的思路就是妙用注册表将键盘上一些比较“闲置”的键改造成功能键。下面我们就一起来将打造成多媒体键盘。
什么是“Scancode Map”?
我们有必要先了解一下“Scancode Map”(扫描码映射),“Scancode Map”是注册表中[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]中的一个二进制键值(默认没有,需新建),并且有固定的格式。Scancode Map 代码的一般格式是:“hex:00,00,00,00,00,00,00,00,|02|,00,00,00,|原键,替代键,原键,替代键,|00,00,00,00”。其含义为:前8个00(DWORD两个0)是版本号,接下来的“02”表示映射数,其最小为值为“02”,表示只映射一组,若要映射多组,只需增加相应的值即可,如映射2组其值应为“03”,3组为“04”;后边代码每4个是一组:前两个是映射后键位的扫描码,后两个是键位原扫描码。如果要交换两个键,则最后四个值的排列形式是:键A,键B,键B,键A——它表示:键A成为键B,键B成为键A。最后以“00,00,00,00” 结尾。了解了“Scancode Map”之后,我们就可以来利用添加功能键了。
1.调节音量功能键
现在许多多媒体键盘基本都有音量调节的功能键,当然利用一些小软件也可实现,而实际上利用“Scancode Map”更简单有效,下面的方法可将F9、F10改为音量控制键。
从图一(常用的可实现的功能键的扫描码)中查出Volume Up、Volume Down的扫描码分别为(E0,30)、(E0,2E),(Fn和WINS等键位的扫描码)中查出F9、F10扫描码分别为(00,43)、(00,44),注意在注册表中需要将二进制值的高低字节交换一下,套用上面的“Scancode Map”格式,"Scancode Map"=hex:00,00,00,00,00,00,00,
00,03,00,00,00,30,E0,43,00,2E,E0,44,00,00,00,00,00,因而将下面的内容输入记事本,另存为win.reg文件并双击导入注册表,:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,30,E0,43,00,2E,E0,44,00,00,00,00,00
然后重启电脑后,F9、F10就变成音量控制键,能一键调节音量大小了。我们还可以将F12改造成静音键,代码为:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,20,E0,58,00,00,00,00,00
2.网页浏览功能键
同样的道理,我们可将右Windows徽标键改为一键打开主页,代码如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,32,E0,5C,E0,00,00,00,00
导入注册表重启后,点击右Windows徽标键即可用IE打开主页。我们还可以添加刷新、搜索、打开收藏夹、前进、后退、停止等功能键,扫描码分别对应于图一中的WWWReflash、WWWSearch、WWWFavorates、WWWForward、WWWBack、WWWStop,在“Scancode Map”代码进行替换即可。
3.一键打开“我的电脑”
我们经常要用到“我的电脑”,若把它添加为键盘的功能键就方便多了。我们不妨将无用的Scroll Lock键改为“我的电脑”,其注册表代码如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,6B,E0,46,00,00,00,00,00
导入注册表重启后,点击Scroll Lock键即可打开“我的电脑”。
4.一键打开电子邮箱
许多人都有一开电脑就要打开电脑邮箱的习惯,显然如果键盘上有一个快速打开邮箱的功能键就省去了不少事。我们不妨将右Windows徽标键旁边的右键菜单键改为邮箱开启功能键,其注册表代码如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,6C,E0,5D,E0,00,00,00,00
导入注册表重启后,点击右键菜单键即可用Outlook Express 打开你的电子邮箱。
5.一键打开媒体播放器
现在一些多媒体键盘中有快速打开媒体播放器的功能键(通常与特定播放器配搭),而我们利用“Scancode Map”也能实现。我们不妨将F5设为打开播放器的功能键,注册表代码如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,6D,E0,3F,00,00,00,00,00
导入注册表重启后,点击F5即可打开Windows Media player按你设定的播放列表进行播放,当然如果你还安装了其它播放器(如千千静听),则将用这些播放器打开播放。
从图一我们可以知道,除了上述已经提及的功能键,利用“Scancode Map”还能实现一键控制播放器的播放、一键打开计算器,大家可参照上面的方法实现。
怎么样,键盘能实现了上述的功能,是不是能称得上一个准多媒体键盘了?当然可能比不上真正的多媒体键盘功能强大和方便,但我们没花去一分钱,只是动了动手和脑,何乐而不为?
最后需要提醒各位读者特别注意的是:
1.如果你要同时实现多个修改,则需要按上面的“Scancode Map”格式,写入一段代码中(不可按顺序先后导入),例如我们也可以将上面提到所有的功能用下面的一段代码来实现,
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,07,00,00,00,6D,E0,3F,00,30,E0,
43,00,2E,E0,44,00,6B,E0,46,00,32,E0,4D,E0,6C,E0,5D,E0,00,00,00,00
2.将上述的任何一段代码导入注册表后,必须在重新启动电脑后,所有的修改才能生效,而诸如结束explorer.exe进程之类的方法是无效的。
3.若要恢复键盘键位原来的布局,只需定位于注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout],删除"Scancode Map"键值,然后重启电脑即可。
SQL> select *
2 from v$version
SQL>
SQL> select *
2 from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
PL/SQL Release 9.0.1.1.1 - Production
CORE 9.0.1.1.1 Production
TNS for 32-bit Windows: Version 9.0.1.1.0 - Production
NLSRTL Version 9.0.1.1.1 - Production
我在网上搜索到的 确实比较方便。
作者 qukmei
http://www.iecn.net/bbs/view/100080.html
如果在安装oracle92时,进行完全安装,就难免会出现一些问题,比如:被占用了8080,这个问题虽小,但我觉得很难受,晕,所以下狠心要修改了它。
启动sqlplus
sqlplus /nolog (这样启动也行。)
用sysdba登录,一定要这样!
SQL>connect user/pass as sysdba
改了8080端口
SQL>call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()', 9000)) /
改了ftp端口(这个想改就改吧)
SQL>call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()', 2111))
SQL> COMMIT;
SQL> EXEC dbms_xdb.cfg_refresh;
SQL> set long 100000
SQL> set pagesize 9000
SQL> SELECT dbms_xdb.cfg_get FROM dual;
这样就会发现信息改变了。
然后ie访问:http;//localhost:9000,就可以,那现在 8080就放开了。
当然还有两种办法,不过以上这种办法我认为最实用了,最有效了。
- qukmei 于 2005-12-20 18:17:57 编缉了该帖子
- qukmei 于 2005-12-20 18:20:27 编缉了该帖子 查看全部记录
http://club.techtarget.com.cn/blog/viewBlog.html?blogId=1876
博客主人
:
静心-心经
oracle处理日期大全 |
Tags: oracle处理日期大全 |
在oracle中处理日期大全
TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998
24小时格式下时间范围为: 0:00:00 - 23:59:59.... 12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 1. 日期和字符转换函数用法(to_date,to_char)
2. select to_char( to_date(222,'J'),'Jsp') from dual
显示Two Hundred Twenty-Two
3. 求某天是星期几 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 星期一 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; monday 设置日期语言 ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; 也可以这样 TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
4. 两个日期间的天数 select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
5. 时间为null的用法 select id, active_date from table1 UNION select 1, TO_DATE(null) from dual;
注意要用TO_DATE(null)
6. a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd') 那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。 所以,当时间需要精确的时候,觉得to_char还是必要的 7. 日期格式冲突问题 输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01' alter system set NLS_DATE_LANGUAGE = American alter session set NLS_DATE_LANGUAGE = American 或者在to_date中写 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; 注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多, 可查看 select * from nls_session_parameters select * from V$NLS_PARAMETERS
8. select count(*) from ( select rownum-1 rnum from all_objects where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002- 02-01','yyyy-mm-dd')+1 ) where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' ) not in ( '1', '7' )
查找2002-02-28至2002-02-01间除星期一和七的天数 在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).
9. select months_between(to_date('01-31-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 1
select months_between(to_date('02-01-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1.03225806451613 10. Next_day的用法 Next_day(date, day)
Monday-Sunday, for format code DAY Mon-Sun, for format code DY 1-7, for format code D
11 select to_char(sysdate,'hh:mi:ss') TIME from all_objects 注意:第一条记录的TIME 与最后一行是一样的 可以建立一个函数来处理这个问题 create or replace function sys_date return date is begin return sysdate; end;
select to_char(sys_date,'hh:mi:ss') from all_objects; 12. 获得小时数
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer SQL> select sysdate ,to_char(sysdate,'hh') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH') -------------------- --------------------- 2003-10-13 19:35:21 07
SQL> select sysdate ,to_char(sysdate,'hh24') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24') -------------------- ----------------------- 2003-10-13 19:35:21 19
获取年月日与此类似 13. 年月日的处理 select older_date, newer_date, years, months, abs( trunc( newer_date- add_months( older_date,years*12+months ) ) ) days from ( select trunc(months_between( newer_date, older_date )/12) YEARS, mod(trunc(months_between( newer_date, older_date )), 12 ) MONTHS, newer_date, older_date from ( select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date from emp ) )
14. 处理月份天数不定的办法 select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
16. 找出今年的天数 select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
闰年的处理方法 to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' ) 如果是28就不是闰年
17. yyyy与rrrr的区别 'YYYY99 TO_C ------- ---- yyyy 99 0099 rrrr 99 1999 yyyy 01 0001 rrrr 01 2001
18.不同时区的处理 select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate from dual;
19. 5秒钟一个间隔 Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS') from dual
2002-11-1 9:55:00 35786 SSSSS表示5位秒数
20. 一年的第几天 select TO_CHAR(SYSDATE,'DDD'),sysdate from dual 310 2002-11-6 10:03:51
21.计算小时,分,秒,毫秒 select Days, A, TRUNC(A*24) Hours, TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes, TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds, TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds from ( select trunc(sysdate) Days, sysdate - trunc(sysdate) A from dual )
select * from tabname order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');
// floor((date2-date1) /365) 作为年 floor((date2-date1, 365) /30) 作为月 mod(mod(date2-date1, 365), 30)作为日. 23.next_day函数 next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。 1 2 3 4 5 6 7 日 一 二 三 四 五 六
=================================== 在oracle中有很多关于日期的函数,如: 1、add_months()用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months) 例: SQL> select add_months(sysdate,12) "Next Year" from dual;
Next Year ---------- 13-11月-04
SQL> select add_months(sysdate,112) "Last Year" from dual;
Last Year ---------- 13-3月 -13
SQL>
2、current_date()返回当前会放时区中的当前日期 date_value:=current_date SQL> column sessiontimezone for a15 SQL> select sessiontimezone,current_date from dual;
SESSIONTIMEZONE CURRENT_DA --------------- ---------- +08:00 13-11月-03
SQL> alter session set time_zone='-11:00' 2 /
会话已更改。
SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP --------------- ------------------------------------ -11:00 12-11月-03 04.59.13.668000 下午 -11: 00
SQL>
3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) SQL> column sessiontimezone for a15 SQL> column current_timestamp format a36 SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP --------------- ------------------------------------ +08:00 13-11月-03 11.56.28.160000 上午 +08: 00
SQL> alter session set time_zone='-11:00' 2 /
会话已更改。
SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP --------------- ------------------------------------ -11:00 12-11月-03 04.58.00.243000 下午 -11: 00
SQL>
4、dbtimezone()返回时区 varchar_value:=dbtimezone SQL> select dbtimezone from dual;
DBTIME ------ -07:00
SQL>
5、extract()找出日期或间隔值的字段值 date_value:=extract(date_field from [datetime_value|interval_value]) SQL> select extract(month from sysdate) "This Month" from dual;
This Month ---------- 11
SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
3 Years Out ----------- 2006
SQL>
6、last_day()返回包含了日期参数的月份的最后一天的日期 date_value:=last_day(date_value) SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;
Leap Yr? ---------- 29-2月 -00
SQL> select last_day(sysdate) "Last day of this month" from dual;
Last day o ---------- 30-11月-03
SQL>
7、localtimestamp()返回会话中的日期和时间 timestamp_value:=localtimestamp SQL> column localtimestamp format a28 SQL> select localtimestamp from dual;
LOCALTIMESTAMP ---------------------------- 13-11月-03 12.09.15.433000 下午
SQL> select localtimestamp,current_timestamp from dual;
LOCALTIMESTAMP CURRENT_TIMESTAMP ---------------------------- ------------------------------------ 13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08: 下午 00
SQL> alter session set time_zone='-11:00';
会话已更改。
SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual;
LOCALTIMESTAMP SYSDATE ---------------------------- ------------------------ 12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午 下午
SQL>
8、months_between()判断两个日期之间的月份数量 number_value:=months_between(date_value,date_value) SQL> select months_between(sysdate,date'1971-05-18') from dual;
MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18') ---------------------------------------- 389.855143
SQL> select months_between(sysdate,date'2001-01-01') from dual;
MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01') ---------------------------------------- 34.4035409
SQL>
9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)
============================================== 1.查询某周的第一天 select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') last_day from (select substr('2004-32', 1, 4) yy, to_number(substr('2004-32', 6)) ww from dual)
select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6 first_day from dual
select min(v_date) from (select (to_date('200201','yyyymm') + rownum) v_date from all_tables where rownum < 370) where to_char(v_date,'yyyy-iw') = '2002-49'
2.查询某周的最后一天 select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') - 6 first_day from (select substr('2004-33', 1, 4) yy, to_number(substr('2004-33', 6)) ww from dual) select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d') last_day from dual
select max(v_date) from (select (to_date('200408','yyyymm') + rownum) v_date from all_tables where rownum < 370) where to_char(v_date,'yyyy-iw') = '2004-33'
3.查询某周的日期 select min_date, to_char(min_date,'day') day from (select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd') min_date from all_tables where rownum <= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365) union
select to_date(substr('2004-33',1,4)-1|| decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd') min_date from all_tables where rownum <= 7 union
select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd') min_date from all_tables where rownum <= 7 ) where to_char(min_date,'yyyy-iw') ='2004-33'
============================================= 在论坛中常常看到有对oracle中时间运算提问的问题,今天有时间,看了看以前各位兄弟的贴子,整理了一下,并作了个示例,希望会对大家有帮助。 首先感谢ern、eric.li及各版主还有热心的兄弟们
内容如下: 1、oracle支持对日期进行运算 2、日期运算时是以天为单位进行的 3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可 4、进行时间进制转换时注意加括号(见示例中红色括号),否则会出问题
SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';
会话已更改。
SQL> set serverout on SQL> declare 2 DateValue date; 3 begin 4 select sysdate into DateValue from dual; 5 dbms_output.put_line('源时间:'||to_char(DateValue)); 6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1)); 7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24)); 8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60))); 9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6 0))); 10 end; 11 / 源时间:2003-12-29 11:53:41 源时间减1天:2003-12-28 11:53:41 源时间减1天1小时:2003-12-28 10:53:41 源时间减1天1小时1分:2003-12-28 10:52:41 源时间减1天1小时1分1秒:2003-12-28 10:52:40
PL/SQL 过程已成功完成。
SQL>
|
|
|
|
李维 / 文
那么我们应该如何面对下一个IT的5年呢? 其实答案也不难,那就是体认开发方法和开发流程是比开发技术来得重要。尽快找到一个适合你自己或是你的团队的软件工程方法,不管是XP,RUP,MDA, FDD或是任何的方法,使用正确的开发方法提升开发效率和开发质量是目前重要的工作。接着看看你着重的IT领域是什么,再找出这个IT领域背后的主导力量,巧妙的结合开发方法和技术趋势主导力量,应该可以让你立于不败之地。此外对于每一个新的技术,语言,IT应用等等思索它们形成的背后原因,想想这些背后的原因会对你的事业有什么影响,如此一来就不会穷于应付层出不穷的IT技术。当然,要看未来的5年您还是得先回首看看自己脚下的基本功打好了没有,否则一切都是空谈。