Oracle服務啟動-索引-子查詢-分頁儲存過程問題

lanyu發表於2021-09-09

今天,把 秋色園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 版本分頁儲存過程。

 

6:修改欄位順序

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

 

select object_id from all_objects where  object_name='BLOG_COMMENT'
--查表IDselect 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 新的數字;

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2800990/,如需轉載,請註明出處,否則將追究法律責任。

相關文章