??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲啪啪综合AV一区,亚洲熟妇无码一区二区三区导航 ,亚洲熟妇无码久久精品http://www.tkk7.com/rain1102/category/37648.html<br/><font color="green" style="font-family: 华文行楷;font-size:16px;">化学l构搜烦Q化学信息学Q生物信息学Q实验室信息学等 ?lt;/font><br/><font color="#3C1435">以高U技的生物、化学信息技术实现生命科学领域中专业数据的计和理、提高研发能力、增强在U研和成本效率方面的国际竞争力,为生物、化学、医药和学术机构提供一的解决Ҏ和技术咨询?lt;/font><br/> <br/><font color="green" style="font-family: 华文行楷;font-size:16px;">子曰Q危邦不入,乱邦不居。天下有道则见,无道则隐?lt;/font><font color="#3C1435"></font><br/> zh-cnWed, 22 Jun 2011 07:54:39 GMTWed, 22 Jun 2011 07:54:39 GMT60在SQLPlus中执行用Java~写的Oracle存储q程[转蝲]http://www.tkk7.com/rain1102/archive/2011/06/22/352799.html周锐周锐Wed, 22 Jun 2011 04:38:00 GMThttp://www.tkk7.com/rain1102/archive/2011/06/22/352799.htmlhttp://www.tkk7.com/rain1102/comments/352799.htmlhttp://www.tkk7.com/rain1102/archive/2011/06/22/352799.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/352799.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/352799.html

首先在PL/Sql中分别执行:

create or replace and compile java source named TestJava1 as 
public class TestJava1 

  public static void test() 
  { 
   System.out.println("Hello"); 
  } 
}


create or replace procedure testJava1 as language java name 'TestJava1.test()';

---------------------------------------------------------------------------------------------------------

在SQLPlus?/span>

C:\Windows\System32>sqlplus nc5520110105/nc5520110105@192.168.10.87

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 1 14:06:02 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> set serveroutput on;
SQL> show serveroutput;
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
SQL> call dbms_java.set_output(2000);

Call completed.

SQL>
SQL> show serveroutput;
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
SQL> exec testJava1();
Hello

PL/SQL procedure successfully completed.

SQL>

---------------------------------------------------------------------------------------------------------

再看一个例子:

在PL/Sql中执行:

--用Java~写Oracle存储q程?/span>
create or replace and compile java source named test as
public class MyTest
{
    public static void myProc(int a,int b,int[] ret){
       ret[0]=a+b;
    }
    public static int myFunc(int a,int b){
       return a+b;
    }
}

--创徏存储q程
create or replace procedure myProc(a in number, b in number, ret out number) as
language java name 'MyTest.myProc(int,int,int[])';
--创徏函数
create or replace function myFunc(a in number, b in number) return number is
language java name 'MyTest.myFunc(int,int) return int';

然后在SqlPlus中测试存储过E?#8212;—

SQL> set serveroutput on
SQL> DECLARE a INTEGER;
  2  BEGIN
  3  myProc(1, 2, a);
  4  DBMS_OUTPUT.PUT_LINE(a);
  5  END;
  6  /
3

PL/SQL procedure successfully completed.

 

SQL> select myFunc(1,2) from dual;

MYFUNC(1,2)
-----------
          3

SQL>



周锐 2011-06-22 12:38 发表评论
]]>
Four steps to start oracle in ubuntuhttp://www.tkk7.com/rain1102/archive/2010/05/25/321783.html周锐周锐Tue, 25 May 2010 00:44:00 GMThttp://www.tkk7.com/rain1102/archive/2010/05/25/321783.htmlhttp://www.tkk7.com/rain1102/comments/321783.htmlhttp://www.tkk7.com/rain1102/archive/2010/05/25/321783.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/321783.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/321783.html
The steps of start|stop db server as follows:

1.start lisening

$lsnrctl start | stop

2.start or stop  datebase

$sqlplus /nolog

sql>connect /as sysdba

sql>startup | shutdown immediate


3.start or stop dbconsole

$emctl start | stop  dbconsole

4.start or stop iSQL*Plus

$isqlplusctl start | stop



周锐 2010-05-25 08:44 发表评论
]]>
9.04安装Oracle的详l步骤[转蝲]http://www.tkk7.com/rain1102/archive/2010/04/09/317868.html周锐周锐Fri, 09 Apr 2010 08:28:00 GMThttp://www.tkk7.com/rain1102/archive/2010/04/09/317868.htmlhttp://www.tkk7.com/rain1102/comments/317868.htmlhttp://www.tkk7.com/rain1102/archive/2010/04/09/317868.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/317868.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/317868.html ----------------------------服务器环境:
服务器型PLENOVO R525 G2
CPUQ至?核支持EMT64?br /> 内存Q?*4GB
存储Q?*300 raid5
swap分区大小Q内?2=16*=32GB
其他分区大小Ҏ需要自行设定?br /> IP地址Q手动指?DHCP会导致oracle自检不通过)
----------------------------操作pȝ安装
介质Qubuntu-9.10-desktop-amd64.iso
基本pȝ安装完毕后,
sudo apt-get updateQ更新系l到最斎ͼ
出现盘无法挂蝲的问题,sudo fsck后解冟?br /> -----------------------------oracle数据库安?br /> ---------准备介质
下蝲安装介质Q?0201_database_linux_x86_64.cpio.gz
解压Qgzip -d 10201_database_linux_x86_64.cpio.gz
解压Qcpio -idmv <10201_database_linux_x86_64.cpio.gz
解压得到Qdatabase目录
---------准备安装环境
1、安装compat libraries and 32-bit librariesQ?br /> sudo apt-get install gcc libaio1 lesstif2 lesstif2-dev make libc6 libc6-i386 libc6-dev-i386 libstdc++5 lib32stdc++6 lib32z1 ia32-libs
2、修改内核参?br /> sudo vi /etc/sysctl.confQ?br /> # add for oracle
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
vm.swappiness=10
# add for oracle
其中kernel.shmmax = 2147483648 是共享内存大,此处讄?GB?br />
3、徏立ORACLE的用户和用户l:
sudo groupadd nobody
sudo groupadd oinstall
sudo groupadd dba
sudo useradd -s /bin/bash -g oinstall -G dba oracle
sudo passwd oracle

4、sudo vi /etc/security/limits.conf
在文件末֊入:
#add for oracle
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
#add for oracle
5、库文g链接Q?br /> sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /bin/true /bin/rpm
sudo ln -s /usr/bin/basename /bin/basename
sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
6、徏立oracle目录(此处路径Ҏ需要修?
sudo mkdir -p /opt/ora10
sudo chown -R oracle:oinstall /opt/ora10
sudo chmod -R 775 /opt/ora10
7、执行sudo sysctl -p 使修改生效?br /> 8、修改oracle用户环境变量
以oracle用户dQsudo vi .profile
#add for oracle
export CFLAGS='-m32'
export LDFLAGS='-m32'
export ORACLE_BASE=/opt/ora10
export ORACLE_HOME=/opt/ora10
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
export ORACLE_OWNER=oracle
export ORACLE_SID=tmp
export ORACLE_TERM=xterm
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
#add for oracle
其中Q?br /> BASE和HOME路径需要与上面步骤中徏立的目录对应?br /> SID和NLS_LANGҎ需要修攏V?br />
9、oraclepȝ查:
sudo vi /etc/redhat-release
dQ?br /> Red Hat Linux release 3.1 (drupal)
10、开始安?br /> 以oracle用户重新d或者source .profile
执行Q?br /> cd database
./runInstaller
开始进行安装?br />
-----------------可能会遇到的问题
1、由于某些C++的编译用C32位库文gQ导致至有一?mk文g执行不过去,暂时q没扑ֈ解决办法。不q貌g影响oracle使用Q?br /> 2、安装完毕后Qdbca创徏数据库的时候报错:ORA-27125:unable to create shared memory segment
如下修改后,问题解决Q?br /> linux: # cd $ORACLE_HOME/bin
linux: # mv oracle oracle.bin

cat >oracle <<"EOF"
#!/bin/bash

export DISABLE_HUGETLBFS=1
exec $ORACLE_HOME/bin/oracle.bin $@
EOF

linux: # chmod +x oracle



周锐 2010-04-09 16:28 发表评论
]]>
pl/sql查询时dynamic performance tables not accessible错误http://www.tkk7.com/rain1102/archive/2010/03/25/316498.html周锐周锐Thu, 25 Mar 2010 01:03:00 GMThttp://www.tkk7.com/rain1102/archive/2010/03/25/316498.htmlhttp://www.tkk7.com/rain1102/comments/316498.htmlhttp://www.tkk7.com/rain1102/archive/2010/03/25/316498.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/316498.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/316498.htmldynamic performance tables not accessible,
automatic statistics disabled for this session

you can disable statistics in the preference menu,or obtain select
priviliges on the V$session,v$sesstat and v$statname tables
可是已经把系l权?select any table l这个用户了

解决Ҏ如下Q?/p>

grant SELECT ANY DICTIONARY to username;

因ؓv$开头的属于数据字典Q通常UCؓ动态性能视图?/p>

