2006年04月10日

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script language="javascript">
/**
 * PopupMenu.js
 * COPYRIGHT 2006, Boco Corporation
**/


var bContextKey=false;
function fnGetContextID(el) {
while (el!=null) {
if (el.contextmenu) return el.contextmenu
el = el.parentElement
}
return ""
}
 
function fnDetermine(){

oWorkItem=event.srcElement;
//键盘上的菜单键被按下时。
if(bContextKey==true){
//如果菜单的“状态”为“false”
if(oContextMenu.getAttribute("status")=="false"){
//捕获鼠标事件,以便和页面交互。
oContextMenu.setCapture();
//根据鼠标位置,确定菜单位置。
oContextMenu.style.top=event.clientY + document.body.scrollTop + 1;
oContextMenu.style.left=event.clientX + document.body.scrollLeft + 1;
oContextMenu.innerHTML="";
 
//设定菜单的“状态”为“true”
var sContext = fnGetContextID(event.srcElement)
if (sContext!="") {
fnPopulate(sContext)
oContextMenu.setAttribute("status","true");
event.returnValue=false;
}
else
event.returnValue=true
}
}
else{
// 如果键盘菜单键没有按下,并且菜单的“状态”为“true”。
if(oContextMenu.getAttribute("status")=="true"){
if((oWorkItem.parentElement.id=="oContextMenu") && (oWorkItem.getAttribute("component")=="menuitem"))
{
fnFireContext(oWorkItem)
}
// 当鼠标离开菜单或单击菜单项后,重设菜单(隐藏) 
oContextMenu.style.display="none";
oContextMenu.setAttribute("status","false");
oContextMenu.releaseCapture();
oContextMenu.innerHTML="";
event.returnValue=false;
}
}
}
function fnPopulate(sID)
{
var str=""
var elMenuRoot = 
document.all.contextDef.XMLDocument.childNodes(0).selectSingleNode(‘contextmenu[@id="' + sID + '"]‘
)
if (elMenuRoot) {
for(var i=0;i<elMenuRoot.childNodes.length;i++)
str+=’<span component="menuitem" menuid="’ + elMenuRoot.childNodes[i].getAttribute("id") +’" id=oMenuItem’ + i + ‘>’ + elMenuRoot.childNodes[i].getAttribute("value") + "</SPAN><BR>"
oContextMenu.innerHTML=str;
oContextMenu.style.display="block";
oContextMenu.style.pixelHeight = oContextMenu.scrollHeight 
}
}
 
function fnChirpOn(){
if((event.clientX>0) &&(event.clientY>0)&&(event.clientX<document.body.offsetWidth)&&(event.clientY<document.body.offsetHeight))
{
oWorkItem=event.srcElement;
if(oWorkItem.getAttribute("component")=="menuitem"){
oWorkItem.className = "selected"
}
}
}
function fnChirpOff(){
if((event.clientX>0) && (event.clientY>0) && (event.clientX<document.body.offsetWidth) &&(event.clientY<document.body.offsetHeight))
{
oWorkItem=event.srcElement;
if(oWorkItem.getAttribute("component")=="menuitem"){
oWorkItem.className = ""
}
}
}
 
 ////设置菜单样式 
function fnInit(){
if (oContextMenu) {
oContextMenu.style.width=90; //菜单宽度
oContextMenu.style.height=document.body.offsetHeight/2;
oContextMenu.style.zIndex=2; 
document.oncontextmenu=fnSuppress;
}
}
 
function fnInContext(el) {
while (el!=null) {
if (el.id=="oContextMenu") return true
el = el.offsetParent
}
return false
}
 
function fnSuppress(){
if (!(fnInContext(event.srcElement))) { 
oContextMenu.style.display="none";
oContextMenu.setAttribute("status","false");
oContextMenu.releaseCapture();
bContextKey=true;
}
fnDetermine();
bContextKey=false;
}
 
 //////////
