Oracle問題小記五:服務啟動-索引-子查詢-分頁預存程序

來源:互聯網
上載者:User

今天,把 秋色園QBlog 的資料導到Oracle中運行,重拾Oracle,過程的主要問題記錄下:

 

1:服務啟動問題

這個問題發生多次了,那個毛網管沒事又讓人改計算名稱,Oracle久沒開了也沒在意,Oracle服務啟動總失敗,折騰後才發現,於是把電腦名稱改回去,重啟電腦,再啟用服務,正常。

 

2:索引問題

資料導到Oracle後,發現一些簡單的查詢變的相當的慢如:

select id,username,title from blog_content where userid=111 order by id desc

後來經網頁點拔,給title加上索引就快了:“select中的放在包含索引(oracle中稱覆蓋索引)”
後來其它查詢慢的,全給加索引,速度才上去,看來搞Oracle不搞索引,是沒法玩的。

 

3:子查詢語句問題

正常代碼:

SELECT count(*) as UserCount,
(SELECT count(*)  FROM Blog_Content WHERE TypeID=0) as ArticleCount
FROM Blog_User

此語句在Access、Mssql、Sqlite、Mysql下皆正常,唯獨 Oracle不成,加個函數解決如下:

SELECT count(*) as UserCount,
min((SELECT count(*)  FROM Blog_Content WHERE TypeID=0)) as ArticleCount

FROM Blog_User

 

4:預存程序調用問題

問題:

預存程序的參數varchar2,如果代碼中參數為空白,會報異常:ORA-01084: invalid argument in OCI call view

如果在PL/SQL中執行,而不會錯。

解決方案是為空白時,傳遞DBNull.Value。

 

5:完善 CYQ.Data for Oracle 版本分頁預存程序。

直接修改了文章:折騰Oracle問題小菜記[分頁預存程序/查詢所有表、視圖、預存程序/查詢表、視圖、預存程序欄位結構與參數](三)

 

6:修改欄位順序

增加列,又不想放在最後面,拉不上去,只好寫代碼更改順序號。

 

select object_id from all_objects where  object_name='BLOG_COMMENT'--查表ID
select COL#,name from sys.col$ where obj#=49244--看一下欄位順序序號

update sys.col$ set COL#=8 where obj#=49244 and name='CREATETIME'--把序號更新了

 

7:更新序列初始值

資料庫共用一個序列為自增ID,導完資料後序列值沒變,需要調整值。

ALTER SEQUENCE 序列名稱 Increment By 新的數字;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.