周锐 2010-03-25 09:03 发表评论
]]>
一ơ对dual表的恢复操作(ORA-00980:同义词{换不再有效错误解x? http://www.tkk7.com/rain1102/archive/2009/11/10/301757.html周锐周锐Tue, 10 Nov 2009 01:08:00 GMThttp://www.tkk7.com/rain1102/archive/2009/11/10/301757.htmlhttp://www.tkk7.com/rain1102/comments/301757.htmlhttp://www.tkk7.com/rain1102/archive/2009/11/10/301757.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/301757.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/301757.html

今天登陆到测试环?在做日常操作旉要用到dual?但是在用了一个查询语句时(SELECT to_char(current_timestamp) FROM dual)却提C?ORA-00980: 同义词{换不再有?错误,于是开始了q次的分析和恢复.

一、查扑֎?/p>

    Ҏ在网上搜索得到的信息判断可能是同义词丢失或者是表被删除Q于是进行以下操作以定问题?/p>

    SELECT * FROM Dba_Objects do WHERE  do.object_type ='TABLE' AND do.object_name = 'DUAL'

    SELECT * FROM Dba_Tables dt WHERE  dt.table_name = 'DUAL'

    SELECT * FROM Dba_Synonyms ds WHERE ds.table_name = 'DUAL'

    Ҏ以上数据字典反馈的信息确定是表被删除(因ؓdba_synonyms表中有此记录Q表明同义词未被删除)D此错误,军_重徏该表?/p>

二、徏表操?/p>

    ׃在正式环境中该表存在Q故q接到正式环境查看该表结?/p>

    SQL> desc dual;
         Name  Type        Nullable Default Comments
         ----- ----------- -------- ------- --------
         DUMMY VARCHAR2(1) Y                        

    查看脚本Q?/p>

    -- Create table
    create table SYS.DUAL
   (
      DUMMY VARCHAR2(1)
    )
   tablespace SYSTEM
   pctfree 10
   pctused 40
   initrans 1
   maxtrans 255
   storage
   (
    initial 104
    next 104
    minextents 1
    maxextents 505
    pctincrease 100
   );
   -- Grant/Revoke object privileges
  grant select on SYS.DUAL to PUBLIC;

有了以上内容Q可以开始徏表了Q因为同义词后面重新创建,所以可以在前删除,在操作之前用sys重新登陆

1、DROP PUBLIC SYNONYM dual;  --删除同义?/p>

2、create table dual
 (dummy varchar2(1))  --创徏?/p>

3、INSERT INTO dual VALUES('X')  --插入?/p>

4、create public synonym dual for dual  --创徏同义?/p>

5、grant select on dual to public with grant option  --授权,如果不允许其它h可以自q权限传递给其他用户Q可以去掉with后面的内?/p>

6、退出,使用普通用L陆,试dual表是否能正常使用

   select sysdate from dual;

7、若试正常则代表dual表已l被重新建立Q至此,一ơ对dual表的恢复完成?/p>

 

本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/alvenz/archive/2008/12/15/3519532.aspx



周锐 2009-11-10 09:08 发表评论
]]>
oracle调用javahttp://www.tkk7.com/rain1102/archive/2009/10/29/300146.html周锐周锐Thu, 29 Oct 2009 03:20:00 GMThttp://www.tkk7.com/rain1102/archive/2009/10/29/300146.htmlhttp://www.tkk7.com/rain1102/comments/300146.htmlhttp://www.tkk7.com/rain1102/archive/2009/10/29/300146.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/300146.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/300146.html前提是数据库上需要安装java虚拟?JVM),使用下面的语句查?

select * from dba_registry where comp_id = 'JAVAVM'

为空,则未安装,h?$ORACLE_HOME/javavm/install/initjvm.sql安装.
创徏函数

create or replace function fn_oraclecall(mArea in VARCHAR2,mDevID in Number,mPORT in Number)
return varchar2
as
language Java name 'Caller.call(java.lang.String,Integer,Integer) return Java.lang.String';

创徏存储q程

create or replace procedure CHK_SETCAB_NUM
(mArea in VARCHAR2,mDevID in Number,mPORT in Number,v_out out varchar2) is
begin
v_out := fn_oraclecall(mArea,mDevID,mPORT);
end CHK_SETCAB_NUM;

loadjava

loadjava -u sys/sys@sid  -oci8 -verbose -grant user -synonym -resolve -schema user D:\Caller.jar

--q里也可以是class文g,注意兼容oracle的jre版本


注意~写的java文g?即Caller.java的call()Ҏ,需要是staic



周锐 2009-10-29 11:20 发表评论
]]>
Oracle Database 11g SQL 开发指南阅读记?/title><link>http://www.tkk7.com/rain1102/archive/2009/09/03/293784.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Thu, 03 Sep 2009 12:00:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/09/03/293784.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/293784.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/09/03/293784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/293784.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/293784.html</trackback:ping><description><![CDATA[SQL语句分ؓ5c?br /> 1. 查询语句 SELECT<br /> 2. 数据操纵语言QData Manipulation Language, DMLQ语?br />     INSERT<br />     UPDATE<br />     DELETE<br /> 3. 数据定义语言QData Definition Language, DDLQ语?br />     CREATE<br />     ALTER<br />     DROP<br />     RENAME<br />     TRUNCATE<br /> 4. 事务控制QTransaction Control, TCQ语?br />     COMMIT<br />     ROLLBACK<br />     SAVEPOINT<br /> 5. 数据控制语言QData Control Language, DCLQ语?br />     GRANT<br />     REVOKE<br /> <br /> SYSDATE<br /> <br /> CREATE USE username IDENTIFIED BY password<br /> GRANT CONNECT, RESOURCE TO username<br /> <br /> id INTEGER CONSTRAINT student_pk PRIMARY KEY<br /> <br /> CONSTRAINT ~~~ REFERENCES product_type(id)<br /> <br /> CONSTRAINT compose_pk PRIMARY KEY (column1, column2)<br /> <br /> TO_DATE('25-JUL-2007')+2  => 27-JUL-2007<br /> <br /> q接操作W?||)<br /> <br /> NVL(phone, 'Unknown phone number')<br /> <br /> ANY = SOME       where id > ANY(2, 3, 4)       where id > ALL(2, 3, 4)<br /> <br /> WHERE name LIKE  '%\%%' ESCAPE '\'<br /> <br /> LIKE, IN, BETWEEN, IS NULL, IS NAN, IS INFINITE<br /> <br /> USING => ON    (+)<br /> <br /> _(一?   %(L?<br /> <br /> AND 优先 OR<br /> <br /> GROUP BY 可以不与HAVING字句一起用,但是HAVING必须必须与GROUP BY字句一起用?GROUP BY分组QHAVINGqo?br /> <br /> SELECT   product_type_id, AVG(price) FROM products WHERE price < 15 GROUP BY product_type_id HAVING AVG(price) > 13 ORDER BY AVG(price)<br /> <br /> 两种函数Q单行函敎ͼ字符Q数字,转换Q日期,正则表达式)和聚合函?br /> <br /> TO_CHAR(dob, 'MONTH DD, YYYY')      TO_DATE('7.4.07', 'MM.DD.YY')<br /> <br /> ALTER SESSION SET NLS_DATE_FORMAT = 'MONTH-DD-YYYY';<br /> <br /> ADD_MONTHS(x,y)    LAST_DAY(x)    MONTHS_BETWEEN(x, y)    NEXT_DAY(x, day)<br /> <br /> EXTRACT 取出q月日等。?br /> <br /> EXISTS性能高于IN<br /> <br /> UNION ALL (包括重复?     UNION (不包括重复的)     cd必须一P列数必须一P名称可以不一?br /> <br /> INTERSECT   MINUS<br /> <br /> TRANSLATE(x, from_string, to_string)<br /> DECODE(value, search_value, result, default_value)  => CASE<br /> <br /> SELECT division_id, SUM(salary) FROM employee GROUP BY ROLLUP(division_id) ORDER BY division_id;<br /> SELECT division_id, SUM(salary) FROM employee GROUP BY ROLLUP(division_id, job_id) ORDER BY division_id;<br /> M聚合函数都可以和ROLLUP一起?br /> <br /> SELECT division_id, SUM(salary) FROM employee GROUP BY CUBE(division_id, job_id) ORDER BY division_id;<br /> <br /> GROUPING只能在用ROLLUP或CUBE的查询时候?br /> SELECT GROUPING(division_id), division_id, SUM(salary) FROM employee GROUP BY ROLLUP(division_id) ORDER BY division_id;<br /> <br /> 使用GROUPING SETS子句可以只返回小计记?br /> <br /> MERGE INTO products p<br /> USING product_changes pc ON (<br />     p.product_id = pc.product_id<br /> )<br /> WHEN MATCHED THEN<br />     UPDATE<br />     SET<br />         p.product_type_id = pc.product_type_id,<br />         p.name = pc.name,<br />         p.description = pc.description,<br />         p.price = pc.price<br /> WHEN NOT MATCHED THEN<br />     INSERT (<br />         p.product_id, p.product_type_id, p.name, p.description, p.price<br />     ) VALUES (<br />         pc.product_id, pc.product_type_id, pc.name, pc.description, pc.price<br />     );<br /> <br /> user_tables, user_tab_columns, all_tables, all_tab_columns;<br /> <br /> ALTER TABLE salary_grades<br /> ADD (average_salary AS ((low_salary + high_salary)/2));<br /> <br /> ALTER TABLE order_status<br /> DROP COLUMN modified_by;<br /> <br /> ALTER TABLE order_status<br /> ADD CONSTRAINT order_status_modified_by_fk<br /> modified_by REFERENCES employee(employee_id) ON DELETE CASCADE;<br /> <br /> ALTER TABLE order_status<br /> ADD CONSTRAINT order_status_modified_by_fk<br /> modified_by REFERENCES employee(employee_id) ON DELETE SET NULL;<br /> <br /> ALTER TABLE order_status<br /> ADD CONSTRAINT order_status_status_ck<br /> CHECK (status in ('PLACED', 'PENDING', 'SHIPPED'));<br /> <br /> ALTER TABLE order_status<br /> DISABLE CONSTRAINT order_status_status_ck;<br /> <br /> ALTER TABLE order_status<br /> ENABLE CONSTRAINT order_status_status_ck;<br /> <br /> ALTER TABLE order_status<br /> ENABLE NOVALIDATE CONSTRAINT order_status_status_uq;<br /> <br /> SET SERVEROUTPUT ON<br /> <br /> DECLARE<br />     v_product_id  products.product_id%TYPE;<br />     v_name           products.name%TYPE;<br />     v_price           products.price%TYPE;<br /> <br />     CURSOR v_product_cursor IS<br />         SELECT product_id, name, price<br />         FROM products<br />         ORDER BY product_id;<br />     <br />     BEGIN<br />         OPEN v_product_cursor;<br />         LOOP<br />             FETCH v_product_cursor INTO v_product_id, name, price;<br />             EXIT WHEN v_product_cursor%NOTFOUND;<br />             DBMS_OUTPUT.PUT_LINE(~~)<br />         END LOOP;<br />         CLOSE v_product_cursor;<br />     END;<br /> /<br /> <br /> SET SERVEROUTPUT ON<br /> <br /> DECLARE<br />     CURSOR v_product_cursor IS<br />         SELECT product_id, name, price<br />         FROM products<br />         ORDER BY product_id;<br />     <br />     BEGIN<br />         FOR v_product IN v_product_cursor LOOP<br />             DBMS_OUTPUT.PUT_LINE(v_product.product_id || v_product.name || v_product.price)<br />         END LOOP;<br />     END;<br /> /<br /> <br /> Oracle预定义系l异常类?br /> <br /> <table style="margin-left: 10.65pt; border-top-style: none; border-right-style: none; border-left-style: none; border-collapse: collapse; border-bottom-style: none" cellspacing="0" FCK__ShowTableBorders?> <tbody> <tr> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><strong><span style="font-size: 9pt; line-height: 150%">命名的系l异?/span></strong></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-width: 1pt; border-left-color: windowtext; padding-bottom: 0cm; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="425"> <p style="line-height: 150%; text-align: left"><strong><span style="font-size: 9pt; line-height: 150%">产生原因</span></strong></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">ACCESS_INTO_NULL </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">未定义对?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">CASE_NOT_FOUND </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">CASE </span><span style="font-size: 9pt; line-height: 150%">中若未包含相应的</span><span style="font-size: 9pt; line-height: 150%"> WHEN </span><span style="font-size: 9pt; line-height: 150%">Qƈ且没有设|?/span><span style="font-size: 9pt; line-height: 150%"> ELSE </span><span style="font-size: 9pt; line-height: 150%">?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">COLLECTION_IS_NULL </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">集合元素未初始化</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">CURSER_ALREADY_OPEN </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">游标已经打开</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">DUP_VAL_ON_INDEX </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">唯一索引对应的列上有重复的?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">INVALID_CURSOR </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">在不合法的游标上q行操作</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">INVALID_NUMBER </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">内嵌?/span><span style="font-size: 9pt; line-height: 150%"> SQL </span><span style="font-size: 9pt; line-height: 150%">语句不能字W{换ؓ数字</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">NO_DATA_FOUND </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">使用</span><span style="font-size: 9pt; line-height: 150%"> select into </span><span style="font-size: 9pt; line-height: 150%">未返回行Q或应用索引表未初始化的元素?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">TOO_MANY_ROWS </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">执行</span><span style="font-size: 9pt; line-height: 150%"> select into </span><span style="font-size: 9pt; line-height: 150%">Ӟl果集超q一?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">ZERO_DIVIDE </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">除数?/span><span style="font-size: 9pt; line-height: 150%"> 0 </span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">SUBSCRIPT_BEYOND_COUNT </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">元素下标过嵌套表或</span><span style="font-size: 9pt; line-height: 150%"> VARRAY </span><span style="font-size: 9pt; line-height: 150%">的最大?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">SUBSCRIPT_OUTSIDE_LIMIT </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">使用嵌套表或</span><span style="font-size: 9pt; line-height: 150%"> VARRAY </span><span style="font-size: 9pt; line-height: 150%">Ӟ下标指定ؓ负数</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">VALUE_ERROR </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">赋值时Q变量长度不以容纳实际数据</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">LOGIN_DENIED </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">PL/SQL </span><span style="font-size: 9pt; line-height: 150%">应用E序q接?/span><span style="font-size: 9pt; line-height: 150%"> oracle </span><span style="font-size: 9pt; line-height: 150%">数据库时Q提供了不正的用户名或密码</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">NOT_LOGGED_ON </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">PL/SQL </span><span style="font-size: 9pt; line-height: 150%">应用E序在没有连?/span><span style="font-size: 9pt; line-height: 150%"> oralce </span><span style="font-size: 9pt; line-height: 150%">数据库的情况下访问数?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">PROGRAM_ERROR </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">PL/SQL </span><span style="font-size: 9pt; line-height: 150%">内部问题Q可能需要重装数据字典&</span><span style="font-size: 9pt; line-height: 150%"> pl./SQL </span><span style="font-size: 9pt; line-height: 150%">pȝ?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">ROWTYPE_MISMATCH </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">宿主游标变量?/span><span style="font-size: 9pt; line-height: 150%"> PL/SQL </span><span style="font-size: 9pt; line-height: 150%">游标变量的返回类型不兼容</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">SELF_IS_NULL </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">使用对象cdӞ?/span><span style="font-size: 9pt; line-height: 150%"> null </span><span style="font-size: 9pt; line-height: 150%">对象上调用对象方?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">STORAGE_ERROR </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">q行</span><span style="font-size: 9pt; line-height: 150%"> PL/SQL </span><span style="font-size: 9pt; line-height: 150%">Ӟ出内存I间</span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">SYS_INVALID_ID </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">无效?/span><span style="font-size: 9pt; line-height: 150%"> ROWID </span><span style="font-size: 9pt; line-height: 150%">字符?/span></p> </td> </tr> <tr> <td style="border-top-width: 1pt; border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; border-top-color: windowtext; padding-top: 0cm; border-bottom: windowtext 1pt solid" width="210"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">TIMEOUT_ON_RESOURCE </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-top-style: none; padding-top: 0cm; border-bottom: windowtext 1pt solid; border-left-style: none" width="425"> <p style="line-height: 150%; text-align: left"><span style="font-size: 9pt; line-height: 150%">Oracle </span><span style="font-size: 9pt; line-height: 150%">在等待资源时时</span></p> </td> </tr> </tbody> </table> <br /> 阅读?..<img src ="http://www.tkk7.com/rain1102/aggbug/293784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-09-03 20:00 <a href="http://www.tkk7.com/rain1102/archive/2009/09/03/293784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ANT执行ORACLE存储q程http://www.tkk7.com/rain1102/archive/2009/09/02/293592.html周锐周锐Wed, 02 Sep 2009 06:25:00 GMThttp://www.tkk7.com/rain1102/archive/2009/09/02/293592.htmlhttp://www.tkk7.com/rain1102/comments/293592.htmlhttp://www.tkk7.com/rain1102/archive/2009/09/02/293592.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/293592.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/293592.html BUILD FAILED
Java.sql.SQLException: ORA-06550: W?1 ? W?33 ?
PLS-00103: 出现W号 "end-of-file"在需要下列之一Ӟ
 := . ( @ % ; not

明明都是正确的ؓ什么用ANT׃报错呢,查了一下资料,发现ANT默认使用分号来作Z条SQL语句l束。导致存储过E中的语句被分开执行了?br /> 解决办法讄delimiter?/":

<target name="runsqls" depends="init" description="run sql script">
     <sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}" password="${jdbc.password}"  delimiter="/">
      <classpath refid="classpath"/>
   <fileset dir="sql-scripts">
    <include name="*.sql"/>
   </fileset>
  </sql>
