??xml version="1.0" encoding="utf-8" standalone="yes"?> SQL> select * CONVERT函数说明Q?/p>
CONVERT(inputstring,dest_charset,source_charset) inputstringQ要转换的字W串 dest_charsetQ目标字W集 source_charsetQ原字符?/p> -- / 斜线回R --调用存储q程 --------- 下面以输入员工号Q显C雇员名U、工资、个人所得税(E率?.03Z)。说明变量的使用Q看看如何编写: declare declare --定义了一个sp_record变量Q类型是emp_record_type begin --循环取出 ---------- ---- --------------- create or replace procedure sp_pro8(ename in numberQspName out varchar2) is Q-Q-Q-Q-Q-Q- ~写oracle的分? --计算myrows --关闭游标 ------------------------------------------------ ------------------------------------------------ }catch(Exception e) ------------------------------------------------ }catch(Exception e) A . 嵌套? 1. 声明数组cd 2. 创徏存储q程 3. Java调用代码 B . 索引?
]]>
有三U主要的方式Q完全、用戗表Q?nbsp;
1、完全:
EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
如果要执行完全导出,必须hҎ的权?nbsp;
2、用h式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC
q样用户SONIC的所有对象被输出到文件中?nbsp;
3、表模式Q?br /> EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
q样用户SONIC的表SONICp导出
]]>
]]><record table="CkypHead" totalFields="21" tableType="vessel">
<primaryKey field="lID" />
<!--兛_代码-->
<property maxLength="6" sequence="1" field="CUSTOMS_ID" fileInfo="receiverCode"/>
<!--舱单q?/span>/出口标志-->
<property maxLength="1" sequence="2" field="I_E_FLAG" />
<record table="CkypContainer" totalFields="7" tableType="ctn">
<primaryKey field="lID" />--表主键ID
<foreignKey refTable="CkypHead" refField="lID" field="lHeadID" />外键链接外键名lHeadIDQ链接的外键表CkypHead lID
<!-- 序号 -->
<property maxLength="5" sequence="1" field="CONTA_SEQ_NO"/>
<!-- 提运单号 -->
<property maxLength="20" sequence="2" field="BILL_NO" fieldType="bill"/>
<!-- 集装号 -->
<property maxLength="11" sequence="3" field="CONTA_NO" fieldType="ctnno"/>
<!-- 标准标?nbsp;-->
<property maxLength="1" sequence="4" field="CONTA_SIZE" />
<!-- 铅封?nbsp;-->
<property maxLength="10" sequence="5" field="SEAL_NO" />
<!-- 规格cd -->
<property maxLength="4" sequence="6" field="CONTA_TYPE" />
<!-- 集装重量(总重Q?nbsp;-->
<property maxLength="11" sequence="7" field="CONTA_WT" type="float" precision="2" />
</record>
]]>
]]>
2 from (select 'abcd' c1 from dual
3 union all
4 select 'ab试cd' c1 from dual)
5 where c1 <> CONVERT(c1, 'US7ASCII', 'ZHS16GBK');
C1
--------
ab试cd
]]>
<!-- 从jdbc:oracle:thin:@10.128.5.65:1521:tjgwl1 中蟩?服务器间跌{)
10.128.141.109:1521:tjgwlw数据库后面直接加@tjgwlw-->
]]>
]]>
--create procedure 存储q程名字 is begin
--create or replace procedure 如果有就替换?br />----------------------------------------------
案例1Q?br />--创徏一个表
create table mytest(name varchar2(30),passwd varchar2(30));
--创徏q程
create procedure sq_pro1 is
begin
--执行部分
insert into mytest values('zgx','888666');
endQ?/p>
----------------------------------------------
如何查看错误信息Q?br />show error 回R
1.exec q程?参数1Q?....);
2.call q程?参数1Q?....);
---------------------------------------------------
set serveroutput on;打开输出选项
set serveroutput off;关闭输出选项
dbms_ 是包名的意思!
案例2Q?br />dbms_output.put_line('helloWorld');
-----------------
declare
v_ename varchar2(5);--定义字符串变?br />begin
--into v_ename意?把查询出来数?赋值给 v_ename;&no是执行的时候会弹出输入?br /> select ename into v_ename from emp where empno=&no;
--||代表 q接W号Q?br /> dbms_output.put_line('用户名是Q?||v_ename);
end;
-----------
案例3Q?br />declare
v_ename varchar2(5);--定义字符串变?br /> v_sal number(7,2);--定义字符串变?br />begin
--如果是多个字D,用逗号隔开Q顺序必MPQ?br /> select ename,sal into v_ename,v_sal from emp where empno=&no;
--||代表 q接W号Q?br /> dbms_output.put_line('用户名是Q?||v_ename||'工资Q?||v_sal);
end;
---------------------
--异常的捕?br />exception
when no_data_found then --如果出现no_data_found异常执行下一?br />dbms_output.put_line('输入有误Q?);
end;
------------
q程Q?br />案例4Q?br />创徏带输入参数的q程Q?br />create procedure sp_pro3(spNma varchar2,newSal number) is
begin
update emp set sal=newSal where ename=spName;
end;
------------
函数Q?br />函数用于q回特定的数据,当徏立函数时Q在函数头部要求有return语句Q?br />案例5Q?br />--输入雇员姓名Q返回该雇员的年?br />--q回一个numbercdQ返回值名字是yearSalQ类型是number(7,2);
create function sp_fun1(spName varchar2) return number is yearSal number(7,2);
begin
--执行部分
select sal*12+nvl(comm,0)*12 into yearSal from emp where enamee=spName;
return yearSal;
end;
调用函数?br />--随便定义一个?br />var abc number;
--掉用函数把结果赋值给 abc
call sp_fun1()'SCOTT' into:abc;
-------------
?br />创徏包:
--创徏了一个包 sp_package
--声明该包里有一个过Eupdate_sal
--生命该包里有一个函数annual_income
create package sp_package is
procedure update_sal(name,varchar2,newsal number);
function annual_income(name varchar2, return number;
end;
l包sp_package 实现包体--把定义包中的 q程和函数实玎ͼ
create package body sp_package is
procedure update_sal(name,varchar2,newsal number) is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number isannual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;
return annual_salary;
end;
end;
--------------
调用包中的过E或函数
exec sp_package.update_sal('SCOTT','120');
---------------------
触发?br />触发器是指隐含的执行的存储过E。当定义触发器时Q必要指定触发的时间和触发的操作,常用触发包括insertQpudateQdelete语句Q而触发操作实际就是一个pl/sql块。可以用create trigger来徏立触发器?br />触发器是非常有用的,可维护数据库的安全和一致性?br />---------
定义q用变?br />包括Q?br />1.标量cdQscalarQ?br />2.W合cdQ)
标量QscalarQ?常用cd
语法Q?br />identifier [constant] datatype [not null] [:=| default expr]
identifier:名称
constantQ指定常量。需要指定它的初始|且其值是不能改变?br />datatypeQ数据类?br />not nullQ?指定变量g能ؓnull
Q? l变量或是常量指定初始?br />default 用于指定初始?br />exprQ指定初始值的pl/sql表达式,文本倹{其他变量、函数等
------------
标量定义的案?br />1.定义一个变长字W串
v_ename varchar2(10)
2.定义一个小?范围 -9999.99~9999.99
v_sal number(6,2)
3.定义一个小数ƈl一个初始gؓ5.4 :=pl/sql的赋值号
v_sal2 number(6,2):=5.4
4.定义一个日期类型的数据
v_hiredate date;
5.定义一个布变量,不能为空Q初始gؓfalse
v_valid boolean not null default false;
---------------
如何使用标量
定义好变量后Q就可以使用q些变量。这里需要说明的是pl/sql块ؓ变量赋g同于其他的编E语aQ需要在{号前面加冒?:=)
c_tax_rate number(3.2):=0.03; --定义赋?br />--用户?br />v_ename varchar2(5);
v_sal number(7,2);
v_tax_sal number()7,2;
begin
--执行
select ename,sal into v_ename,v_sal from emp where empno=$no;
--计算所得税
v_tax_sal:=v_sal*c_tax_rate;
--输出
dbms_output.put_line('姓名?'||v_ename||'工资Q?||v_sal||'所得税Q?||v_tax_sal);
end;
-----
标量QscalarQ?-使用%typecd
对于上面的pl/sql块有一个问题:
是如果员工的姓名超q了5字符的话Q就会有错误Qؓ了降低pl/sqlE序的维护工作量Q可以?type属性定义变量,q样他会按照数据库列来确定你定义的变量的cd和长度?br />看看怎么使用?br />语法Q?标识W名 表名.列名%type;
v_ename emp.ename%type; --定义变量v_ename 和emp表中列名ename大小cd保持一_
---
复合变量QcompositeQ?br />用于存放多个值的变量?br />包括Q?br />1.pl/sql记录
2.pl/sql?br />---------------
复合cd-pl/sql记录
cM与高U语a的结构体Q需要注意的是,当引用pl/sql记录成员Ӟ必须要加记录变量作ؓ前缀Q记录变?记录成员Q?br />如下Q?br />declare
--定义一个pl/sql记录cd是:emp_record_typeQ类型包括三个数据nameQsalaryQtitleQ该cd中可以存放三个类型的数据Q?br />type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type);
sp_record emp_record_type;
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工名:'||sp_record.name); --昄定义emp_record_typecd?name的|
end;
end;
----------------
复合cd--pl/sql?br /> 相当于高U语a中的数组。但是需要注意的是在高语言中数l的下标不能敎ͼ而pl/sql是可以ؓ负数的,q且表元素的下标没有限制。实例如下:
declare
--定义了一个pl/sql表类型sp_table_typeQ该cd是用于存放emp.ename%typecd的数l?br />--index by binary_integer标识下标是整?br />type sp_table_type is table of emp.ename%type index by binary_integer;
--定义了一个sp_table变量Q变量类型是sp_table_type
sp_table sp_table_type;
begin
--把查询出来的ename攑ֈ tableQ?Q下标ؓ0的数?br />select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_lin('员工名:'||sp_table(0)); --要和存放下标一?br />end;
说明Q?br />sp_table_type 是pl/sql表类?br />emp.ename%type 指定了表的元素的cd和长?br />sp_table 为pl/sql表变?br />sp_table(0) 表示下标??br />---------------
参照变量
参照变量是指用于存放数值指针的变量。通过使用参照变量Q可以用得应用E序׃n相同对象Q从而降低占用的I间。在~写pl/sqlE序Ӟ可以使用游标变量和对象类型变量两U参照变量类?br />游标变量用的最?br />-----------
参照变量---游标变量
使用游标Ӟ当定义游标时不需要指定相应的select语句Q但是当使用游标旉要指定select语句Q这样一个游标就与一个select语句l合了?br />如下
1.请用pl/sql~写一个块Q可以输入部门号Qƈ昄该部门所有员工姓名和他的工资?br />declare
--定义游标cd
type sp_emp_cursor is ref cursorQ?br /> --定义一个游标变?br /> test_cursor sp_emp_cursorQ?br /> --定义变量
v_ename emp。ename%typeQ?br /> v_sal emp。sal%typeQ?br />begin
--执行
--打开一个游标test_cursor和一个selectl合
open test_cursor for select ename,sal from emp where deptno=&no;
--循环取出
loop
--fetch是取出。取出test_cursor中的数据攑ֈ v_ename,v_sal里面去;
fetch test_cursor into v_ename,v_salQ?br /> --判断是否test_cursor为空
exit when test_cursor%notfoundQ?br /> dbms_output.put_line('名字Q?||v_ename||'工资Q?||v_sal);
end loopQ?br />endQ?/p>
2.?。基上,如果某个员工的工资低?00元,增?00元?br />declare
--定义游标cd
type sp_emp_cursor is ref cursorQ?br /> --定义一个游标变?br /> test_cursor sp_emp_cursorQ?br /> --定义变量
v_ename emp。ename%typeQ?br /> v_sal emp。sal%typeQ?br />begin
--执行
--打开一个游标test_cursor和一个selectl合
open test_cursor for select ename,sal from emp where deptno=&no;
loop
--fetch是取出。取出test_cursor中的数据攑ֈ v_ename,v_sal里面去;
fetch test_cursor into v_ename,v_salQ?br /> if v_sal<200 then
update emp set sal=sal+100 where ename=v_ename;
end if;
--判断是否test_cursor为空
exit when test_cursor%notfoundQ?br /> dbms_output.put_line('名字Q?||v_ename||'工资Q?||v_sal);
end loopQ?br />endQ?/p>
条g分支语句
if--thenQ?br />if--then--elseQ?br />if--then--elsif--else
循环语句
loop --end loopQ至会执行一ơ?br />create or replace procedure sp_pro6() is
--定义赋?br />v_num number:=1;
begin
loop
insert into users1 values(v_num,spName);
--判断是否要退出@?br /> exit when v_num=10;
--自增
v_num:=v_num+1;
end loop;
end;
-------------
循环语句-while先判断后执行
create or replace procedure sp_pro6() is
--定义赋?br />v_num number:=11;
begin
while v_num<=20 loop
insert into users1 values(v_num,spName);
v_num:=v_num+1;
end loop;
end;
------------------
循环语句--for循环Q不Q?br />begin
for i in reverse 1。?0 loop
insert into users1 valuesQiQ?aaa'Q;
end loop;
endQ?br />-------
循环语句--goto,null循环Q不Q?br />declare
i int:=1;
begin
loop
dbms_output.put_line('输出i='||i);
if i=10 then
goto end_loop;
end if;
i:=i+1;
end loop;
<<end_loop>> --到i?0后直接蟩到该标记
dbms_output.put_line('循环l束');
end;
---------------------------
无返回值的存储q程Q有输入参数Q?br />
create table book(
bookId number;
bookName varchar2(100);
publishHouse varchar2(50);
);
--~写q程
--in表示q是一个输入参敎ͼ不写默认是in
--out 表示一个输出参?br />create or replace procedure sp_pro7(spBookId in numberQspbookName in varchar2,sppublishHouse in varchar2) is
begin
insert into book values(spBookId,spbookName,sppublishHouse);
end;
有返回值的存储q程Q有输入和输出参敎ͼ
begin
--spName自动q回 因ؓ他是out
select ename into spName from emp where empno=spno;
end;
----------------
有返回值是集合数组的存储过E(有输入和输出参数Q?br />1.建立一个包
--创徏?里面定义一个游标类型;
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackageQ?br />2.建立存储q程?br />create or replace procedure sp_pro8(spNo in numberQp_cursor out testpackage.test_cursor) is
begin
--spName自动q回 因ؓ他是out
open p_cursor for select * from emp where deptno=spNo;
end;
oracle的分?nbsp; rn是别?br />select t1.*Qrownum rn from(select * from emp) t1;//多加一个列记录个数
select t1.*Qrownum rn from(select * from emp) t1 where rownum<10;
select * from (select t1.*Qrownum rn from(select * from emp) t1 where rownum<10) where rn>=6;
--建立一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackageQ?br />--建立存储q程
create or replace procedure fenye
(tableName in varchar2,
pageSize in number, --一|C几条记?br />pageNow in number, --昄哪一?br />myrows out number, --总记录数
myPageCount out number,--总页?br />p_cursor out testpackage.test_cursor --q回的记录集
) is
--定义部分
--定义sql语句 字符?br />v_sql varchar2(1000);
--定义两个整数
v_begin number:=(pageNow-1)*pageSize+1;
v_end number:=pageNow*pageSize;
begin
--执行部分
v_sql:='select * from (select t1.*Qrownum rn from(select * from '||tableName||') t1 where rownum<10'||?||') where rn>='||?||';';
--把游标和sql语句兌h
open p_cursor for v_sql;
v_sql:='select count(*) from '||tableName||'';
--执行sqlQƈ把返回|赋值给myrows;
execute immediate v_sql int myrows;
--计算myPagecount
if mod(myrows,pageSize)=0 then --mod()取余?br />myPageCount:=myrows/pageSize;
else
myPageCount:=myrows/pagesize+1;
end if;
--close p_cursor;
end;
------------------------
例外的分c?br />1.预定义例外用于处理常见的oracle错误
2.非预定义例外用于处理预定义例外不能处理的例外 6.53
3.自定义例外用于处理与oracle错误无关的其他情?/p>
------------------------------------------------
-----------------------------------------------
-------QAQӞ?调用无返回值的存储q程-----------------
try{
Class.forName();
Connection ct=DriverManager.getConnerction();
//调用无返回值存储过E?br /> CallableStatement cs=ct.prepareCall("{call 存储q程名称(?,?,?)}") // ?代表存储q程参数
cs.setIn(1,10);
cs.setString(2,'java调用存储q程');
cs.setString(3,'人民出版C?);
//执行
cs.execute();
}catch(Exception e)
{
e.printStackTrace();
}finally{
cs.close();
ct.close();
}
-----------------------------------------------
------QAQӞ?-调用有回值的存储q程-----------------
try{
Class.forName();
Connection ct=DriverManager.getConnerction();
//调用有返回值存储过E?br /> CallableStatement cs=ct.prepareCall("{call 存储q程名称(?,?)}") // ?代表存储q程参数 W一是输入,W二是输?br /> //W一?输入参数
cs.setIn(1,10);
//l第二个Q输出D?br /> cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //
//执行
cs.execute();
//取出q回?
String name=cs。getString(2);
System.out。println("名称是:"+name);
}catch(Exception e)
{
e.printStackTrace();
}finally{
cs.close();
ct.close();
}
-----------------------------------------------
-------QAQӞ?调用有回值是多个 数组2011-12-5的存储过E?----------------
try{
Class.forName();
Connection ct=DriverManager.getConnerction();
//调用有返回值存储过E?br /> CallableStatement cs=ct.prepareCall("{call 存储q程名称(?,?)}") // ?代表存储q程参数 W一是输入,W二是输?br /> //W一?输入参数
cs.setIn(1,10);
//l第二个Q输出D?br /> cs.registerOutParameter(2,oracle.jdbc.OracleTypes.cursor); //cd是cursor游标
//执行
cs.execute();
//取出q回|l果集)
ReaultSet rs=(ResultSet)cs.getObject(2); //2是第二?
while(rs.next())
{
int =rs。getInt(1);
String name=rs。getString(2);
System.out。println("名称是:"+name);
}
{
e.printStackTrace();
}finally{
cs.close();
ct.close();
}
------------------------------------------------
-----------------------------------------------
------QAQӞ?-调用有回值的存储q程-----------------
try{
Class.forName();
Connection ct=DriverManager.getConnerction();
//调用有返回值存储过E?br /> CallableStatement cs=ct.prepareCall("{call 存储q程名称(?,?)}") // ?代表存储q程参数 W一是输入,W二是输?br /> //W一?输入参数
cs.setIn(1,10);
//l第二个Q输出D?br /> cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //
//执行
cs.execute();
//取出q回?
String name=cs。getString(2);
System.out。println("名称是:"+name);
}catch(Exception e)
{
e.printStackTrace();
}finally{
cs.close();
ct.close();
}
-----------------------------------------------
-------QAQӞ?试分页调用存储q程-----------------
try{
Class.forName();
Connection ct=DriverManager.getConnerction();
//调用有返回值存储过E?br /> CallableStatement cs=ct.prepareCall("{call 分页存储q程名称(?,?,?,?,?,?)}") // ?代表存储q程参数 W一是输入,W二是输?br /> //?输入参数
cs.setString(1,'表名'); //表名
cs.setInt(2,5); //一|C几条记?br /> cs.setInt(3,1); //昄W几?br /> //?输出参数
//注册总记录数
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
//注册总页?br /> cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
//注册q回的结果集
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR); //cd是cursor游标
//执行
cs.execute();
//取出总记录数
int rowNum=cs.getInt(4);//4表示参数中第四个Q?br /> //总页?br /> int pageCount=cs.getInt(5);
//q回的记录结?br /> ReaultSet rs=(ResultSet)cs.getObject(6);
while(rs.next())
{
int =rs。getInt(1);
String name=rs。getString(2);
System.out。println("名称是:"+name);
}
{
e.printStackTrace();
}finally{
cs.close();
ct.close();
}
create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该cd
-- 该例子存储过E是在包中创建的,包名 arraydemo
procedure testArray(resNumber in tab_array,procResult out tab_array) is
begin
procResult := new tab_array();
for i in 1..resNumber.Count loop
procResult.EXTEND;
procResult(i) := resNumber(i) || 'lucifer' || i;
end loop;
end;
//必须使用Oracle的连接和Statement,使用了连接池的必通过一些方法获取原始的q接
OracleConnection conn = null;
OracleCallableStatement stmt = null;
String[] param = { "1001", "1002", "1006" };
stmt =(转换cd) conn.prepareCall("{call arraydemo.testArray(?,?)}");
// cd名必d?
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn);
stmt.setARRAY(1, new ARRAY(descriptor,conn,param));
stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY");
stmt.execute();
ARRAY array = stmt.getARRAY(2);
Datum[] data = array.getOracleArray();
for (int i = 0; i < data.length; i++) {
System.out.println(i + " : " + new String(data.shareBytes()));
}
4 . 注意的问题及未解决的问?
抛出:Non supported character set: oracle-character-set-852 异常---解决:d nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录?
待解决问?
a) 如何调用在包声明的自定义cd
b) 比较不同声明cd的优~点,及用场?
嵌套表其它应?http://zhouwf0726.itpub.net/post/9689/212253
C . 内置数组
D . 游标方式
]]>
id number(11) NOT NULL ,
username varchar(22) NOT NULL ,
kind varchar(22) NOT NULL ,
phone varchar(11) DEFAULT '',
email varchar(22) DEFAULT '',
qq varchar(12) DEFAULT '',
name varchar(30) DEFAULT '',
address clob,
state varchar(30) DEFAULT '未处?,
time date DEFAULT '',
comname varchar(50) DEFAULT '',
comadd varchar(50) DEFAULT '',
PRIMARY KEY (id)
)
create sequence member_SEQ
minvalue 1
maxvalue 9999999
start with 21
increment by 1
cache 20;
CREATE OR REPLACE TRIGGER "member_trig"
BEFORE INSERT ON admin
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
SELECT member_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
END member_trig;
1、下载proxool 地址Qhttp://proxool.sourceforge.net
2、解压羃proxool-0.9.0RC2.zipQ拷贝lib/proxool-0.9.0RC2.jar到web-info/lib
拯jdbc驱动到web-info/lib
3、在web-info下徏立文Ӟproxool.xml
文g内容如下Q?br /><?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Develop</alias>
<driver-url>jdbc:oracle:thin:@192.168.100.18:1521:RNMS</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="scmlp"/>
<property name="password" value="scmlpscmlp"/>
</driver-properties>
<maximum-connection-count>500</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
4、在web.xml文g内加入以下内容:
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- proxool提供的管理监控工P可查看当前数据库q接情况。如果运行不成功Q请删除本行 -->
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
5、在调用数据库连接代码:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");
6、利用proxool监控工具查看数据库运行状态。地址Q?/admin
配置二:propertiesҎ
1Q下载proxool-0.8.3.jarq放到相应的目录Q这个应该比较简单了
2Q写一个配|文件放到web-inf目录下,配置文g内容如下Q?
jdbc-0.proxool.alias=bidding
jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname
jdbc-0.proxool.driver-class=oracle.jdbc.driver.oracledriver
jdbc-0.user=name
jdbc-0.password=pass
jdbc-0.proxool.maximum-connection-count=200
jdbc-0.proxool.house-keeping-test-sql=select *
3Q在web-inf/web.xml中添加如下代码:
<servlet>
<servlet-name>servletconfigurator</servlet-name>
<servlet-lass>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>
<init-param>
<param-name>propertyfile</param-name>
<param-value>web-inf/proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4Q配|就q么单,下面l你一D|么得到一个连接代码,其他的应该就比较单了
public connection getconnection() {
try {
conn = drivermanager.getconnection("proxool.bidding");
}catch(sqlexception ex){
ex.printstacktrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (sqlexception e) {
e.printstacktrace();
log("problem closing connection");
}
}
return conn;
}
... 77 more
解决办法Q?/p>
oracle的long字段Q修Ҏnumbercd
java? doublecd --------- oracle? numbercd
java? intcd --------- oracle? integercd
ALTER TABLESPACE APPS_TS_TX_DATA ADD DATAFILE '/d01/dba/vis01data/tx_data14.dbf' SIZE 100M;Q增?00M到APPS_TS_TX_DATA表空_
注意Q执行上面命令是增加tx_data**.dbf文g, **L“不存在SQLl果”里的数字代替Q一般ؓSQL中查询中的最大数字加1?br />
1?nbsp; <!--[endif]-->执行以下SQL语句查找存放表空间的数据文g的\?/font>
--Sep 28, 2008 Eleven.Xu
SELECT ddf.file_name
FROM Dba_Data_Files ddf
where ddf.tablespace_name = 'APPS_TS_TX_DATA'
2、用system/managerdPL/SQL Developer
新徏一个commandH口
q行如下SQL语句Q?/font>
ALTER TABLESPACE APPS_TS_TX_DATA ADD DATAFILE '/d01/dba/vis01data/tx_data14.dbf' SIZE 100M;Q增?00M到APPS_TS_TX_DATA表空_
注意Q执行上面命令是增加tx_data**.dbf文g, **L“不存在SQLl果”里的数字代替Q一般ؓSQL中查询中的最大数字加1?/font>
除非Context元素处于server.xml文g中否则不能设|该属性、默认|无,除了在用context XML片段文g部vContext的时候,在这U情况下Qpath被设|ؓ该文件的名称Q但不含.xml扩展名?/p>
通过复制WAR文g到Web应用E序的目录中q行部v时也是这样处理,path被设|ؓWAR文g名,但不?war扩展?br />属性:reloadable?/span>含义Q该标志启用或禁用对该网内定w新加载Web应用E序cR默认|false
属性:workDir、含义:Web应用E序的时文件目录的路径名。如果不讄该属性,则表C承Host的workDir、默认|None
可更新的q接视图
q接视图是指在一个视囄定义查询的from字句中引用了多个表或视图。而可更新的连接视图是指能够执?UPDATEQINSERTQ和 DELETE 操作的连接视图。ؓ了保证视图是可更新的Q其定义中不能包含以下语法结构:
集合操作W?
DISTINCT 操作W?
聚合函数或分析型函数
GROUP BYQORDER BYQCONNECT BYQ或 START WITH 字句
?SELECT 之后的列表中使用集合表达?
?SELECT 之后的列表中使用子查?
q接QjoinQ(但是有例外情况)
对于不可更新的视图,可以利用 INSTEAD OF 触发器对其数据进行修攏V?/p>
grant dba to dding;--授予DBA权限
grant unlimited tablespace to dding;--授予不限制的表空?nbsp;
grant select any table to dding;--授予查询M?nbsp;
grant select any dictionary to dding;