###### 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比較兩個資料表的資料