</target>

现在ok了,情享受吧?img src ="http://www.tkk7.com/rain1102/aggbug/293592.html" width = "1" height = "1" />

周锐 2009-09-02 14:25 发表评论
]]>
目中遇到的性能问题ȝhttp://www.tkk7.com/rain1102/archive/2009/08/05/289965.html周锐周锐Wed, 05 Aug 2009 08:27:00 GMThttp://www.tkk7.com/rain1102/archive/2009/08/05/289965.htmlhttp://www.tkk7.com/rain1102/comments/289965.htmlhttp://www.tkk7.com/rain1102/archive/2009/08/05/289965.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/289965.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/289965.html最q一直从事的目中遇C性能问题, 虽然表中的数据数量不是太? 最大也?00万条, 其他基本都是100万左? 但由于存在一个化合物l构信息的数据得数据库特别的大, dmp文gp?G多。而客户对性能要求又比较高。目前遇到问题以及解x?q最x?ȝ如下:

1. 多表查询时候速度? 之间兌列创建烦? 只取需要数据?br /> 2. 多条数据扚w更新: 量使用原生SQL, 用Hibernate取了循环再更新?br /> 3. 数据量大查询时候少用upperQlower{类似数据提供的功能函数去{换数据,可以考虑是否在存入数据之前就把所有数据改为大写或者小写,昄时候再按要求格式化内容?br /> 4. 使用Hibernate时候,把关联关pd量设|成延迟加蝲Q然后用时候再用fetch取出?br />
目前先ȝq些Q?遇到再加?img src ="http://www.tkk7.com/rain1102/aggbug/289965.html" width = "1" height = "1" />

周锐 2009-08-05 16:27 发表评论
]]>
MySQL中同步两个表中的某些字段http://www.tkk7.com/rain1102/archive/2009/07/31/289324.html周锐周锐Fri, 31 Jul 2009 14:14:00 GMThttp://www.tkk7.com/rain1102/archive/2009/07/31/289324.htmlhttp://www.tkk7.com/rain1102/comments/289324.htmlhttp://www.tkk7.com/rain1102/archive/2009/07/31/289324.html#Feedback2http://www.tkk7.com/rain1102/comments/commentRss/289324.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/289324.html以前我们在写update的时候往往是?update tablename set columnname Q?valueq样的简单语法,而今天遇C个需求,Ҏ一张表中的数据来更新另外一张表中的某些字段|比如有个A表和B表,A中有字段idQnameQemailQphoneQcnoQ这里的cno也是唯一的,B表中有idQothercloumnQemailQphoneQcnoQ这时候想通过B中的email和phone值来更新A中的email和phone倹{我们可以用一下语句实现这个功能:

update A, B set
A.email= B.email, A.phone= B.phone
where A.cno=B.cno


Oracle中可以如下方式实玎ͼ
update A set
(email, phone) = (select B.email, B.phone where B.cno= A.cno)



周锐 2009-07-31 22:14 发表评论
]]>
java.sql.SQLException: ORA-01000: 出打开游标的最大数http://www.tkk7.com/rain1102/archive/2009/07/07/285854.html周锐周锐Tue, 07 Jul 2009 09:59:00 GMThttp://www.tkk7.com/rain1102/archive/2009/07/07/285854.htmlhttp://www.tkk7.com/rain1102/comments/285854.htmlhttp://www.tkk7.com/rain1102/archive/2009/07/07/285854.html#Feedback2http://www.tkk7.com/rain1102/comments/commentRss/285854.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/285854.htmlOracle扚w插入数据的时候遇C一个异常:java.sql.SQLException: ORA-01000: 出打开游标的最大数Q?解决办法Q?br /> 修改Oracle的默认最大游标个? 执行如下语句Q?br /> alter   system   set   open_cursors=1000;



周锐 2009-07-07 17:59 发表评论
]]>
在MySQL和Oracle中实现行合ƈhttp://www.tkk7.com/rain1102/archive/2009/06/24/283867.html周锐周锐Wed, 24 Jun 2009 01:18:00 GMThttp://www.tkk7.com/rain1102/archive/2009/06/24/283867.htmlhttp://www.tkk7.com/rain1102/comments/283867.htmlhttp://www.tkk7.com/rain1102/archive/2009/06/24/283867.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/283867.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/283867.html 表结构以及数据如?
id  name       email
1   eric         zhourui@founder.com
2   maggie    maggie@163.com
3   scott       scott@yahoo.com
4   eric         eric@163.com
我想的到如下数据
eric           zhourui@founder.com,eric@163.com
maggie      maggie@163.com
scott         scott@yahoo.com

如果使用MySQL, 则实现语句如?
select name , group_concat(email order by email separator ", ") as email from student group by name

如果以上效果惛_Oracle中显C? 则比较复杂点? 因ؓOracle中没有行合ƈ函数, 则需要用sys_connect_by_path()来实? 代码如下:
select name, ltrim(sys_connect_by_path(email,','),',') email from(
select name,email,
row_number() over(partition by name order by email) rn,
count(*) over(partition by name) cnt
from student
) where level = cnt
start with rn = 1
connect by prior name = name and prior rn + 1 = rn

周锐 2009-06-24 09:18 发表评论
]]>
Clobcd数据转换成字W串cdhttp://www.tkk7.com/rain1102/archive/2009/06/03/279816.html周锐周锐Wed, 03 Jun 2009 07:11:00 GMThttp://www.tkk7.com/rain1102/archive/2009/06/03/279816.htmlhttp://www.tkk7.com/rain1102/comments/279816.htmlhttp://www.tkk7.com/rain1102/archive/2009/06/03/279816.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/279816.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/279816.html dbms_lob.substr(clobcloum,2000,1)

select id, name, coden
  from cims_supplier
 where name like 'A%'
   and coden like 'A%'
union
select cdbregno      as id,
       dbms_lob.substr(supplier_name,2000,1) as name,
       coden         as coden
  from acdsupplier_moltable
 where supplier_name like 'A%'
   and coden like 'A%'

cims_supplier表中的name是varchar2cd, 而acdsupplier_moltable表中的supplier_name为clobcd, q样可以union?
当然排序也可以了.
select * from t1 order by dbms_lob.substr(clobcloum,2000,1);



周锐 2009-06-03 15:11 发表评论
]]>
Oracle to Buy Sun Microsystemshttp://www.tkk7.com/rain1102/archive/2009/04/21/266697.html周锐周锐Tue, 21 Apr 2009 02:43:00 GMThttp://www.tkk7.com/rain1102/archive/2009/04/21/266697.htmlhttp://www.tkk7.com/rain1102/comments/266697.htmlhttp://www.tkk7.com/rain1102/archive/2009/04/21/266697.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/266697.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/266697.htmlOracle to Buy Sun Microsystems

Following the collapse of talks with IBM earlier this month Oracle has stepped in to acquire Sun Microsystems for $7.4bn or $9.50 a share in an all cash transaction.  This is a substantially higher valuation than IBM’s rumored price of $6.85bn.  In a statement Oracle claims that the boards of both firms have approved the deal which is expected to complete in the summer subject to regulatory approval. Oracle CEO Larry Ellison stated:

"The acquisition of Sun transforms the IT industry, combining best-in-class enterprise software and mission-critical computing systems. Oracle will be the only company that can engineer an integrated system - applications to disk - where all the pieces fit and work together so customers do not have to do it themselves. Our customers benefit as their systems integration costs go down while system performance, reliability and security go up."

The deal offers substantial additional revenue to Oracle, according President Safra Catz:

"We expect this acquisition to be accretive to Oracle's earnings by at least 15 cents on a non-GAAP basis in the first full year after closing. We estimate that the acquired business will contribute over $1.5 billion to Oracle's non-GAAP operating profit in the first year, increasing to over $2 billion in the second year. This would make the Sun acquisition more profitable in per share contribution in the first year than we had planned for the acquisitions of BEA, PeopleSoft and Siebel combined,"

