² Oracle9i的安装,请参照官方的安装说明。
² Oracle9i安装成功以后,使用管理员(用户名:sys、密码:sys)的身份登录进去,创建一个用户ddymis,密码:ddymis,角色默认赋予dba。
² Oracle9i安装成功以后,具体的权限设置如下:
1. 以Administrator权限登录Windows.
2. 启动Window 资源浏览器找到ORACLE_HOME目录,如C:\Oracle\ora92
3. 右键弹出菜单,选择该目录共享与安全(Win2000下要点击属性)
4. 点击 “安全” 页签
5. 在组和用户名称列表中点击“Authenticated Users” 项.
6. 在该用户的权限列表中,将“读取和运行”的选择框置为不选中状态
7.  ......
² Oracle9i的安装,请参照官方的安装说明。
² Oracle9i安装成功以后,使用管理员(用户名:sys、密码:sys)的身份登录进去,创建一个用户ddymis,密码:ddymis,角色默认赋予dba。
² Oracle9i安装成功以后,具体的权限设置如下:
1. 以Administrator权限登录Windows.
2. 启动Window 资源浏览器找到ORACLE_HOME目录,如C:\Oracle\ora92
3. 右键弹出菜单,选择该目录共享与安全(Win2000下要点击属性)
4. 点击 “安全” 页签
5. 在组和用户名称列表中点击“Authenticated Users” 项.
6. 在该用户的权限列表中,将“读取和运行”的选择框置为不选中状态
7.  ......
ORACLE sql 的处理过程大致如下:
1.运用HASH算法,得到一个HASH值,这个值可以通过V$SQLAREA.HASH_VALUE 查看
2.到shared pool 中的 library cache 中查找是否有相同的HASH值,如果存在,则无需硬解析,进行软解析
3.如果shared pool不存在此HASH值,则进行语法检查,查看是否有语法错误
4.如果没有语法错误,就进行语义检查,检查该SQL引用的对象是否存在,该用户是否具有访问该对象的权限
5.如果没有语义错误,对该SQL进行解析,生成解析树,执行计划
6.生成ORACLE能运行的二进制代码,运行该代码并且返回结果给用户
硬解析和软解析都在第5步进行
硬解析通常是昂贵的操作,大约占整个SQL执行的70%左右的时间,硬解析会生成执行树,执行计划,等等。
当再次执行同一条SQL语句的时候,由于发现library cache中有相同的HASH值,这个时候不会硬解析,而会软解析,
那么软解析究竟是干了什么呢?其实软解析就是跳过了生成解析树,生成执行计划这个耗时又耗CPU的操作,直接利用生成的执行计划运行
该SQL语句。
下面摘抄eygle深入解析ORACLE 中关于SQL执行过程的描述
1.首先获得library cache latch,根据SQL的HASH_ ......
ORACLE sql 的处理过程大致如下:
1.运用HASH算法,得到一个HASH值,这个值可以通过V$SQLAREA.HASH_VALUE 查看
2.到shared pool 中的 library cache 中查找是否有相同的HASH值,如果存在,则无需硬解析,进行软解析
3.如果shared pool不存在此HASH值,则进行语法检查,查看是否有语法错误
4.如果没有语法错误,就进行语义检查,检查该SQL引用的对象是否存在,该用户是否具有访问该对象的权限
5.如果没有语义错误,对该SQL进行解析,生成解析树,执行计划
6.生成ORACLE能运行的二进制代码,运行该代码并且返回结果给用户
硬解析和软解析都在第5步进行
硬解析通常是昂贵的操作,大约占整个SQL执行的70%左右的时间,硬解析会生成执行树,执行计划,等等。
当再次执行同一条SQL语句的时候,由于发现library cache中有相同的HASH值,这个时候不会硬解析,而会软解析,
那么软解析究竟是干了什么呢?其实软解析就是跳过了生成解析树,生成执行计划这个耗时又耗CPU的操作,直接利用生成的执行计划运行
该SQL语句。
下面摘抄eygle深入解析ORACLE 中关于SQL执行过程的描述
1.首先获得library cache latch,根据SQL的HASH_ ......
(1)SEQNAME.NEXTVAL里面的值如何读出来?可以直接在insert into test values(SEQNAME.NEXTVAL) 是可以用 这样:
SELECT tmp#_seq.NEXTVAL
INTO id_temp
from DUAL; 然后可以用id_temp
(2)PLS-00103: 出现符号 ">"在需要下列之一时:
代码如下:
IF (sum>0)
THEN
begin
INSERT INTO emesp.tp_sn_production_log
VALUES (r_serial_number, , id_temp);
EXIT;
end;
一直报sum>0 这是个很郁闷的问题 因为变量用了sum 所以不行,后改为i_sum>0
(3)oracle 语法
1. Oracle应用编辑方法概览
答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用;
2) ODBC
& ......
(1)SEQNAME.NEXTVAL里面的值如何读出来?可以直接在insert into test values(SEQNAME.NEXTVAL) 是可以用 这样:
SELECT tmp#_seq.NEXTVAL
INTO id_temp
from DUAL; 然后可以用id_temp
(2)PLS-00103: 出现符号 ">"在需要下列之一时:
代码如下:
IF (sum>0)
THEN
begin
INSERT INTO emesp.tp_sn_production_log
VALUES (r_serial_number, , id_temp);
EXIT;
end;
一直报sum>0 这是个很郁闷的问题 因为变量用了sum 所以不行,后改为i_sum>0
(3)oracle 语法
1. Oracle应用编辑方法概览
答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用;
2) ODBC
& ......
前段时间做了一个虚拟组织的创建。这个虚拟组织的创建是从现有的组织中读取数据然后进行分析保存到虚拟组织表中。保存之后写日志方便同步到其它系统中。公司使用的主要技术是SSH。由于是新人没有什么经验,加之时间比较紧迫,最后使用一般的逻辑思想通过递归在hibernate下顺利创建了。可是从现有的组织中读取10多万条的记录,然后逐条分析,保存,在写日志记录,在为每个应用写下发队列结果性能非常低。我们的系统中的数据要下发到300多个应用系统,也就是说读取10多万条记录就要分析十多万次,然后逐条写3000多万条记录,效率可想而知了。后来使用多线程来实行同步,可是保存的过程依然用十几分钟。这个过程是不能让人接受的。
之后优化性能的工作转到了我导师的手中。我导师的职位是系统架构师,年近四十,可以说是java元老级人物了。两天之后果然传出振奋人心的消息。保存工作从原来的耗时10多分钟变成了半分钟。真是大喜啊!
今早来上班,第一件事就是看看是什么实现的。第一就是不使用公司封装好的数据库连接,不适用HQL而是sql批量保存。这个当然能提高很大的性能了。也佩服导师之花了两天的时间把我十天的 ......
前段时间做了一个虚拟组织的创建。这个虚拟组织的创建是从现有的组织中读取数据然后进行分析保存到虚拟组织表中。保存之后写日志方便同步到其它系统中。公司使用的主要技术是SSH。由于是新人没有什么经验,加之时间比较紧迫,最后使用一般的逻辑思想通过递归在hibernate下顺利创建了。可是从现有的组织中读取10多万条的记录,然后逐条分析,保存,在写日志记录,在为每个应用写下发队列结果性能非常低。我们的系统中的数据要下发到300多个应用系统,也就是说读取10多万条记录就要分析十多万次,然后逐条写3000多万条记录,效率可想而知了。后来使用多线程来实行同步,可是保存的过程依然用十几分钟。这个过程是不能让人接受的。
之后优化性能的工作转到了我导师的手中。我导师的职位是系统架构师,年近四十,可以说是java元老级人物了。两天之后果然传出振奋人心的消息。保存工作从原来的耗时10多分钟变成了半分钟。真是大喜啊!
今早来上班,第一件事就是看看是什么实现的。第一就是不使用公司封装好的数据库连接,不适用HQL而是sql批量保存。这个当然能提高很大的性能了。也佩服导师之花了两天的时间把我十天的 ......
---------数学函数
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 powe ......
---------数学函数
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 powe ......
package com.chinacache.boss.queryservice.service.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.chinacache.boss.queryservice.exception.BusinessException;
import oracle.sql.ArrayDescriptor;
public class Main {
public static void main(String[] args) throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
java.sql.Array sqlArray = null;
conn = getOracleConnection();
// For oracle you need an array descriptor specifying
// the type of the array and a connection to the database
// the first parameter must match with the SQL ARRAY type created
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor(
"CHAR_ARRAY", conn);// CREATE OR REPLACE TYPE CHAR_ARRAY AS table OF VARCHAR2(255)
// then obtain an Array filled with the content below
String[] content ......
package com.chinacache.boss.queryservice.service.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.chinacache.boss.queryservice.exception.BusinessException;
import oracle.sql.ArrayDescriptor;
public class Main {
public static void main(String[] args) throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
java.sql.Array sqlArray = null;
conn = getOracleConnection();
// For oracle you need an array descriptor specifying
// the type of the array and a connection to the database
// the first parameter must match with the SQL ARRAY type created
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor(
"CHAR_ARRAY", conn);// CREATE OR REPLACE TYPE CHAR_ARRAY AS table OF VARCHAR2(255)
// then obtain an Array filled with the content below
String[] content ......