---
# System prepended metadata

title: Oracle 雜記
tags: [oracle]

---

###### tags: `oracle`
# Oracle 雜記
最近更新日期20201101

取出表單最大值+1
```sql=
(SELECT NVL(MAX(UNIQUEID),0)+1 FROM TABLENAME)
```

INSERT 語法:
```sql=
INSERT INTO TABLENAME (CLNNUM1,CLNTXT2) VALUES (11,'TEXT')

/* 複製另外資料庫的相同架構資料表*/
INSERT INTO TABLENAME VALUE (SELECT* FROM TABLENAME@DB2 WHERE 1=1)
```

SELECT語法(列出部分欄位及全部爛位，列出前N筆資料)
```sql=
SELECT T1.NAME,T1.* FROM TABLENAME T1

--列出前N筆資料，並排序
SELECT ROWNUM, t.* FROM (
    SELECT * FROM table_name ORDER BY column_name
) t WHERE ROWNUM < 10; 
```


DELETE 資料、TRUNCATE、DROP語法
```sql=
DELETE FROM TABLENAME     /*刪除資料表內所有資料(慎用)*/
TRUNCATE TABLE TABLENAME  /* 截斷資料表 */ 
DROP TABLE TABLENAME      /* 刪除資料表 */
```

CASE語法：
```sql=
SELECT T.ACCOUNTID, T.ATD_PW, T.ATD_TYPE, 
CASE 
  WHEN TO_CHAR(T.ATD_TIME,'HH24MI')>='2259' AND ATD_TYPE='B' 
       THEN TO_DATE((TO_CHAR(T.ATD_TIME,'YYYYMMDD')||' 22:59:00'),'YYYYMMDD HH24:MI:SS')
  WHEN XXXX THEN XXX
  ELSE T.ATD_TIME
END AS ATD_TIME 
FROM FLOW.HR_ATD T 
WHERE UNIQUEID =123
```

EXISTS用法:
```sql=
SELECT * FROM T1 WHERE EXISTS (SELECT NULL FROM T2 WHERE T2.Y=T1.X)
```

取字串語法:
SUBSTR(DEPT_ID,2,1) 從該欄位的第二個字元開始，取出1個字元
```sql=
SELECT ACCOUNT_ID,DEPT_ID,SUBSTR(DEPT_ID,2,1) AS SITE FROM MEMBERS
```

**比對相同資料表語法** 20201101
```sql=
--MINUS，去掉上方與下方相同資料後印出結果，如下：
/* 經測試B有的，A沒有的資料，不會列出。只會列出A有的與B不同的資料
   若要列出B有的，A沒有的，要用下方UNION方式
*/
SELECT COLUMN1,COLUMN2
FROM TABLE_A
MINUS
SELECT COLUMN1,COLUMN2
FROM TABLE_B

--將兩個資料表，只要有差異就列出來，那可以再加入一個語法UNION
SELECT 'A' SOURCE,COLUMN1,COLUMN2
FROM TABLE_A
MINUS
SELECT 'A' SOURCE,COLUMN1,COLUMN2
FROM TABLE_B
UNION
SELECT 'B' SOURCE,COLUMN1,COLUMN2
FROM TABLE_B
MINUS
SELECT 'B' SOURCE,COLUMN1,COLUMN2
FROM TABLE_A
```

參考:[Oracle MINUS比較兩個資料表的資料](https://mika.i234.me/wordpress/2020/04/26/oracle-minus%E6%AF%94%E8%BC%83%E5%85%A9%E5%80%8B%E8%B3%87%E6%96%99%E8%A1%A8%E7%9A%84%E8%B3%87%E6%96%99/)

**查詢 oracle server端使用的字碼**
```sql=
select userenv('language') from dual; 
```

#### 監聽器的啟動和關閉
查狀態:lsnrctl status 啟動:lsnrctl start 停止：lsnrctl stop 重新啟動：lsnrctl reload

S20200528 By YTC
M20200908 
M20201101 加入minus比較兩個資料表的資料