There is currently very limited information available as to what Oracle plans to do with either the hardware business the drives much of Sun’s revenue, Sun’s open source software offerings such as MySQL, GlassFish, NetBeans and JavaFX, or the Java Community Process which has been central to the way Sun has managed Java's evolution, but both Sun Chairman Scott McNealy and Sun's CEO Jonathan Schwartz have issued upbeat statements. Jonathan Schwartz has been quoted as saying:

"This is a fantastic day for Sun's customers, developers, partners and employees across the globe, joining forces with the global leader in enterprise software to drive innovation and value across every aspect of the technology marketplace," said Jonathan Schwartz, Sun's CEO, "From the Java platform touching nearly every business system on earth, powering billions of consumers on mobile handsets and consumer electronics, to the convergence of storage, networking and computing driven by the Solaris operating system and Sun's SPARC and x64 systems. Together with Oracle, we'll drive the innovation pipeline to create compelling value to our customer base and the marketplace."

Sun is the latest in a number of large scale acquisitions for Oracle.  In recent years the enterprise computing giant has also acquired Siebel, PeopleSoft and BEA Systems. If Oracle is able to sell Sun's hardware business on, perhaps to Fujitsu, Oracle will have made an important acquisition as a very low price.



周锐 2009-04-21 10:43 发表评论
]]>
Oracle中的应用域烦?domain index)http://www.tkk7.com/rain1102/archive/2009/04/09/264676.html周锐周锐Thu, 09 Apr 2009 09:20:00 GMThttp://www.tkk7.com/rain1102/archive/2009/04/09/264676.htmlhttp://www.tkk7.com/rain1102/comments/264676.htmlhttp://www.tkk7.com/rain1102/archive/2009/04/09/264676.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/264676.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/264676.html 问朋友得知这一U烦引叫应用域烦?是用戯己徏的一索引cd?br /> 让就按照要求写了创徏该烦引的语句Q执行一下创建需要的索引可以了?br />
create index acd3d20083.acd1_structure_smiles on acd3d20083.acd1_structure(cd_smiles) indextype is acd3d20083.jc_idxtype;

周锐 2009-04-09 17:20 发表评论
]]>
Oracle中计出两个日期之间的所有日?/title><link>http://www.tkk7.com/rain1102/archive/2009/04/01/263308.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 01 Apr 2009 03:48:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/04/01/263308.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/263308.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/04/01/263308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/263308.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/263308.html</trackback:ping><description><![CDATA[declare<br />     begin_date date default to_date('2009-02-02','yyyy-mm-dd');<br />     end_date   date default to_date('2009-02-10','yyyy-mm-dd');<br />     l_date     date;<br />     l_day      int;<br /> begin<br />     l_day:=end_date-begin_date;<br />     l_date:=begin_date;<br />     for i in 1 .. l_day<br />     loop<br />         dbms_output.put_line('Date : '||to_char(l_date,'yyyy-mm-dd'));<br />         l_date:=l_date+1;<br />     end loop;<br /> end;<br /> <br /> l果为:<br /> Date : 2009-02-02<br /> Date : 2009-02-03<br /> Date : 2009-02-04<br /> Date : 2009-02-05<br /> Date : 2009-02-06<br /> Date : 2009-02-07<br /> Date : 2009-02-08<br /> Date : 2009-02-09<br /><img src ="http://www.tkk7.com/rain1102/aggbug/263308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-04-01 11:48 <a href="http://www.tkk7.com/rain1102/archive/2009/04/01/263308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java调用Oracle的过E和函数http://www.tkk7.com/rain1102/archive/2009/03/11/259211.html周锐周锐Wed, 11 Mar 2009 13:05:00 GMThttp://www.tkk7.com/rain1102/archive/2009/03/11/259211.htmlhttp://www.tkk7.com/rain1102/comments/259211.htmlhttp://www.tkk7.com/rain1102/archive/2009/03/11/259211.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/259211.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/259211.html内容或简介:
/**
调用数据库里的一个函?br /> 一个函数本质上一个返回一个结果的存储q程Q这个例子示范了怎么调用有in、out和in/out参数的函?br /> ***********************************/
CallableStatement cs;
try {
// 调用一个没有参数的函数; 函数q回 a VARCHAR
// 预处理callable语句 
    cs = connection.prepareCall("{? = call myfunc}");

// 注册q回值类?br />     cs.registerOutParameter(1, i);

// Execute and retrieve the returned value
    cs.execute();
    String retValue = cs.getString(1);

// 调用有一个in参数的函? the function returns a VARCHAR
    cs = connection.prepareCall("{? = call myfuncin(?)}");

// Register the type of the return value
    cs.registerOutParameter(1, Types.VARCHAR);

// Set the value for the IN parameter
    cs.setString(2, "a string");

// Execute and retrieve the returned value
    cs.execute();
    retValue = cs.getString(1);

// 调用有一个out参数的函? the function returns a VARCHAR
    cs = connection.prepareCall("{? = call myfuncout(?)}");

// Register the types of the return value and OUT parameter
    cs.registerOutParameter(1, Types.VARCHAR);
    cs.registerOutParameter(2, Types.VARCHAR);

// Execute and retrieve the returned values
    cs.execute();
    retValue = cs.getString(1);           // return value
    String outParam = cs.getString(2);    // OUT parameter

// 调用有一个in/out参数的函? the function returns a VARCHAR
    cs = connection.prepareCall("{? = call myfuncinout(?)}");

// Register the types of the return value and OUT parameter
    cs.registerOutParameter(1, Types.VARCHAR);
    cs.registerOutParameter(2, Types.VARCHAR);

// Set the value for the IN/OUT parameter
    cs.setString(2, "a string");

// Execute and retrieve the returned values
    cs.execute();
    retValue = cs.getString(1);           // return value
    outParam = cs.getString(2);           // IN/OUT parameter
} catch (SQLException e) {
}



周锐 2009-03-11 21:05 发表评论
]]>
oracle数据字典http://www.tkk7.com/rain1102/archive/2009/03/10/258823.html周锐周锐Tue, 10 Mar 2009 08:06:00 GMThttp://www.tkk7.com/rain1102/archive/2009/03/10/258823.htmlhttp://www.tkk7.com/rain1102/comments/258823.htmlhttp://www.tkk7.com/rain1102/archive/2009/03/10/258823.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/258823.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/258823.htmlORACLE的数据字典是数据库的重要l成部分之一Q它随着数据库的产生而? 随着数据库的变化而变? 体现为sys用户下的一些表和视图。数据字典名U是大写的英文字W?

  数据字典里存有用户信息、用L权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视囄。我们不能手工修Ҏ据字兔R的信息。很多时候,一般的ORACLE用户不知道如何有效地利用它?/p>

  dictionary   全部数据字典表的名称和解释,它有一个同义词dict
  dict_column   全部数据字典表里字段名称和解?br />  
   如果我们x询跟索引有关的数据字典时Q可以用下面q条SQL语句:
  
   SQL>select * from dictionary where instr(comments,'index')>0;
  
   如果我们想知道user_indexes表各字段名称的详l含义,可以用下面这条SQL语句:
  
   SQL>select column_name,comments from dict_columns where
table_name='USER_INDEXES';
  
   依此cLQ就可以L知道数据字典的详l名U和解释Q不用查看ORACLE的其它文档资料了?br />   
   下面按类别列Z些ORACLE用户常用数据字典的查询用方法?br />   
   一、用?/p>

   查看当前用户的缺省表I间
   SQL>select username,default_tablespace from user_users;
   查看当前用户的角?br />    SQL>select * from user_role_privs;

   查看当前用户的系l权限和表权限
   SQL>select * from user_sys_privs;
   SQL>select * from user_tab_privs;

   二、表
   
   查看用户下所有的?br />    SQL>select * from user_tables;
       
   查看名称包含log字符的表
   SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0;
   
   查看某表的创建时?
   SQL>select object_name,created from user_objects where object_name=upper
('&table_name');
   
   查看某表的大?br />    SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where
segment_name=upper('&table_name');
   
   查看攑֜ORACLE的内存区里的?nbsp;
   SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
  
   三、烦?br />   
   查看索引个数和类?br />    SQL>select index_name,index_type,table_name from user_indexes order by table_name;
  查看索引被烦引的字段
   SQL>select * from user_ind_columns where index_name=upper('&index_name');
   
   查看索引的大?br />    SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where
segment_name=upper('&index_name');
  
   四、序列号
  
   查看序列Plast_number是当前?br />    SQL>select * from user_sequences;
  
   五、视?br />   
   查看视图的名U?br />    SQL>select view_name from user_views;
   
   查看创徏视图的select语句
   SQL>select view_name,text_length from user_views;
   SQL>set long 2000;说明Q可以根据视囄text_lengthD定set long 的大?br />    SQL>select text from user_views where view_name=upper('&view_name');
  
   六、同义词
  
   查看同义词的名称
   SQL>select * from user_synonyms;
  
   七、约束条?br />   
   查看某表的约束条?br />    SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from
user_constraints where table_name = upper('&table_name');
       
   SQL>select c.constraint_name,c.constraint_type,cc.column_name 
   from user_constraints c,user_cons_columns cc
   where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
   and c.owner = cc.owner and c.constraint_name = cc.constraint_name
   order by cc.position;       
  
   八、存储函数和q程
  
   查看函数和过E的状?br />    SQL>select object_name,status from user_objects where object_type='FUNCTION';
   SQL>select object_name,status from user_objects where object_type='PROCEDURE';
   
   查看函数和过E的源代?br />    SQL>select text from all_source where owner=user and name=upper('&plsql_name');
  
   九、触发器
  
   查看触发?br />    set long 50000;
   set heading off;
   set pagesize 2000;
   select
   'create or replace trigger "' ||
           trigger_name || '"' || chr(10)||
    decode( substr( trigger_type, 1, 1 ),
            'A', 'AFTER', 'B', 'BEFORE', 'I', 'INSTEAD OF' ) ||
                 chr(10) ||
    triggering_event || chr(10) ||
    'ON "' || table_owner || '"."' ||
          table_name || '"' || chr(10) ||
    decode( instr( trigger_type, 'EACH ROW' ), 0, null,
               'FOR EACH ROW' ) || chr(10) ,
    trigger_body
   from user_triggers;
本脓来自天极|群乐社?-http://q.yesky.com/group/review-17556508.html

 