function add_equipment(){
window.open("jsp/adddialog.jsp","addequipment","width=400,height=400,top=20,left=20")
}
function delete_equipment(){
window.open("jsp/deletedialog.jsp","delete","width=400,height=400,top=20,left=20")
}
function modify_equipment(){
window.open("jsp/modifydialog.jsp","modify","width=400,height=400,top=20,left=20")
}
/***** ADD ADDITIONAL  HERE *****/
///////////

function fnFireContext(oItem) { 
switch (oItem.menuid) {
case "add":
//add_equipment();
break;
case "delete":
//delete_equipment();
break;
case "modify":
//modify_equipment();
break;
case "cancel":
break;
/***** ADD ADDITIONAL  HERE *****/
default:
alert("菜单功能有待完善" + oItem.menuid );
}
}


</script>

<TITLE> 鼠标右键弹出菜单 </TITLE>


<style>
.menu{ cursor: crosshair; 
  display: none; 
  position: absolute; 
  top: 0; left: 0; 
  overflow: hidden;
  background-color: "#CFCFCF"; 
  border: "2 solid"; 
  border-top-color: "#EFEFEF"; 
  border-left-color: "#EFEFEF"; 
  border-right-color: "#505050"; 
  border-bottom-color: "#505050"; 
  font: 10pt Arial;
  margin:0pt;padding: 2pt
}
 
.menu SPAN {width: 100%; cursor: crosshair; padding-left: 10pt;padding-bottom:2px;padding-top:2px}
.menu SPAN.selected {background: navy; color:white; cursor: crosshair;padding-top:2px}
</style>
 
<xml id="contextDef">
 <xmldata>
  <contextmenu id="menu1">
   <item id="add" value="添加设备" />
   <item id="delete" value="删除设备" />
   <item id="modify" value="修改属性" />
   <item id="cancel" value="取消" />
  </contextmenu>
 </xmldata>
</xml>

<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY onload="fnInit()" onclick="fnDetermine()">

<div status="false" onmouseover="fnChirpOn()" onmouseout="fnChirpOff()" id="oContextMenu" class="menu"></div>
<input type=image border=0 name=’mapimage’ contextmenu="menu1" src=’http://www.oracle.com.cn/images/avatars/customavatar/123008.gif’ >
</BODY>
</HTML>

