Schema

Oracle的資料庫觀念,與MySql,MSSQL並大一樣,,在連入(不管透過工具或jdbc driver),都必需使用特定的user name連到特定的Schema 在查詢時,也需指明確的指出查那一個shema

在oracle中,有部份constrain匯入後,有異常,例如說: function_log這個table中的 constrain,匯入後是

function_log.logId → user_info.userId

但應該下面的才是正確的

function_log.userId→ user_info.userId

Auto Increment

oracle中沒有自動增值(每次insert後,自動產生+1的值給Primary Key使用),但還是可以透過sequence達到類似的功能, 惟sequence是須在insert時自行加入Insert Statement中,而不是Database自動幫我們設定到PK中

這裡有相關的說明

Example: 建立給user info用的sequence

CREATE SEQUENCE userinfo_sequence 
    INCREMENT BY 1   
    START WITH 1     
    NOMAXVALUE       
    NOCYCLE          
    CACHE 10;  

INSERT INTO SCOTT.USER_INFO (USERID,USERNAME) VALUES(userinfo_sequence.NEXTVAL,'kent')

測試是否有Sequence存取權限

該使用者要有存取daul table的權限。daul table是記錄SEQUENCE的table. 可以透過些語法測試是否有存取daul table的權限

select USERINFO_SEQUENCE.NEXTVAL from DUAL

所出所有Sequences

查詢所有SEQUENCE的語法(需要DBA權限)

SELECT * FROM dba_sequences

Driver

oracle有提供type 4的jdbc driver (ojdbc or odbc),每一個資料庫版本適用的driver不太一樣,常見的有這幾種

jar name For Oracle 說明 ————– ———— ——————————— oracle12.jar ALL for jdk 1.2 oracle14.jar ALL for jdk 1.4 oracle5.jar 11g for jdk 1.5, 我們主要用的driver oracle6 .jar 11g for jdk 1.6

DataType

Oracle與SQL Server的資料型別上有些差異,我們有用到的部份,表列如下:

Null與空字串

Oracle會把空字串(empty string, length=0)當作是null

SQL syntax

TBD

Commands

desc

顯示table的描述

#語法
desc table_name
#範例
desc my_table

list all tables in current schema
SELECT table_name FROM user_tables;

list all tables current user
SELECT table_name FROM all_tables;
 
SELECT table_name FROM user_tables where owner='SYS';

Oracle的字串是區分會小寫,where owner=’SYS’ 跟where owner=’sys’查到的結果是不一樣的

list all schemas
SELECT username FROM all_users ORDER BY username;

top n records
SELECT * FROM table_name where rownum < n;