周锐 2009-03-10 16:06 发表评论
]]>
Oracle 一些命?/title><link>http://www.tkk7.com/rain1102/archive/2009/03/10/258817.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Tue, 10 Mar 2009 07:58:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/03/10/258817.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/258817.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/03/10/258817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/258817.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/258817.html</trackback:ping><description><![CDATA[<p>sqlplus /nolog<br /> SQL>conn /as sys</p> <p>CREATE USER "TEST"  PROFILE "DEFAULT" <br /> IDENTIFIED BY "test" DEFAULT TABLESPACE "TEST" ;</p> <p>grant connect,resource,dba to "someuser" with admin option;<br />   <br /> 查看当前用户的缺省表I间<br />     SQL>select username,default_tablespace from user_users;</p> <p>查看当前用户的角?br />     SQL>select * from user_role_privs;</p> <p>查看当前用户的系l权限和表权限<br />     SQL>select * from user_sys_privs;<br />     SQL>select * from user_tab_privs;<br /> <br /> 查看所有用?br />     SQL>select   username   from   all_users;</p><img src ="http://www.tkk7.com/rain1102/aggbug/258817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-03-10 15:58 <a href="http://www.tkk7.com/rain1102/archive/2009/03/10/258817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL性能优化〔{贴?/title><link>http://www.tkk7.com/rain1102/archive/2009/02/25/256703.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 25 Feb 2009 13:42:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/02/25/256703.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/256703.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/02/25/256703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/256703.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/256703.html</trackback:ping><description><![CDATA[<strong>1. 选择最有效率的表名序(只在Z规则的优化器中有?Q?br /> </strong>ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名QFROM子句中写在最后的?基础?driving table)被最先处理,在FROM子句中包含多个表的情况下,你必选择记录条数最的表作为基表。如果有3个以上的表连接查? 那就需要选择交叉?intersection table)作ؓ基础? 交叉表是指那个被其他表所引用的表.<br /> <strong>2. WHERE子句中的q接序Q?/strong><br /> ORACLE采用自下而上的顺序解析WHERE子句,Ҏq个原理,表之间的q接必须写在其他WHERE条g之前, 那些可以qo掉最大数量记录的条g必须写在WHERE子句的末?<br /> <strong>3. SELECT子句中避免? * 'Q?/strong><br /> ORACLE在解析的q程? 会将'*' 依次转换成所有的列名, q个工作是通过查询数据字典完成? q意味着耗费更多的时?br /> <strong>4.  减少讉K数据库的ơ数Q?/strong><br /> ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, l定变量 , L据块{;<br /> <strong>5. 在SQL*Plus , SQL*Forms和Pro*C中重新设|ARRAYSIZE参数, 可以增加每次数据库访问的索数据量 ,gؓ200<br /> 6. 使用DECODE函数来减处理时_</strong><br /> 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的?<br /> <strong>7. 整合?无关联的数据库访问:<br /> </strong>如果你有几个单的数据库查询语?你可以把它们整合C个查询中(即它们之间没有关系)<br /> <strong>8. 删除重复记录Q?/strong><br /> 最高效的删除重复记录方?( 因ؓ使用了ROWID)例子Q?br /> DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) <br /> FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO);<br /> <strong>9. 用TRUNCATE替代DELETEQ?br /> </strong>当删除表中的记录?在通常情况? 回滚D?rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状?准确地说是恢复到执行删除命o之前的状? 而当q用TRUNCATE? 回滚D不再存放Q何可被恢复的信息.当命令运行后,数据不能被恢?因此很少的资源被调用,执行旉也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)<br /> <strong>10. 量多用COMMITQ?br /> </strong>只要有可?在程序中量多用COMMIT, q样E序的性能得到提高,需求也会因为COMMIT所释放的资源而减? <br /> COMMIT所释放的资? <br /> a. 回滚D上用于恢复数据的信? <br /> b. 被程序语句获得的?<br /> c. redo log buffer 中的I间 <br /> d. ORACLE为管理上q?U资源中的内部花?br /> <strong>11. 用Where子句替换HAVING子句Q?br /> </strong>避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集q行qo. q个处理需要排?总计{操? 如果能通过WHERE子句限制记录的数?那就能减这斚w的开销. (非oracle?on、where、havingq三个都可以加条件的子句中,on是最先执行,whereơ之Qhaving最后,因ؓon是先把不W合条g的记录过滤后才进行统计,它就可以减少中间q算要处理的数据Q按理说应该速度是最快的Qwhere也应该比having快点的,因ؓ它过滤数据后才进行sumQ在两个表联接时才用on的,所以在一个表的时候,剩下where跟having比较了。在q单表查询统计的情况下,如果要过滤的条g没有涉及到要计算字段Q那它们的结果是一LQ只是where可以使用rushmore技术,而having׃能,在速度上后者要慢如果要涉及到计的字段Q就表示在没计算之前Q这个字D늚值是不确定的Q根据上写的工作流E,where的作用时间是在计之前就完成的,而having是在计后才v作用的,所以在q种情况下,两者的l果会不同。在多表联接查询Ӟon比where更早起作用。系l首先根据各个表之间的联接条Ӟ把多个表合成一个时表后,再由whereq行qoQ然后再计算Q计完后再由havingq行qo。由此可见,要想qo条g起到正确的作用,首先要明白这个条件应该在什么时候v作用Q然后再军_攑֜那里<br /> <strong>12. 减少对表的查询:<br /> </strong>在含有子查询的SQL语句?要特别注意减对表的查询.例子Q?br />      SELECT  TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT<br /> TAB_NAME,DB_VER FROM  TAB_COLUMNS  WHERE  VERSION = 604)<br /> <strong>13. 通过内部函数提高SQL效率.Q?/strong><br /> 复杂的SQL往往牺牲了执行效? 能够掌握上面的运用函数解决问题的Ҏ在实际工作中是非常有意义?br /> <strong>14. 使用表的别名(Alias)Q?/strong><br /> 当在SQL语句中连接多个表? 请用表的别名ƈ把别名前~于每个Column?q样一?可以减解析的旉q减那些由Column歧义引v的语法错?<br /> <strong>15. 用EXISTS替代IN、用NOT EXISTS替代NOT INQ?/strong><br /> 在许多基于基表的查询?Z满一个条?往往需要对另一个表q行联接.在这U情况下, 使用EXISTS(或NOT EXISTS)通常提高查询的效率. 在子查询?NOT IN子句执行一个内部的排序和合q? 无论在哪U情况下,NOT IN都是最低效?(因ؓ它对子查询中的表执行了一个全表遍?. Z避免使用NOT IN ,我们可以把它改写成外q接(Outer Joins)或NOT EXISTS.<br /> 例子Q?br /> Q高效)SELECT * FROM  EMP (基础?  WHERE  EMPNO > 0  AND  EXISTS (SELECT ‘X'  FROM DEPT  WHERE  DEPT.DEPTNO = EMP.DEPTNO  AND  LOC = ‘MELB')<br />   (低效)SELECT  * FROM  EMP (基础?  WHERE  EMPNO > 0  AND  DEPTNO IN(SELECT DEPTNO  FROM  DEPT  WHERE  LOC = ‘MELB')<br /> <strong>16. 识别'低效执行'的SQL语句</strong>Q?br /> 虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始l是一个最好的ҎQ?br /> SELECT  EXECUTIONS , DISK_READS, BUFFER_GETS, <br /> ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, <br /> ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, <br /> SQL_TEXT <br /> FROM  V$SQLAREA <br /> WHERE  EXECUTIONS>0 <br /> AND  BUFFER_GETS > 0 <br /> AND  (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 <br /> ORDER BY  4 DESC;<br /> <strong>17. 用烦引提高效率:<br /> </strong>索引是表的一个概念部?用来提高索数据的效率QORACLE使用了一个复杂的自^衡B-treel构. 通常,通过索引查询数据比全表扫描要? 当ORACLE扑և执行查询和Update语句的最佌\径时, ORACLE优化器将使用索引. 同样在联l多个表时用烦引也可以提高效率. 另一个用烦引的好处?它提供了主键(primary key)的唯一性验?。那些LONG或LONG RAW数据cd, 你可以烦引几乎所有的? 通常, 在大型表中用烦引特别有? 当然,你也会发? 在扫描小表时,使用索引同样能提高效? 虽然使用索引能得到查询效率的提高,但是我们也必L意到它的代h. 索引需要空间来存储,也需要定期维? 每当有记录在表中增减或烦引列被修Ҏ, 索引本n也会被修? q意味着每条记录的INSERT , DELETE , UPDATEؓ此多付出4 , 5 ơ的盘I/O . 因ؓ索引需要额外的存储I间和处?那些不必要的索引反而会使查询反应时间变?。定期的重构索引是有必要?Q?br /> ALTER  INDEX <indexname></indexname>REBUILD <tablespacename> </tablespacename> <br /> <strong>18. 用EXISTS替换DISTINCTQ?br /> </strong>当提交一个包含一对多表信?比如部门表和雇员?的查询时,避免在SELECT子句中用DISTINCT. 一般可以考虑用EXIST替换, EXISTS 使查询更?因ؓRDBMS核心模块在子查询的条g一旦满_,立刻q回l果. 例子Q?br />        (低效): <br /> SELECT  DISTINCT  DEPT_NO,DEPT_NAME  FROM  DEPT D , EMP E <br /> WHERE  D.DEPT_NO = E.DEPT_NO <br /> (高效): <br /> SELECT  DEPT_NO,DEPT_NAME  FROM  DEPT D  WHERE  EXISTS ( SELECT ‘X' <br /> FROM  EMP E  WHERE E.DEPT_NO = D.DEPT_NO);<br /> <strong>19. sql语句用大写的Q因为oracleL先解析sql语句Q把写的字母{换成大写的再执行<br /> 20. 在java代码中尽量少用连接符“Q?#8221;q接字符Ԍ<br /> 21. 避免在烦引列上用NOT 通常Q?/strong> <br /> 我们要避免在索引列上使用NOT, NOT会生在和在索引列上使用函数相同的媄? 当ORACLE”遇到”NOT,他就会停止用烦引{而执行全表扫?<br /> <strong>22. 避免在烦引列上用计.</strong><br /> WHERE子句中,如果索引列是函数的一部分Q优化器不使用索引而用全表扫描. <br /> 举例: <br /> 低效Q?<br /> SELECT … FROM  DEPT  WHERE SAL * 12 > 25000; <br /> 高效: <br /> SELECT … FROM DEPT WHERE SAL > 25000/12;<br /> <strong>23. ?gt;=替代></strong><br /> 高效: <br /> SELECT * FROM  EMP  WHERE  DEPTNO >=4 <br /> 低效: <br /> SELECT * FROM EMP WHERE DEPTNO >3 <br /> 两者的区别在于, 前者DBMS直接蟩到第一个DEPT{于4的记录而后者将首先定位到DEPTNO=3的记录ƈ且向前扫描到W一个DEPT大于3的记?<br /> <strong>24. 用UNION替换OR (适用于烦引列)</strong><br /> 通常情况? 用UNION替换WHERE子句中的OR会起到较好的效? 对烦引列使用OR造成全表扫描. 注意, 以上规则只针对多个烦引列有效. 如果有column没有被烦? 查询效率可能会因Z没有选择OR而降? 在下面的例子? LOC_ID 和REGION上都建有索引. <br /> 高效: <br /> SELECT LOC_ID , LOC_DESC , REGION <br /> FROM LOCATION <br /> WHERE LOC_ID = 10 <br /> UNION <br /> SELECT LOC_ID , LOC_DESC , REGION <br /> FROM LOCATION <br /> WHERE REGION = “MELBOURNE” <br /> 低效: <br /> SELECT LOC_ID , LOC_DESC , REGION <br /> FROM LOCATION <br /> WHERE LOC_ID = 10 OR REGION = “MELBOURNE” <br /> 如果你坚持要用OR, 那就需要返回记录最的索引列写在最前面.<br /> <strong>25. 用IN来替换OR  <br /> </strong>q是一条简单易记的规则Q但是实际的执行效果q须验,在ORACLE8i下,两者的执行路径g是相同的Q <br /> 低效: <br /> SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30 <br /> 高效 <br /> SELECT… FROM LOCATION WHERE LOC_IN  IN (10,20,30);<br /> <strong>26. 避免在烦引列上用IS NULL和IS NOT NULL</strong><br /> 避免在烦引中使用M可以为空的列QORACLE无法用该索引Q对于单列烦引,如果列包含空|索引中将不存在此记录. 对于复合索引Q如果每个列都ؓI,索引中同样不存在此记? 如果臛_有一个列不ؓI,则记录存在于索引中.举例: 如果唯一性烦引徏立在表的A列和B列上, q且表中存在一条记录的A,Bgؓ(123,null) , ORACLE不接受下一条具有相同A,B|123,nullQ的记录(插入). 然而如果所有的索引列都为空QORACLE认为整个键gؓI空不等于空. 因此你可以插?000 条具有相同键值的记录,当然它们都是I? 因ؓIg存在于烦引列?所以WHERE子句中对索引列进行空值比较将使ORACLE停用该烦?<br /> 低效: (索引失效) <br /> SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE IS NOT NULL; <br /> 高效: (索引有效) <br /> SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE >=0;<br /> <strong>27. L使用索引的第一个列Q?br /> </strong>如果索引是徏立在多个列上, 只有在它的第一个列(leading column)被where子句引用?优化器才会选择使用该烦? q也是一条简单而重要的规则Q当仅引用烦引的W二个列?优化器用了全表扫描而忽略了索引<br /> <strong>28. 用UNION-ALL 替换UNION ( 如果有可能的?Q?/strong><br /> 当SQL语句需要UNION两个查询l果集合?q两个结果集合会以UNION-ALL的方式被合ƈ, 然后在输出最l结果前q行排序. 如果用UNION ALL替代UNION, q样排序׃是必要了. 效率׃因此得到提高. 需要注意的是,UNION ALL 重复输Z个结果集合中相同记录. 因此各位q是要从业务需求分析用UNION ALL的可行? UNION 对l果集合排序,q个操作会用到SORT_AREA_SIZEq块内存. 对于q块内存的优化也是相当重要的. 下面的SQL可以用来查询排序的消耗量<br /> 低效Q?<br /> SELECT  ACCT_NUM, BALANCE_AMT <br /> FROM  DEBIT_TRANSACTIONS <br /> WHERE TRAN_DATE = '31-DEC-95' <br /> UNION <br /> SELECT ACCT_NUM, BALANCE_AMT <br /> FROM DEBIT_TRANSACTIONS <br /> WHERE TRAN_DATE = '31-DEC-95' <br /> 高效: <br /> SELECT ACCT_NUM, BALANCE_AMT <br /> FROM DEBIT_TRANSACTIONS <br /> WHERE TRAN_DATE = '31-DEC-95' <br /> UNION ALL <br /> SELECT ACCT_NUM, BALANCE_AMT <br /> FROM DEBIT_TRANSACTIONS <br /> WHERE TRAN_DATE = '31-DEC-95'<br /> <strong>29. 用WHERE替代ORDER BYQ?br /> </strong>ORDER BY 子句只在两种严格的条件下使用索引. <br /> ORDER BY中所有的列必d含在相同的烦引中q保持在索引中的排列序. <br /> ORDER BY中所有的列必d义ؓ非空. <br /> WHERE子句使用的烦引和ORDER BY子句中所使用的烦引不能ƈ?<br /> 例如: <br /> 表DEPT包含以下? <br /> DEPT_CODE PK NOT NULL <br /> DEPT_DESC NOT NULL <br /> DEPT_TYPE NULL<br /> 低效: (索引不被使用) <br /> SELECT DEPT_CODE FROM  DEPT  ORDER BY  DEPT_TYPE <br /> 高效: (使用索引) <br /> SELECT DEPT_CODE  FROM  DEPT  WHERE  DEPT_TYPE > 0<br /> <strong>30. 避免改变索引列的cd.:</strong><br /> 当比较不同数据类型的数据? ORACLE自动对列q行单的cd转换. <br /> 假设 EMPNO是一个数值类型的索引? <br /> SELECT …  FROM EMP  WHERE  EMPNO = ‘123' <br /> 实际?l过ORACLEcd转换, 语句转化? <br /> SELECT …  FROM EMP  WHERE  EMPNO = TO_NUMBER(‘123') <br /> q运的是,cd转换没有发生在烦引列?索引的用途没有被改变. <br /> 现在,假设EMP_TYPE是一个字W类型的索引? <br /> SELECT …  FROM EMP  WHERE EMP_TYPE = 123 <br /> q个语句被ORACLE转换? <br /> SELECT …  FROM EMP  WHERETO_NUMBER(EMP_TYPE)=123 <br /> 因ؓ内部发生的类型{? q个索引不会被用到! Z避免ORACLE对你的SQLq行隐式的类型{? 最好把cd转换用显式表现出? 注意当字W和数值比较时, ORACLE会优先{换数值类型到字符cd<br /> <strong>31. 需要当心的WHERE子句:</strong><br /> 某些SELECT 语句中的WHERE子句不用烦? q里有一些例? <br /> 在下面的例子? (1)‘!=' 不使用索引. C, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表? (2) ‘||'是字W连接函? p其他函数那样, 停用了烦? (3) ‘+'是数学函? p其他数学函数那样, 停用了烦? (4)相同的烦引列不能互相比较,q将会启用全表扫?<br /> <strong>32<br /> a. 如果索数据量过30%的表中记录数.使用索引没有显著的效率提高. <br /> b. 在特定情况下, 使用索引也许会比全表扫描? 但这是同一个数量上的区别. 而通常情况?使用索引比全表扫描要块几倍乃臛_千?</strong><br /> <strong>33. 避免使用耗费资源的操?</strong><br /> 带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 <br /> 执行耗费资源的排?SORT)功能. DISTINCT需要一ơ排序操? 而其他的臛_需要执行两ơ排? 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑? 毕竟它们的可L很?br /> <strong>34. 优化GROUP BY:</strong><br /> 提高GROUP BY 语句的效? 可以通过不需要的记录在GROUP BY 之前qo?下面两个查询q回相同l果但第二个明显快了许?<br /> 低效: <br /> SELECT JOB , AVG(SAL) <br /> FROM EMP <br /> GROUP JOB <br /> HAVING JOB = ‘PRESIDENT' <br /> OR JOB = ‘MANAGER' <br /> 高效: <br /> SELECT JOB , AVG(SAL) <br /> FROM EMP <br /> WHERE JOB = ‘PRESIDENT' <br /> OR JOB = ‘MANAGER' <br /> GROUP JOB<br /><img src ="http://www.tkk7.com/rain1102/aggbug/256703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-02-25 21:42 <a href="http://www.tkk7.com/rain1102/archive/2009/02/25/256703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle清空TEMP01.DBF文ghttp://www.tkk7.com/rain1102/archive/2009/02/24/256495.html周锐周锐Tue, 24 Feb 2009 11:24:00 GMThttp://www.tkk7.com/rain1102/archive/2009/02/24/256495.htmlhttp://www.tkk7.com/rain1102/comments/256495.htmlhttp://www.tkk7.com/rain1102/archive/2009/02/24/256495.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/256495.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/256495.html 1、先x自动增长
2、resize文g
alter database tempfile 'D:\oracle\product\10.2.0\oradata\TEMP01.DBF' autoextend off;
alter database tempfile 'D:\oracle\product\10.2.0\oradata\TEMP01.DBF' resize 300M;