<html xmlns:v="http://www.eglic.com/">
<head>
<title>页面画线</title>
<meta name="ContentType" content="text/html" />
<meta name="CharSet" content="GB2312" />
<script language="javascript">
var Working=false;
var points = [];
var lastPoint = {x:0,y:0};
document.ondblclick=function (){
if(!Working) return;
var len = getLenth();
document.getElementById("show").innerHTML = "折线的总长度为:" + len + "px";
document.getElementById("show").style.display="";
points = [];
lastPoint = {x:0,y:0}
Working=false;
}
document.onclick=function (){
if(!Working){
document.getElementById("show").style.display="none";
Working=true;
lastPoint.x = event.x;
lastPoint.y = event.y;
points.push( {x:event.x,y:event.y} );
//document.getElementById("show").innerHTML += "X:"+ lastPoint.x + " Y:" + lastPoint.y;
//document.getElementById("show").style.display="";
}else{
var s=’<v:line from="’+lastPoint.x+’,'+lastPoint.y+’" to="’+event.x+’,'+event.y+’" style="position:absolute;left:0px;top:0px;"></v:line>’;
lastPoint.x = event.x;
lastPoint.y = event.y;
points.push( {x:event.x,y:event.y} );
//document.getElementById("show").innerHTML += "<br/>X:"+ event.x + " Y:" + event.y;
//document.getElementById("show").style.display="";
var o=document.createElement(s);
document.body.insertAdjacentElement(‘BeforeEnd’,o);
}
}
document.onmousemove=function (){
if(!Working) return;
}
function getLenth()
{
//alert(points[1].x+":"+points[0].x);
var len = 0;
if( points.length <2 ) return 0;
for(var i=0;i<points.length;i++)
{
if( points[i+1] )
{
var tmp = Math.pow(points[i+1].x – points[i].x,2) + Math.pow(points[i+1].y – points[i].y,2);
var distance = parseInt(Math.sqrt( tmp ));
len += distance;
}
}
return len;
}
</script>
<style type="text/css">
v\:* {behavior:url(#default#VML);}
</style>
</head>
<body>
<div id="show" style="border:5px solid #000;width:200px;height:30px;line-height:30px;text-align:center;display:none">
</div>
</body>
</html>
2005年09月29日

JSF是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架,都属于表现层框架.

       Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。和其他的java架构一样,Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Structs 框架的核心是一个弹性的控制层,基于如 Java Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。
  Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,如 JDBC / EJB ,以及其它第三方类库,如 Hibernate / iBATIS ,或者 Object Relational Bridge(对象关系桥)。在视图层,Struts能够与JSP,包括 JSTL 与 JSF,以及 Velocity 模板,XSLT 与其它表示层技术。Struts 为每个专业的 Web 应用程序做背后的支撑,帮助为你的应用创建一个扩展的开发环境

2005年05月23日

#include <assert.h>
#include <string.h>
/**
 * name: strFrom
 * desc: 根据起始位置从一个字符串中取出需要的子串
 *    
 */

char * strFrom (const char * strSource,int m, int n)
{
 assert(strSource!=NULL&&m+1<n&&m>=0);
 char * result=new char[n-m];
 char * address=result;
 for(int i=0; i<(int )strlen(strSource);i++){
     if(i<n && i>m)
          *result++=strSource[i];
 }
 *result=’\0′;
 return address;
}

2005年04月15日

 

1 sqlldr
用于将格式化的文本数据上载到表中去

以表emp为例
控制文件(*.ctl) 将加载一个外部数据文件*.*(含分隔符).

解决NULL的问题

load data

infile ‘MinZhengData\tb_district.cvs’

into table tb_district

fields terminated by ","OPTIONALLY ENCLOSED BY ‘"’

TRAILING NULLCOLS 

(areacode,name,doc)

load data
infile ‘c:\data\mydata.csv’
into table emp
fields terminated by "," optionally enclosed by ‘"’
( empno, empname, sal, deptno )

mydata.csv 如下:
10001,"Scott Tiger", 1000, 40
10002,"Frank Naude", 500, 20


首先编写一个控制命令的脚本文件emp.ctl,内容如下:

load data
append into table emp
fields terminated by ‘|’
(
no float external,
name char(20),
age integer external,
duty char(1),
salary float external,
upd_ts date(14) ‘YYYYMMDDHH24MISS’
)

括号里对数据文件里每个数据域进行解释,以此在上载时与目标表进行比对。

除了append外,还有insert、replace、truncate等方式,与append大同小异,不作更多的解释。

再将上载数据组织成数据文件,通常以dat结尾,emp.dat内容如下:


100000000001|Tom|000020|1|000000005000|20020101000000

100000000002|Jerry|000025|2|000000008000|20020101235959

分隔符要与ctl文件中fields terminated by指定的一致,这个例子中为"|"

ctl和dat文件就绪后可以执行上载,命令为:

sqlldr dbuser/oracle control=emp.ctl data=emp.dat

"*" 代表数据文件与此文件同名,即在后面使用BEGINDATA段来标识数据。
也可以将dat文件合并在ctl文件中,ctl文件emp2.ctl改写为:

load data

infile *

append

into table emp

fields terminated by ‘|’

(

no float external,

name char(20),

age integer external,

duty char(1),

salary float external,

upd_ts date(14) ‘YYYYMMDDHH24MISS’

)

begindata

100000000003|Mulder|000020|1|000000005000|20020101000000

100000000004|Scully|000025|2|000000008000|20020101235959

控制文件中infile选项跟sqlldr命令行中data选项含义相同,如使用infile *则表明数据在本控制文件以begin data开头的区域内。

这样命令变成:

sqlldr dbuser/oracle control=emp2.ctl

conventional path 通过常规通道方式上载。

rows:每次提交的记录数

bindsize:每次提交记录的缓冲区

readsize:与bindsize成对使用,其中较小者会自动调整到较大者

sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。

命令为:

sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000

direct path 通过直通方式上载,不进行SQL解析。

命令为:

sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true

2 exp

将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。

buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统

consistent:下载期间所涉及的数据保持read only,缺省为n
direct:使用直通方式 ,缺省为n
feeback:显示处理记录条数,缺省为0,即不显示
file:输出文件,缺省为expdat.dmp
filesize:输出文件大小,缺省为操作系统最大值
indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:log文件,缺省为无,在标准输出显示
owner:指明下载的用户名
query:选择记录的一个子集
rows:是否下载表记录
tables:输出的表名列表

下载整个实例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y

user应具有dba权限

下载某个用户所有对象

exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000

下载一张或几张表

exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000

下载某张表的部分数据

exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\"where col1=\’…\’ and col2 \<…"

不可用于嵌套表

以多个固定大小文件方式下载某张表

exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000

这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制

直通路径方式

direct=y,取代buffer选项,query选项不可用

有利于提高下载速度

consistent选项

自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。但这个过程不能太长,以免回滚段和联机日志消耗完

3 imp
 

将exp下载的dmp文件上载到数据库内。

buffer:上载数据缓冲区,以字节为单位,缺省依赖操作系统

commit:上载数据缓冲区中的记录上载后是否执行提交

feeback:显示处理记录条数,缺省为0,即不显示

file:输入文件,缺省为expdat.dmp

filesize:输入文件大小,缺省为操作系统最大值

fromuser:指明来源用户方

ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y

indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据

log:log文件,缺省为无,在标准输出显示

rows:是否上载表记录

tables:输入的表名列表

touser:指明目的用户方

上载整个实例

imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000

上载某个用户所有对象

imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000

上载一张或几张表

imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000

以多个固定大小文件方式上载某张表

imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000

 

 

 

 

 

 

 

以文本形式下载表数据

Oracle 没有提供将数据导出到一个文件的工具。但是,我们可以用SQL*Plusselect format 数据来输出到一个文件当然你也可以使用第三方工具,如SQLWays ,TOAD for Quest

/**

另外,也可以使用使用 UTL_FILE PL/SQL 包处理:
rem Remember to update initSID.ora, utl_file_dir=’c:\oradata’ parameter
declare
fp utl_file.file_type;
begin
fp := utl_file.fopen(‘c:\oradata’,'tab1.txt’,'w’);
utl_file.putf(fp, ‘%s, %s\n’, ‘TextField’, 55);
utl_file.fclose(fp);
end;

*/
——————————————————————————-
sqlplus -s dbuser/oracle </dev/null

set colsep |;

set echo off;

set feedback off;

set heading off;

set pagesize 0;

set linesize 1000;

set numwidth 12;

set termout off;

set trimout on;

set trimspool on;

spool tmp.txt;

select * from emp;

spool off;

exit

EOF

tr -d ‘ ’< tmp.txt >emp.txt 删除空格,可选
tr –d ‘ ’ oldOra.txt

tr -d ‘ ‘ <tb_resident.cvs>sss.txt

注意:一定要用spool,如果在命令行中直接用>tmp.txt可能会造成数据缺失,至少在Unixware7上如此

另:

set colsep | echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on

附录B

利用Sqlldr导入数据的时候,保持*.dat中没有空白,否则失败内伤。

a、  insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace替换

注意NULL的问题

2所有的字段大写 如果与保留字冲突 加引号就好了

trailing nullcols 表示遇到空字段依然写入到数据库表中

Runtime.getRuntime().exec(

"cmd /c sqlplus bl/bl@egovdev_172.20.20.1 @sqlplus.txt");

 Runtime.getRuntime().exec(

        "cmd /c sqlldr blrkk/blrkk@oracle9i control=sqlldr.ctl direct=t

Following is an example of the EXPORT command issued through the CLP:
db2 export to staff.ixf of ixf select * from userid.staff 
db2 export to basetable.del of del select * from  db2admin.basetable

exp scott/tiger@oracle9i file = scott.dmp owner = scott
exp bl/bl@egovdev_172.20.20.1 file=bl.dmp owner=bl
imp blrkk/blrkk@oracle9i   file=bl.dmp fromuser=blrkk tables=(tb_floating,tb_resident)
//jar cvf demo.jar demo

<%
Runtime.getRuntime(). exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe \\a.doc");
Runtime.getRuntime().exec("cmd.exe  /c start notepad"); //打开写字版
 String path = "c:/a.txt";
 Runtime.getRuntime().exec("cmd.exe  /c start notepad \"" + path + "\""); ///打开文件
%

telnet informix服务器执行以下操作:

1.  #dbaccess 回车.
2.  按“Q”键,出现select database 界面.
3.  按“Ctrl+L”组合键,选择数据库“file@servername
4.  按"N"键进入SQL语句编写界面.
5.  把SQL语句:     unload to ‘ts_fileinfo’ select * from ts_fileinfo;
//  如果把生成的文件放到其他目录,For Example:
//  unload to ‘/opt/informix/tmp/ts_fileinfo’ select * from ts_fileinfo;
6.  按“ESC”键,保存输入的SQL语句.
7.  按“R”键,执行SQL语句,在屏幕的下方会出现提示信息.
8.  按“E”键,退出.
9.  再次执行步骤1–8, 只是在执行步骤3 的时候,选择数据库”filetrans2003@servername“,
     在步骤5的时候把SQL语句改为:   load from ‘ts_fileinfo’  insert into ts_fileinfo;
10. 退出服务器,执行结束

在数据库filetrans2003的表 ts_sendednote 中
sn_rdate 的数据类型是 “datetime year to second”
而在原数据库file中是date 类型,
我们在建新库的时候,为了使数据能顺利的导入新库,所以把“sn_rdate”的数据类型暂时改为:"date". 在整个数据库导入结束之后,再利用SQL语句“
ALTER TABLE ts_sendednote MODIFY (sn_rdate datetime year to second);  ”把数据类型改成程序需要的类型。

spool oldOra.txt;
select id,name from tb_resident;
spool off;

sqlplus bl/bl@egovdev_172.20.20.1

set colsep |;
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set linesize 1000;
set numwidth 8;
set termout off;
set trimout on;
set trimspool on;

2004年12月09日

在处理BLOB时,需要用dbaccess命令, 在服务器上执行load

2004年10月22日

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

PL/SQL数据类型

名称

类型

说明

NUMBER

数字型

能存放整数值和实数值,并且可以定义精度和取值范围

BINARY_INTEGER

数字型

可存储带符号整数,为整数计算优化性能

DEC

数字型

NUMBER的子类型,小数

的子类型,小数

DOUBLE PRECISION

数字型

NUMBER的子类型,高精度实数

的子类型,高精度实数

INTEGER

数字型

NUMBER的子类型,整数

的子类型,整数

INT

数字型

NUMBER的子类型,整数

的子类型,整数

NUMERIC

数字型

NUMBER的子类型,与NUMBER等价

的子类型,与NUMBER等价

REAL

数字型

NUMBER的子类型,与NUMBER等价

的子类型,与NUMBER等价

SMALLINT

数字型

NUMBER的子类型,取值范围比INTEGER

的子类型,取值范围比INTEGER

VARCHAR2

字符型

存放可变长字符串,有最大长度

CHAR

字符型

定长字符串

LONG

字符型

变长字符串,最大长度可达32,767

DATE

日期型

以数据库相同的格式存放日期值

BOOLEAN

布尔型

TRUE OR FALSE

ROWID

ROWID

存放数据库的行号

例子:
DECLARE
    ORDER_NO NUMBER(3);
    CUST_NAME VARCHAR2(20);
    ORDER_DATE DATE;
    EMP_NO INTEGER:=25;
    PI CONSTANT NUMBER:=3.1416;
BEGIN
  NULL;
END;