ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根據COL1分組,在分組內部根據 COL2排序 而這個值就表示每組內部排序後的順序編號(組內連續的唯一的) RANK() 類似,不過RANK 排序的時候跟派名次一樣,可以並列2個第一名之後 是第3名 LAG 表示 分組排序後 ,組內後面一條記錄減前面一條記錄的差,第一條可返回 NULL BTW: EXPERT ONE ON ONE 上講的最詳細,還有很多相關特性,文檔看起來比較費勁
IN主要用於傳入參數,可以是變數,常量,運算式,在子程式內部不能改變其值. 複製代碼 代碼如下: DECLARE n NUMBER := 10; PROCEDURE do_something ( n1 IN NUMBER) IS BEGIN dbms_output.put_line(n1); -- prints 10 --n1:=20; --illegal assignment. END; BEGIN do_something(n); do_something(20); END;
為了把事情變成簡單化,我在多個Oracle資料上建立統一的檢查資料庫賬戶,並且賬戶只能訪問特定的幾個視圖(需要查詢的sql已產生視圖),具體做法如下: root>sqlplus / as sysdba 用DBA的許可權進入資料庫,需要建立一個賬戶 http://www.jb51.net/article/20367.htm SQL>create user dbmonitor identified by "ty_sd_s"; 給賬戶授權 SQL>grant
1 The syntax of the SQL statement is verified. SQL的語法檢查 2 The data dictionary is searched to verify table and column definitions. 從資料字典檢查表名和欄位名 3 The data dictionary is searched to verify security privileges on relevant objects. 從資料字典中檢查許可權 4 Parse
第一種情況是返回的遊標是某個具體的表或視圖的資料,如: SQL-Code: 複製代碼 代碼如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA; 其中USERS就是資料庫中一個表。在調用的時候只要聲明一個該表的ROWTYPE類型就可以了: SQL-Code: 複製代碼 代碼如下:
NOMONEYDAY123114321-45324212-102250331008為了符合閱讀習慣,最終報表希望是如下格式:NOMONTUETHR12343-45242-10503 ------------------------咱們一步步來實現:1.運用DECODE轉換行為列SQL:SELECT NO, DECODE(DAY,1,MONEY,'') DAY1,