周锐 2009-02-24 19:24 发表评论
]]>
在本地计机无法启动OracleDBConsoleorcl服务解决http://www.tkk7.com/rain1102/archive/2009/02/24/256479.html周锐周锐Tue, 24 Feb 2009 09:22:00 GMThttp://www.tkk7.com/rain1102/archive/2009/02/24/256479.htmlhttp://www.tkk7.com/rain1102/comments/256479.htmlhttp://www.tkk7.com/rain1102/archive/2009/02/24/256479.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/256479.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/256479.html
解决ҎQ?br />
在命令行输入
$ emca –config dbcontrol db
  输入以下信息Q?br />
  SIDQXXXX
  Listener port number: 1521
  Sys 口oQ?*****
  ……

C:\Documents and Settings\Administrator>emca -config dbcontrol db

EMCA 开始于 2009-2-24 17:04:05
EM Configuration Assistant 10.2.0.1.0 正式?br /> 版权所?(c) 2003, 2005, Oracle。保留所有权利?/p>

输入以下信息:
数据?SID: orcl
已ؓ数据?orcl 配置?Database Control
您已选择配置 Database Control, 以便理数据?orcl
此操作将Ud现有配置和默认设|? q新执行配|?br /> 是否l箋? [yes(Y)/no(N)]: y
监听E序端口? 1521
SYS 用户的口?
DBSNMP 用户的口?
SYSMAN 用户的口?
SYSMAN 用户的口? 通知的电子邮件地址 (可?: vipzhour@163.com
通知的发?(SMTP) 服务?(可?:
-----------------------------------------------------------------

已指定以下设|?/p>

数据?ORACLE_HOME ................ D:\oracle\product\10.2.0\db_1

数据库主机名 ................ cst-server
监听E序端口?................ 1521
数据?SID ................ orcl
通知的电子邮件地址 ............... vipzhour@163.com
通知的发?(SMTP) 服务?...............

-----------------------------------------------------------------
是否l箋? [yes(Y)/no(N)]: y
2009-2-24 17:06:50 oracle.sysman.emcp.EMConfig perform
信息: 正在此操作记录?D:\oracle\product\10.2.0\db_1\cfgtoollogs\emca\orcl\emc
a_2009-02-24_05-04-05-下午.log?br /> 2009-2-24 17:06:57 oracle.sysman.emcp.util.DBControlUtil stopOMS
信息: 正在停止 Database Control (此操作可能需要一D|?...



周锐 2009-02-24 17:22 发表评论
]]>
查看oracle版本命ohttp://www.tkk7.com/rain1102/archive/2009/02/11/254272.html周锐周锐Wed, 11 Feb 2009 08:24:00 GMThttp://www.tkk7.com/rain1102/archive/2009/02/11/254272.htmlhttp://www.tkk7.com/rain1102/comments/254272.htmlhttp://www.tkk7.com/rain1102/archive/2009/02/11/254272.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/254272.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/254272.html1  查看oracle的版本信?/p>

Q?Q用客户端连接到数据库,执行select * from v$instance
            查看version?/p>

Q?Qselect * from product_component_version

Q?Q或查询V$VERSION查看lgU信?/p>

周锐 2009-02-11 16:24 发表评论
]]>
ORA-29857: 表空间中存在域烦引和/或次U对?/title><link>http://www.tkk7.com/rain1102/archive/2009/01/21/252208.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 21 Jan 2009 06:19:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/01/21/252208.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/252208.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/01/21/252208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/252208.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/252208.html</trackback:ping><description><![CDATA[select owner,segment_name, segment_type from dba_segments where tablespace_name = 'EXAMPLE'; <br /> <br /> select distinct owner,segment_name, segment_type from dba_extents where tablespace_name='EXAMPLE'; <br /> <br /> 查看哪些objects存储在EXAMPLE表空_其drop或者moveQ然后再drop tablespace <br /> <br /> drop tablespace tablespace_name including contents; 命o删除表空?/cn> <br /><img src ="http://www.tkk7.com/rain1102/aggbug/252208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-01-21 14:19 <a href="http://www.tkk7.com/rain1102/archive/2009/01/21/252208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE SEQUENCE的简单介l?/title><link>http://www.tkk7.com/rain1102/archive/2009/01/19/251955.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 19 Jan 2009 13:35:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/01/19/251955.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/251955.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/01/19/251955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/251955.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/251955.html</trackback:ping><description><![CDATA[在oracle中sequence是所谓的序列P每次取的时候它会自动增加,一般用在需要按序列h序的地方?nbsp; <br /> 1、Create Sequence  <br /> 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限Q?nbsp; <br /> CREATE SEQUENCE emp_sequence  <br />     INCREMENT BY 1  -- 每次加几?nbsp; <br />     START WITH 1    -- ?开始计?nbsp; <br />     NOMAXVALUE      -- 不设|最大?nbsp; <br />     NOCYCLE         -- 一直篏加,不@?nbsp; <br />     CACHE 10;  <br /> <br /> 一旦定义了emp_sequenceQ你可以用CURRVALQNEXTVAL  <br />  CURRVAL=q回 sequence的当前?nbsp; <br />  NEXTVAL=增加sequence的|然后q回 sequence ?nbsp; <br /> 比如Q?nbsp; <br />   emp_sequence.CURRVAL  <br />   emp_sequence.NEXTVAL  <br /> <br /> 可以使用sequence的地方:  <br /> - 不包含子查询、snapshot、VIEW?nbsp;SELECT 语句  <br /> - INSERT语句的子查询?nbsp; <br /> - NSERT语句的VALUES?nbsp; <br /> - UPDATE ?nbsp;SET?nbsp;   <br /> <br /> 可以看如下例子:  <br /> INSERT INTO emp VALUES   <br /> (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  <br /> <br /> SELECT empseq.currval     FROM DUAL;  <br /> <br /> 但是要注意的是:  <br /> - W一ơNEXTVALq回的是初始|随后的NEXTVAL会自动增加你定义的INCREMENT BY|然后q回增加后的倹{CURRVAL Lq回当前SEQUENCE的|但是在第一ơNEXTVAL初始化之后才能用CURRVALQ否则会出错。一ơNEXTVAL会增加一ơSEQUENCE的|所以如果你在同一个语句里面用多个NEXTVALQ其值就是不一L。明白?  <br /> <br /> - 如果指定CACHE|ORACLE可以预先在内存里面攄一些sequenceQ这样存取的快些。cache里面的取完后Qoracle自动再取一l到cache?nbsp;使用cache或许会蟩P 比如数据库突然不正常down掉(shutdown abort),cache中的sequence׃丢失. 所以可以在create sequence的时候用nocache防止q种情况?nbsp; <br /> <br /> 2、Alter Sequence  <br /> 你或者是该sequence的ownerQ或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果惌改变start|必须 drop  sequence ?nbsp;re-create .  <br /> Alter sequence 的例?nbsp; <br /> ALTER SEQUENCE emp_sequence  <br />     INCREMENT BY 10  <br />     MAXVALUE 10000  <br />     CYCLE    -- ?0000后从头开?nbsp; <br />     NOCACHE ;  <br /> <br /> <br /> 影响Sequence的初始化参数Q?nbsp; <br /> SEQUENCE_CACHE_ENTRIES =讄能同时被cache的sequence数目?nbsp;  <br /> <br /> 可以很简单的Drop Sequence  <br /> DROP SEQUENCE order_seq; <img src ="http://www.tkk7.com/rain1102/aggbug/251955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-01-19 21:35 <a href="http://www.tkk7.com/rain1102/archive/2009/01/19/251955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle触发器介l?/title><link>http://www.tkk7.com/rain1102/archive/2009/01/19/251954.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 19 Jan 2009 13:13:00 GMT</pubDate><guid>http://www.tkk7.com/rain1102/archive/2009/01/19/251954.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/251954.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2009/01/19/251954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/251954.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/251954.html</trackback:ping><description><![CDATA[一 触发器介l?br /> <br /> 触发器是一U特D的存储q程Q它在插入,删除或修改特定表中的数据时触发执行,它比数据库本w标准的功能有更_和更复杂的数据控制能力。数据库触发器有以下的作用:<br /> <br /> * 安全性。可以基于数据库的g用户h操作数据库的某种权利?br /> <br /> # 可以Z旉限制用户的操作,例如不允怸班后和节假日修改数据库数据?br /> <br /> # 可以Z数据库中的数据限制用L操作Q例如不允许股票的h格的升幅一ơ超q?0%?br /> <br /> * 审计。可以跟t用户对数据库的操作?br /> <br /> # 审计用户操作数据库的语句?br /> <br /> # 把用户对数据库的更新写入审计表?br /> <br /> * 实现复杂的数据完整性规则?br /> <br /> # 实现非标准的数据完整性检查和U束。触发器可生比规则更ؓ复杂的限制。与规则不同Q触发器可以引用列或数据库对象。例如,触发器可回退M企图吃进过自己保证金的期货?br /> <br /> # 提供可变的缺省倹{?br /> <br /> * 实现复杂的非标准的数据库相关完整性规则。触发器可以Ҏ据库中相关的表进行连环更新。例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行?br /> <br /> # 在修Ҏ删除时联修Ҏ删除其它表中的与之匹配的行?br /> <br /> # 在修Ҏ删除时把其它表中的与之匹配的行设成NULL倹{?br /> <br /> # 在修Ҏ删除时把其它表中的与之匹配的行联设成缺省倹{?br /> <br /> # 触发器能够拒l或回退那些破坏相关完整性的变化Q取消试图进行数据更新的事务。当插入一个与其主健不匚w的外部键Ӟq种触发器会起作用。例如,可以?books.author_code列上生成一个插入触发器Q如果新gauths.author_code列中的某g匚wӞ插入被回退?br /> <br /> * 同步实时地复制表中的数据?br /> <br /> * 自动计算数据|如果数据的DC一定的要求Q则q行特定的处理。例如,如果公司的帐号上的资金低?万元则立即给财务人员发送警告数据?br /> <br /> ORACLE与SYBASE数据库的触发器有一定的区别Q下面将分别讲述q两U数据库触发器的作用和写法?br /> <br /> ?ORACLE 触发?br /> <br /> ORACLE产生数据库触发器的语法ؓQ?br /> <br /> create [or replace] trigger 触发器名 触发旉 触发事g<br /> <br /> on 表名<br /> <br /> [for each row]<br /> <br /> pl/sql 语句<br /> <br /> 其中Q?br /> <br /> 触发器名Q触发器对象的名U。由于触发器是数据库自动执行的,因此该名U只是一个名Uͼ没有实质的用途?br /> <br /> 触发旉Q指明触发器何时执行Q该值可取:<br /> <br /> before---表示在数据库动作之前触发器执行;<br /> <br /> after---表示在数据库动作之后出发器执行?br /> <br /> 触发事gQ指明哪些数据库动作会触发此触发器:<br /> <br /> insertQ数据库插入会触发此触发器;<br /> <br /> updateQ数据库修改会触发此触发器;<br /> <br /> deleteQ数据库删除会触发此触发器?br /> <br /> ?名:数据库触发器所在的表?br /> <br /> for each rowQ对表的每一行触发器执行一ơ。如果没有这一选项Q则只对整个表执行一ơ?br /> <br /> 举例Q下面的触发器在更新表auths之前触发Q目的是不允许在周末修改表:<br /> <br /> create trigger auth_secure<br /> <br /> before insert or update or delete //Ҏ表更新前触发<br /> <br /> on auths<br /> <br /> begin<br /> <br /> if(to_char(sysdate,'DY')='SUN'<br /> <br /> RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');<br /> <br /> end if;<br /> <br /> end<br /> <br /> ?SYBASE数据库触发器<br /> <br /> SYBASE数据库触发器的作用与ORACLE非常cMQ仅有较的差异?br /> <br /> SYBASE产生触发器的语法为:<br /> <br /> CREATE TRIGGER 触发器名<br /> <br /> ON 表名<br /> <br /> FOR INSERTQUPDATEQDELETE<br /> <br /> AS<br /> <br /> SQL_statement |<br /> <br /> FOR INSERTQUPDATE<br /> <br /> AS<br /> <br /> IF UPDATE(column_name) [AND|OR UPDATE(column_name)]...<br /> <br /> SQL_statements<br /> <br /> 上面FOR子句用来指定在触发器上的哪些数据更新命o可激z该触发器。IF UPDATE子句查对指定列的操作cdQ在IF UPDATE子句中可指定多个列?br /> <br /> 与ORACLE不同Q对于每条SQL语句Q触发器只执行一ơ。触发器在数据更新语句完成以后立x行。触发器和启动它的语句被当作一个事务处理,事务可以在触发器中回退?br /> <br /> 下面举例说明SYBASE触发器的写法?br /> <br /> create trigger forinsert_books<br /> <br /> on books<br /> <br /> for insert<br /> <br /> as<br /> <br /> if(select count(*) from auths,inserted<br /> <br /> where auths.author_code=insert.author_code)!=@@rowcount<br /> <br /> begin<br /> <br /> rollback transaction<br /> <br /> print "books 表中 author_code 列的值在auths 表中不存在?<br /> <br /> end<br /><img src ="http://www.tkk7.com/rain1102/aggbug/251954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2009-01-19 21:13 <a href="http://www.tkk7.com/rain1102/archive/2009/01/19/251954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA完全控制Oracle中BLOB、CLOB说明 [转]http://www.tkk7.com/rain1102/archive/2009/01/15/251466.html周锐周锐Thu, 15 Jan 2009 08:51:00 GMThttp://www.tkk7.com/rain1102/archive/2009/01/15/251466.htmlhttp://www.tkk7.com/rain1102/comments/251466.htmlhttp://www.tkk7.com/rain1102/archive/2009/01/15/251466.html#Feedback1http://www.tkk7.com/rain1102/comments/commentRss/251466.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/251466.html 环境Q?br /> Database: Oracle 9i
App Server: BEA Weblogic 8.14
表结构:
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), BLOBATTR Blob)
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), CLOBATTR Clob)
Java 可以通过JDBCQ也可以通过JNDI讉Kq操作数据库Q这两种方式的具体操作存在着一些差异,׃通过App Server的数据库q接池JNDI获得的数据库q接提供的java.sql.Blob和java.sql.Clob实现cMJDBC方式提供的不同,因此在入库操作的时候需要分别对待;出库操作没有q种差异Q因此不用单独对待?br />
一、BLOB操作
1、入?br /> Q?QJDBC方式

