﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Java Fly-文章分类-Oracle命题 </title><link>http://www.blogjava.net/geyinglong/category/10412.html</link><description>Java&amp;Oracle</description><language>zh-cn</language><lastBuildDate>Mon, 07 Jan 2008 02:31:35 GMT</lastBuildDate><pubDate>Mon, 07 Jan 2008 02:31:35 GMT</pubDate><ttl>60</ttl><item><title>Oracle数据库同步探讨</title><link>http://www.blogjava.net/geyinglong/articles/173130.html</link><dc:creator>Java Fly</dc:creator><author>Java Fly</author><pubDate>Sun, 06 Jan 2008 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/geyinglong/articles/173130.html</guid><wfw:comment>http://www.blogjava.net/geyinglong/comments/173130.html</wfw:comment><comments>http://www.blogjava.net/geyinglong/articles/173130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/geyinglong/comments/commentRss/173130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/geyinglong/services/trackbacks/173130.html</trackback:ping><description><![CDATA[<div class="postbody">方法一：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>需求：</strong><br />
现有两台oracle数据库服务器A和B(A,B可以是在同一内网，也可以是在互联网上的两台独立机器)。A和B里有都有testable表，结构一样，现需要当A库中的testable表变化时，B库里的testable也相应变化数据
<p><strong>我的解决方案：</strong><br />
在A中建立到B库的链接，然后对要同步的表做一个同义synonym，最后建一个触发器，就可以完成了。当然，你所用的当前的用户要有相应的权限去执行这些操作。</p>
<p>当从A向B同步数据时，应该在A上做所有的设置:<br />
1,为保证连接到另一台远程服务器的数据库，你需要建立一个DB Link，但是，这里要注意语法格式，using +"connect string"，这个connect string应该是存在于oracle服务器的TNSNAMES.ORA文件里，监听程序将从这里获取远方服务器<br />
的ip地址等信息,我定义了一个'251'的connect string如下:<br />
<table cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td bgcolor="#e1f1ff">251 =<br />
            (DESCRIPTION =<br />
            (ADDRESS_LIST =<br />
            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.251)(PORT = 1521))<br />
            )<br />
            (CONNECT_DATA =<br />
            (SERVICE_NAME = mychoice)<br />
            )<br />
            )<br />
            </td>
        </tr>
    </tbody>
</table>
把它存到你的TNSNAMES.ORA文件里。</p>
<p>2,然后就可以定义DB Link了：<br />
<table cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td bgcolor="#e1f1ff">create public database link TEST2.US.ORACLE.COM<br />
            connect to 用户名<br />
            identified by "密码"<br />
            using '251';<br />
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>3,建立synonym(同义)</p>
<table cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td bgcolor="#e1f1ff">
            <p>create or replace synonym TEST01<br />
            for MYCHOICE.TESTABLE@TEST2.US.ORACLE.COM;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>建立完了以后，你可以通过:<br />
select * from test01 <br />
上面的语句相当于在B服务器上执行：<br />
select * from testable　</p>
<p>４，封建触发器：<br />
当A中的testable表变化时（这里只考虑插入操作），就会触发向远程的B库的testable也插入相应的数据：<br />
<table cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td bgcolor="#e1f1ff">create or replace trigger rtest<br />
            after insert on testable<br />
            for each row<br />
            begin&nbsp;
            <p>insert into test01 (something) values (:new.something);<br />
            end;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>ok,现在我们可以测试一下，你在Ａ库中往testable表中插入一条记录，看看Ｂ库中是不是也相应的增加了<br />
<br />
方法二：</p>
</div>
<img src ="http://www.blogjava.net/geyinglong/aggbug/173130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/geyinglong/" target="_blank">Java Fly</a> 2008-01-06 15:14 <a href="http://www.blogjava.net/geyinglong/articles/173130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oralce 分页</title><link>http://www.blogjava.net/geyinglong/articles/67558.html</link><dc:creator>Java Fly</dc:creator><author>Java Fly</author><pubDate>Mon, 04 Sep 2006 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/geyinglong/articles/67558.html</guid><wfw:comment>http://www.blogjava.net/geyinglong/comments/67558.html</wfw:comment><comments>http://www.blogjava.net/geyinglong/articles/67558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/geyinglong/comments/commentRss/67558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/geyinglong/services/trackbacks/67558.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td valign="top">
								</td>
						</tr>
						<tr>
								<td class="details" valign="top" align="right"> </td>
						</tr>
						<tr>
								<td class="artbody" valign="top">          在oracle数据库中查询结果的行号使用伪列ROWNUM表示（从1开始）。例如select * from employee where rownum&lt;10 返回前10条记录。但因为rownum是在查询之后排序之前赋值的，所以查询employee按birthday排序的第100到120条记录应该这么写：<br /><pre>        select * from (<br />            select my_table.*, rownum as my_rownum from (<br />                select name, birthday from employee order by birthday<br />            ) my_table where rownum &lt;120<br />        ) where my_rownum&gt;=100</pre><pre>//记算总页数 <br />intPageCount = (intRowCount+intPageSize-1) / intPageSize; <br /></pre></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/geyinglong/aggbug/67558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/geyinglong/" target="_blank">Java Fly</a> 2006-09-04 12:47 <a href="http://www.blogjava.net/geyinglong/articles/67558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>6位数的数字第一位是年份后面5位是递增数字从00001开始</title><link>http://www.blogjava.net/geyinglong/articles/42648.html</link><dc:creator>Java Fly</dc:creator><author>Java Fly</author><pubDate>Sun, 23 Apr 2006 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/geyinglong/articles/42648.html</guid><wfw:comment>http://www.blogjava.net/geyinglong/comments/42648.html</wfw:comment><comments>http://www.blogjava.net/geyinglong/articles/42648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/geyinglong/comments/commentRss/42648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/geyinglong/services/trackbacks/42648.html</trackback:ping><description><![CDATA[
		<font face="Verdana">要实现生成一个6位数的数字第一位是年份后面5位是递增数字从00001开始，怎么办？如今年是03年，生成第一个为300001,第二个为30002....<br /><p><font face="verdana, arial, helvetica" size="2"><span class="javascript" id="text750892" style="FONT-SIZE: 12px">先创sequence:<br />create sequence seq_ticket_code increment by 1 start with 100001 maxvalue 99999999 cycle;<br />再创函数:<br />create or replace function sf_GetTicketCode return number<br />is<br />ticket_code number(10);<br />--ticket_seq number(10);<br />--ticket_year number(1);<br />begin<br />select to_number(to_char(sysdate,'y'))||substr(to_char(seq_ticket_code.nextval),2,5)<br />into ticket_code from dual;<br />return ticket_code;<br />exception<br />when others then<br />return null;<br />end;<br /><br />////<br />SQL&gt; select sf_GetTicketCode from dual;<br /><br />SF_GETTICKETCODE<br />----------------<br />300010</span></font></p></font>
<img src ="http://www.blogjava.net/geyinglong/aggbug/42648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/geyinglong/" target="_blank">Java Fly</a> 2006-04-23 13:30 <a href="http://www.blogjava.net/geyinglong/articles/42648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>