Oracle
vnsoft
從2001年開始PB Oracle程式開發,
在公司主要負責PB技術研發以及程式開發框架的建立.
后學習Oracle管理,了解有關DBA作業內容.
喜歡IT新技術,對腳本語言有一定的了解,
目前专职于Odoo项目实施、开发。
展开
-
DBMS_REPAIR包修复损坏数据块
source:http://oracle.chinaitlab.com/1 、DBMS_REPAIR包的使用 Oracle提供的DBMS_REPAIR包可以发现、标识并修改数据文件中的坏块。 DBMS_REPAIR包的工作原理比较简单——将检查到的坏块标注出来,使随后的dml操作跳过该块。同时,DBMS_REPAIR包还提供了几个过程,可以用来保存索引的键值(这些键值指向被标注为坏块的转载 2006-12-29 00:24:00 · 1448 阅读 · 0 评论 -
程式開發質量檢查(十)
<br />在一個查詢語法的條件式中,碰到如下條件:<br />DECODE(sign(FAMT - INV_AMT) ,-1, FAMT, INV_AMT)<br />這是兩個金額欄位,取其中最小的一個值.<br /> <br />開發人員之前用過的MAX(),MIN()函數是用在一個查詢集合中,<br />在幾個單獨的數值之間不能使用.<br /> <br />其實Oracle有提供另外兩個函數來取最大值和最小值.<br />LEAST(value1,value2,value3,....) 取多個值中原创 2010-08-19 13:26:00 · 111 阅读 · 0 评论 -
利用Oracle 10G的正則表達式分析字串
<br />最近在思考一個項目時,需要對一個字符串進行分析,其中要取得字符串的所有中文字內容,利用PB還真不好實現,首先想到了Oracle 10G新增的正<br /> 則表達式功能,經測試正是我所需要的.<br /> select REGEXP_substr('(00A)10mm POLY WEBBING(NYHT05-090)中間+3mm (00A)破折號<br /> 線條','[^[:punct:][:digit:][:upper:][:lower:][:space:]]+'),原创 2010-09-20 13:07:00 · 812 阅读 · 0 评论 -
深入了解 Oracle 10g 中新型层次查询选项
<br />开发者在线 Builder.com.cn 更新时间:2005-08-09作者:Scott Stephens 来源:<br />我们可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的 层次查询,而Oracle 10g 为其添加许<br /> 多了新的伪列。十多年以来,Oracle SQL 具有依照层次关系进行查询的功能。例如,你可以指定一个起始条件,然后根据一个或多个连接条件来确定<br /> 孩子行的内容。举例来说,现在假设我有一个表,里转载 2010-09-20 13:11:00 · 779 阅读 · 0 评论 -
如何使用Oracle的COALESCE函数
<br />数据库应用软件很多时候将多重的、相关的实体信息保存在同一个表格中。例如,购买的零件和本地生产的零件都是零件,经理和工人都是员工,尽管多重的实体<br /> 类型在数据存储上略有不同,但是它们有太多的相同之处,因此通常使用一个表格而不是两个。<br />处理这样的表格通常意味着对每一行进行条件测试来检查哪个实体类型正在被处理,然后返回每种类型的不同结果集。CASE语句可以用来完成这一工作。<br />从Oracle 9i版开始,COALESCE函数在很多情况下就成为替代CASE语句的一条捷转载 2010-09-20 13:16:00 · 5817 阅读 · 2 评论 -
關於Oracle中的nvl另類使用
<br />在編寫Oracle后端程式時,經常會用到nvl函數,用來轉換那些為null的變量或欄位.<br />一般的使用方法為:<br /> <br />v_name := nvl(v_name,'N/A');<br /> <br />同時,我們經常也會使用如下的語法結構來查詢資料.<br /> <br />Begin<br /> select name into v_name from tab_name where ...<br />Exception<br /> when No_data_fo原创 2010-09-28 10:39:00 · 852 阅读 · 0 评论 -
Oracle UTL_MATCH
<br />最近在處理一些字串判斷時,無意中查到一個utl_match的package,這是Orace 10g 增加的一個包,但沒有相關的文檔說明.在這個包里有四個函數,其中兩個是我們可能會用到的.<br /><br /><br />edit_distance這個函數是判斷兩個字串中有差異的字串個數.<br />edit_distance_similarity這個函數是比較兩個字串中的相似度.<br /><br /><br />可能在有些地方,這兩個函數對我們統計資料時有些作用.<br />原创 2010-11-03 15:06:00 · 5352 阅读 · 0 评论 -
ORA-06531錯誤問題
今天在應用系統的Procedure中有用到Oracle的Table類型變量,開始定義為:TYPE ErrList IS TABLE OF errorm.text%TYPE;在執行時出現 ORA-06531: Reference to uninitialized collection 錯誤信息.后來有查詢相關資料,如上面的方式定義時,需要使用extend方法來進行擴展.如果改為 TY原创 2012-05-29 16:59:22 · 2974 阅读 · 0 评论 -
在Hibernate中通過Oracle Function取得單據號碼
今天在使用Hibernate開發項目時,遇到一個Oracle Function的問題.在項目開發中,所有單據的號碼產生都是通過一個Function來產生.在這個Function中有一些DML語法,所以不能使用select fun_...() Into v_ref from dual的方法來取得返回結果.經查詢相關資料,Hibernate要求在執行Procedure和Function時都要返原创 2012-06-07 15:42:53 · 1044 阅读 · 0 评论 -
在Oracle Table中限制只有一筆資料的情況
在系統設計時,有一些參數的部分會使用Table來記錄,但有時候因為參數只需要有一筆資料,所以要限制Table中的資料筆數只能為一筆,有一個比較好的方法是在該table上建立一個唯一索引,索引的欄位不用放table的欄位,可以用一個固定的常量,這樣資料新增超過一筆就會提示違反唯一索引.如:create table a(no char(4));create unique index i原创 2012-07-04 17:08:56 · 1641 阅读 · 0 评论 -
程式開發質量檢查(九)
<br />在我們的系統中,有關年月的字段都是使用字符格式來存放在Oracle資料庫中.<br />如:'201006'.<br />但對於此字段提示給用戶看時,需要轉換為其它格式,如:'2010年06月'.<br /> <br />這樣我們平時開發人員比較常用的就是:<br />v_ym := '201006';<br /> <br />v_msg := substr(v_ym,1,4)||'年'||substr(v_ym,5,2)||'月';<br /> <br />這樣感覺比較複雜,如果要精確到日,則原创 2010-08-18 14:31:00 · 528 阅读 · 0 评论 -
程式開發質量檢查(八)
<br />在一個Oracle后端程式中看到如下條件判斷:<br /> <!-- @page { margin: 2cm } --><br /> <br /> <br />TO_DATE(SUBSTR(chg_date,1,8),'YYYYMMDD')+40 >= TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD')<br /> <br /> <!-- @page { margin: 2cm } --><br />這個應該是判斷一原创 2010-08-18 13:06:00 · 522 阅读 · 0 评论 -
程式開發質量檢查(三)
<br /> <!-- @page { margin: 2cm } --><br />在公司開發人員的源碼中,經常可以碰到如下的一些判斷條件式處理方法:<br /> <br />IFnvl(rtrim(v_Comp_no),' ') = ' ' AND nvl(rtrim(v_Comp_no1),' ') = ' 'THEN <br /> SELECT 公司代號 INTO v_Comp_noFROM TABLE_NAME WHERE 廠別代號= v_Fact_no原创 2010-08-12 08:25:00 · 629 阅读 · 0 评论 -
Oracle时间信息特性(转)
在监控、诊断、处理数据库性能问题的时候,时间信息往往是非常重要的判断依据。有时候可能我们会使用一些比例来判断性能,但是使用比例而不使用时间往往会将我们带向错误的方向。在Oracle9i的第一版中关于时间的信息被进行了增强,提供了更多更有益的时间信息。除了9i的外貌发生了变化,在一些并没有被我们注意或者不为人知得一些v$视图的相关字段也发生了变化。这里提到的主要是他们发生了那些改变以及对DBA转载 2006-12-30 15:02:00 · 986 阅读 · 0 评论 -
Oracle归档模式的命令及参数说明
Oracle数据库可以运行在2种模式下:归档模式(archivelog)和非归档模式(noarchivelog)。归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模式没有相应的备份策略只会带来麻烦。 检查归档模式命令:转载 2006-12-30 15:50:00 · 1081 阅读 · 0 评论 -
ORACLE诊断事件
Oracle为RDBMS提供了多种的诊断工具,诊断事件(Event)是其中一种常用、好用的方法,它使DBA可以方便的转储数据库各种结构及跟踪特定事件的发生. 一、Event的通常格式及分类 1、 通常格式如下: EVENT="" 2、 Event分类 诊断事件大体上可以分为四类: a. 转储类事件:它们主要用于转储Oracle的一些结构,例如转储一下控制文件、数据文件头等内容。转载 2006-12-30 14:58:00 · 842 阅读 · 0 评论 -
Oracle安装相关Linux参数(转)
和Oracle安装有关的Linux参数 设置的参数转载 2006-12-30 15:06:00 · 1119 阅读 · 0 评论 -
DBA需要知道的Oracle 10g的审计内容
Oracle 数据库 10g 审计以一种非常详细的级别捕获用户行为,它可以消除手动的、基于触发器的审计。假定用户 Joe 具有更新那张表的权限,并按如下所示的方式更新了表中的一行数据。 update SCOTT.EMP set salary = 12000 where emp转载 2006-12-30 15:13:00 · 1136 阅读 · 0 评论 -
Oracle 10g特性之虚拟专用数据库
五种类型的策略、列相关策略以及列屏蔽使得 VPD 成为 DBA 的安全工具箱中一种功能更加强大的工具。 虚拟专用数据库 (VPD) 也称为细粒度访问控制,它提供强大的行级安全功能。它是在 Oracle8i 中推出的,已经受到广泛的欢迎,并且在从教育软件到金融服务等各种应用程序得到采用。VPD 的工作方法是,通过透明地更改对数据的请求,基于一系列定义的标准向用户提供表的局部视图。在运行转载 2006-12-30 15:44:00 · 658 阅读 · 0 评论 -
程式開發質量檢查(一)
好久沒有在這里寫博客了.主要是生活比較平淡,需要記憶的東西比較少了.當然為了不浪費這里的空間,還是希望能留一點什麼東西.從這篇文章開始,將推出一個系列,主要是在公司開發過程中,對於一些問題的處理方式及思維,將提出個人的不同看法,以此為記,也讓有幸看到的同業人員可以多一份參考.本人所在公司是以 pb+Oracle 作業模式開發,所以系列文章都將以此為背景.今天的評論的是一個sql語法的Where條件.如: ((p_acct_d.acc_noLIKE '63%' AND :as_comp_no 'D原创 2010-08-11 10:11:00 · 573 阅读 · 0 评论 -
程式開發質量檢查(二)
<br />在公司開發的財務系統中,有一些是切立會計分錄的程式.<br />學過會計的同行就知道會計分綠會有借貸方之分.<br /> <br />如看到有同事這樣進行判斷<br /> <br />if amt > 0 then<br /> v_dc :='D'; --借方<br />else<br /> v_dc :='C'; --貸方<br />end if;<br /> <br />其中金額(amt)不會有0的情況,<br /> <br />上面的判斷其實可以簡化為如下:<br />v_dc :原创 2010-08-11 11:27:00 · 515 阅读 · 0 评论 -
把一個字串變成多筆資料
在我們實際的程式開發中,經常會有查詢某個欄位值在同個選項中是否存在的情況.如:instr(',張三,李四,王五,老六,',name)>0這樣字符太長可能也會影響性能.實際上我們也可以將這個字串變成一個虛擬表,然后再將事實資料表與虛擬表關聯即可.如:select replace(regexp_substr('張三,李四,王五,老六,','.*?,',1,level),',') from dualconnect by level如果結合Oracle 9i以上支持的with語法,進行資料預處理,可能會更佳.w原创 2010-08-11 16:40:00 · 1216 阅读 · 0 评论 -
Oracle PL/SQL中取得當前程式名稱
在實際應用的Oracle后端程式中,有些模塊可能會經常需要在不同地方調用.當需要識別調用的位置來作不同區分時,得到當前程式的名稱就很重要了. 雖然說我們在寫存儲過程的時候肯定會知道過程名稱,但這樣就只能使用HARDCODE,為了統一程式書寫規範,減少HARDCODE的使用,我寫了一個函數用來取得調用位置的存儲過程名稱. createor replacefunc原创 2010-08-12 13:26:00 · 161 阅读 · 0 评论