//通过JDBC获得数据库连?br /> Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一个空对象empty_blob()
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
//锁定数据行进行更斎ͼ注意“for update”语句
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Blob对象后强制{换ؓoracle.sql.BLOB
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");
OutputStream outStream = blob.getBinaryOutputStream();
//data是传入的byte数组Q定义:byte[] data
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();



Q?QJNDI方式

//通过JNDI获得数据库连?br /> Context context = new InitialContext();
ds = (DataSource) context.lookup("ORA_JNDI");
Connection con = ds.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一个空对象empty_blob()
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
//锁定数据行进行更斎ͼ注意“for update”语句
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Blob对象后强制{换ؓweblogic.jdbc.vendor.oracle.OracleThinBlobQ不同的App Server对应的可能会不同Q?br /> weblogic.jdbc.vendor.oracle.OracleThinBlob blob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob("BLOBATTR");
OutputStream outStream = blob.getBinaryOutputStream();
//data是传入的byte数组Q定义:byte[] data
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();



2、出?br />
//获得数据库连?br /> Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需?#8220;for update”
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");
if (rs.next())
{
Java.sql.Blob blob = rs.getBlob("BLOBATTR");
InputStream inStream = blob.getBinaryStream();
//data是读出ƈ需要返回的数据Q类型是byte[]
data = new byte[input.available()];
inStream.read(data);
inStream.close();
}
inStream.close();
con.commit();
con.close();



二、CLOB操作
1、入?br /> Q?QJDBC方式

//通过JDBC获得数据库连?br /> Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一个空对象empty_clob()
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
//锁定数据行进行更斎ͼ注意“for update”语句
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob对象后强制{换ؓoracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是传入的字符Ԍ定义QString data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();



Q?QJNDI方式

//通过JNDI获得数据库连?br /> Context context = new InitialContext();
ds = (DataSource) context.lookup("ORA_JNDI");
Connection con = ds.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一个空对象empty_clob()
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
//锁定数据行进行更斎ͼ注意“for update”语句
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob对象后强制{换ؓweblogic.jdbc.vendor.oracle.OracleThinClobQ不同的App Server对应的可能会不同Q?br /> weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是传入的字符Ԍ定义QString data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();



2、出?br />
//获得数据库连?br /> Connection con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需?#8220;for update”
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
if (rs.next())
{
Java.sql.Clob clob = rs.getClob("CLOBATTR");
Reader inStream = clob.getCharacterStream();
char[] c = new char[(int) clob.length()];
inStream.read(c);
//data是读出ƈ需要返回的数据Q类型是String
data = new String(c);
inStream.close();
}
inStream.close();
con.commit();
con.close();



需要注意的地方Q?br /> 1、java.sql.Blob、oracle.sql.BLOB、weblogic.jdbc.vendor.oracle.OracleThinBlob几种cd的区?br /> 2、java.sql.Clob、oracle.sql.CLOB、weblogic.jdbc.vendor.oracle.OracleThinClob几种cd的区?br />


周锐 2009-01-15 16:51 发表评论
]]>
ORA-01659: 无法分配出 7 ?MINEXTENTShttp://www.tkk7.com/rain1102/archive/2009/01/14/251330.html周锐周锐Wed, 14 Jan 2009 10:16:00 GMThttp://www.tkk7.com/rain1102/archive/2009/01/14/251330.htmlhttp://www.tkk7.com/rain1102/comments/251330.htmlhttp://www.tkk7.com/rain1102/archive/2009/01/14/251330.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/251330.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/251330.htmlORA-01659: 无法分配出 7 ?MINEXTENTS (在表I间 PERFSTAT ?

主要原因是表I间不够,其讄动扩展即可?/p>

alter database datafile 'D:\oracle\product\10.2.0\oradata\oracle\perfstat.dbf' autoextend on;

或者可以在创徏perfstat表空间的时候进行设|:

create tablespace perfstat

datafile 'D:\oracle\product\10.2.0\oradata\oracle\perfstat.dbf' size 100m autoextend on

extend management local;


当然也可以从Oracle Enterprise Manager Console中设|:
存储Q》表I间Q》你的表I间名称Q》数据库文g
然后选择你的数据文gQƈ选择右面?#8220;存储”选项Q勾选数据文件满后自动扩展ƈ讄增量倹{?img src ="http://www.tkk7.com/rain1102/aggbug/251330.html" width = "1" height = "1" />

周锐 2009-01-14 18:16 发表评论
]]>
Windows下Oracle 10G Client安装 http://www.tkk7.com/rain1102/archive/2008/12/09/245275.html周锐周锐Tue, 09 Dec 2008 07:51:00 GMThttp://www.tkk7.com/rain1102/archive/2008/12/09/245275.htmlhttp://www.tkk7.com/rain1102/comments/245275.htmlhttp://www.tkk7.com/rain1102/archive/2008/12/09/245275.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/245275.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/245275.html      ?/span>Oracle官方|站http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html下蝲instantclient-basic-win32-10.2.0.3-20061115.zip (34,469,920 bytes)
2.      解压?/span>C:\oraclient目录?/span>,包括以下几个文g:
     classes12.jar
     ocijdbc10.dll
     ojdbc14.jar
     oraocci10.dll
     oci.dll
     ociw32.dll
     orannzsbb10.dll
     oraociei10.dll
3.      建立C:\oraclien\network\admin目录,?/span>C:\oraclien\network\admin目录下徏?/span>tnsnames.ora文g
4.      在环境参?/span>Path增加C:\oraclien;注意, C:\oraclien;一定要是在Path环境参数的最前面,如果不是,当应用程序连?/span>oracle时将报找不到oci.dll的错?/span>.
5.      安装完成
?/span>: 您也可以在以下\l下载完整版?/span>Oracle 10G Client 安装文g
http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip

周锐 2008-12-09 15:51 发表评论
]]>
SQL中Case的用方?下篇) (转蝲)http://www.tkk7.com/rain1102/archive/2008/09/24/230840.html周锐周锐Wed, 24 Sep 2008 03:29:00 GMThttp://www.tkk7.com/rain1102/archive/2008/09/24/230840.htmlhttp://www.tkk7.com/rain1102/comments/230840.htmlhttp://www.tkk7.com/rain1102/archive/2008/09/24/230840.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/230840.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/230840.html四,Ҏ条g有选择的UPDATE?/strong>

例,有如下更新条?
  1. 工资5000以上的职员,工资减少10%
  2. 工资?000?600之间的职员,工资增加15%
很容易考虑的是选择执行两次UPDATE语句Q如下所C?
--条g1
UPDATE Personnel
SET salary = salary * 0.9
WHERE salary >= 5000;
--条g2
UPDATE Personnel
SET salary = salary * 1.15
WHERE salary >= 2000 AND salary < 4600;

但是事情没有惌得那么简单,假设有个人工?000块。首先,按照条g1Q工资减?0%Q变成工?500。接下来q行W二个SQL时候,因ؓq个人的工资?500?000?600的范围之内, 需增加15%Q最后这个h的工资结果是5175,不但没有减少Q反而增加了。如果要是反q来执行Q那么工?600的h相反会变成减工资。暂且不这个规章是多么荒诞Q如果想要一个SQL 语句实现q个功能的话Q我们需要用到Case函数。代码如?
UPDATE Personnel
SET salary = CASE WHEN salary >= 5000
             THEN salary * 0.9
WHEN salary >= 2000 AND salary < 4600
THEN salary * 1.15
ELSE salary END;

q里要注意一点,最后一行的ELSE salary是必需的,要是没有q行Q不W合q两个条件的人的工资会被写成NUll,那可大事不妙了。在Case函数中Else部分的默认值是NULLQ这Ҏ需要注意的地方?
q种Ҏq可以在很多地方使用Q比如说变更主键q种累活?
一般情况下Q要x两条数据的Primary key,a和b交换Q需要经q时存储,拯Q读回数据的三个q程Q要是用Case函数的话Q一切都变得单多了?
p_key col_1 col_2
a 1 张三
b 2 李四
c 3 王五


假设有如上数据,需要把主键a?code>b怺交换。用Case函数来实现的话,代码如下
UPDATE SomeTable
SET p_key = CASE WHEN p_key = 'a'
THEN 'b'
WHEN p_key = 'b'
THEN 'a'
ELSE p_key END
WHERE p_key IN ('a', 'b');

同样的也可以交换两个Unique key。需要注意的是,如果有需要交换主键的情况发生Q多半是当初对这个表的设计进行得不够CQ徏议检查表的设计是否妥当?

五,两个表数据是否一致的查?/strong>

Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS{等。比如说使用IN,EXISTSQ可以进行子查询Q从?实现更多的功能?
下面具个例子来说明,有两个表Qtbl_A,tbl_BQ两个表中都有keyCol列。现在我们对两个表进行比较,tbl_A中的keyCol列的数据如果在tbl_B的keyCol列的数据中可以找刎ͼ q回l果'Matched',如果没有扑ֈQ返回结?Unmatched'?
要实C面这个功能,可以使用下面两条语句
--使用IN的时?/span>
SELECT keyCol,
CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;
--使用EXISTS的时?/span>
SELECT keyCol,
CASE WHEN EXISTS ( SELECT * FROM tbl_B
WHERE tbl_A.keyCol = tbl_B.keyCol )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;

使用IN和EXISTS的结果是相同的。也可以使用NOT IN和NOT EXISTSQ但是这个时候要注意NULL的情c?

六,在Case函数中用合计函?/strong>

假设有下面一个表
学号(std_id) 评ID(class_id) 评?class_name) MflagQmain_class_flg)
100 1 l济?/td> Y
100 2 历史?/td> N
200 2 历史?/td> N
200 3 考古?/td> Y
200 4 计算?/td> N
300 4 计算?/td> N
400 5 化学 N
500 6 数学 N

有的学生选择了同时修几门评(100,200)也有的学生只选择了一门课E?300,400,500)。选修多门评的学生,要选择一门课E作Z修,Mflag里面写入 Y。只选择一门课E的学生Q主修flag为N(实际上要是写入Y的话Q就没有下面的麻烦事了,Z举例子,q请多多包含)?
现在我们要按照下面两个条件对q个表进行查?
  1. 只选修一门课E的人,q回那门评的ID
  2. 选修多门评的hQ返回所选的主课EID

单的x是Q执行两条不同的SQL语句q行查询?
条g1
--条g1Q只选择了一门课E的学生
SELECT std_id, MAX(class_id) AS main_class
FROM Studentclass
GROUP BY std_id
HAVING COUNT(*) = 1;

执行l果1
STD_ID   MAIN_class
------   ----------
300      4
400      5
500      6

条g2
--条g2Q选择多门评的学?/span>
SELECT std_id, class_id AS main_class
FROM Studentclass
WHERE main_class_flg = 'Y' ;

执行l果2
STD_ID  MAIN_class
------  ----------
100     1
200     3

如果使用Case函数Q我们只要一条SQL语句可以解决问题,具体如下所C?
SELECT  std_id,
CASE WHEN COUNT(*) = 1  --只选择一门课E的学生的情?/span>
THEN MAX(class_id)
ELSE MAX(CASE WHEN main_class_flg = 'Y'
THEN class_id
ELSE NULL END
)
END AS main_class
FROM Studentclass
GROUP BY std_id;

q行l果
STD_ID   MAIN_class
------   ----------
100      1
200      3
300      4
400      5
500      6

通过在Case函数中嵌套Case函数Q在合计函数中用Case函数{方法,我们可以L的解册个问题。用Case函数l我们带来了更大的自由度?
最后提醒一下用Case函数的新手注意不要犯下面的错?
CASE col_1
WHEN 1        THEN 'Right'
WHEN NULL  THEN 'Wrong'
END

在这个语句中When Nullq一行Lq回unknownQ所以永q不会出现Wrong的情c因句可以替换成WHEN col_1 = NULLQ这是一个错误的用法Q这个时候我们应该选择用WHEN col_1 IS NULL?img src ="http://www.tkk7.com/rain1102/aggbug/230840.html" width = "1" height = "1" />

周锐 2008-09-24 11:29 发表评论
]]>
վ֩ģ壺 ҹҹƵѿ| Ļ߹ۿ| 99ƵƷȫѹۿ| ˳ӰԺۿ| ޾Ʒavˮ| ߾ƷƵѹۿ | 18վ| þþþþAv뾫Ʒר| ²߾ƷƵѹۿ| ҹľƷ| һ˿wwwƵ߹ۿ| ִӲˬƵ| ˳ɴƬ߹ۿŵӰ| һɫþ88ۺ | è˳վ| ޾Ʒ˳ëƬ| ձһƵۿ | 99ƵѾƷǿ6| С˵ɫͼ| AV˾Ʒ| ߹ۿ| A޾VƷɫ| aëƬѹۿ| ޾ѡ߹ۿ| ߹ۿƵ| ޾Һ| ƷĻ߹ۿ | aëƬƵѹۿ| ҹӰձŷ޾Ʒһ | avƷר߹ۿ| ëƬѹۿƵ| ɫƵ| þ޹ҹƷƬ| ûɫվ| avһ߲ | sssۺþþþ| Ʒһ߹ۿ| ˾ƷƵȫ| ۺ˵ɫ| ѹۿavëƬվ| պƷר|