發表文章

目前顯示的是 10月, 2013的文章

ORACLE建立Database Link

本機資料庫資訊(schema: ABC, user: ABC, password: ABC) 0. 登入 oracle 帳號 1. 在 tnsnames.ora 檔案中, 加入要連線的遠端資料庫資料 REMOTE_DB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ora1) ) ) 2. 重新啟動資料庫(讓第1步驟設定生效) ** 實測結果有時好像不用重啟就可以生效 sqlplus '/as sysdba' SQL> shutdown immediate SQL> startup 3. 檢查user是否有建立 Database Link 的權限 SQL> select grantee, privilege from dba_sys_privs where grantee='ABC'; GRANTEE PRIVILEGE ------------------------------ ---------------------------------------- ABC CREATE TABLE ABC CREATE SESSION ABC CREATE SYNONYM ABC UNLIMITED TABLESPACE 4. 新增user建立 Database Link 的權限 SQL> grant CREATE DATABASE LINK to ABC 5. 再檢查是否有權限 SQL> select grantee, privilege from dba_sys_priv

EXCEL 2007 無法直接開啟檔案

問題描述 1.直接點擊 excel 檔案時會出現 " 傳送命令給程式發生錯誤 " 無法開啟檔案  ,  但先開啟 excel 程式再用開啟舊檔案方式則正常  , ps, 點任何一個 excel 檔都會遇到此問題( 史教授的部落格) 2.開啟outlook附件 excel檔案時,出現空白的excel檔不會自動直接開啟檔案。 解決方式 左上角的  Office  按鈕、 [Excel  選項 ] 、 [ 進階 ] 、取消  [ 一般 ]  區塊中的  [ 忽略其他使用動態資料交換  (DDE)  的應用程式

Oracle Select For Update NOWAIT用法

如果有需要將Select的資料進行Lock後, 再將資料做後續邏輯處理時, 會使用到Select For Update來鎖定資料列。 但如果要鎖定的資料列已被其他session鎖定時, 則會發生一直等待的狀況, 直到其他session釋放資料的鎖定狀態。 但有時我們可能會希望不要等待, 直接回傳資料已被鎖定的錯誤時, 則可以在FOR UPDATE後面再加上NOWAIT指令來達到該效果。 [Session1] UPDATE ABC SET C2='111' WHERE C1='AAA';    --鎖定資料 [Session2] DECLARE l_row ABC%ROWTYPE; CURSOR cr1 IS SELECT * FROM ABC WHERE C1='AAA' FOR UPDATE; BEGIN OPEN cr1; LOOP FETCH cr1 INTO l_row; END LOOP; CLOSE cr1; END; [Session3] DECLARE l_row ABC%ROWTYPE; CURSOR cr1 IS SELECT * FROM ABC WHERE C1='AAA' FOR UPDATE NOWAIT; BEGIN BEGIN OPEN cr1; LOOP FETCH cr1 INTO l_row; END LOOP; CLOSE cr1; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line(SQLERRM); END; END; 此時[Session2]會一直處於等待狀態, 但[Session3]則會直接發生Exception。 PS. 在Open Cursor時就會發生LOCK的狀態, 所以在包Begin Exception End時要從Open Cursor開始。

Oracle如何刪除被鎖定(locked)的session

1. 查詢出要刪除的Lock Session ID select a.sid||','||a.serial#,a.machine from v$session a,DBA_DML_LOCKS b where a.sid = b.session_id group by a.sid||','||a.serial#,a.machine; 2. 刪除Session ID alter system kill session 'xxx,yyyy' immediate; (其中, 'xxx,yyy'為第1步查到的資料) * v$session : 使用中session資料 * DBA_DML_LOCKS : Lock Session資料 reference web: http://itgroup.blueshop.com.tw/ZEasyChen/IT?n=convew&i=3806

Oracle 例外控制(Exception Control)

寫Oracle Stored Procedure時, 也和一般程式開發一樣, 也會遇到邏輯例外而需要控制。 1. Oracle已存在Exception例外處理 DECLARE l_row abc%ROWTYPE; BEGIN BEGIN select * INTO l_row from abc where abc01='123@asd'; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('--> NO_DATA_FOUND err is ' || SQLERRM); WHEN OTHERS THEN DBMS_OUTPUT.put_line('--> OTHER err is ' || SQLERRM); END; END; ** 則會顯示 "--> NO_DATA_FOUND err is ORA-01403: no data found" ** 如果沒有處理"WHEN NO_DATA_FOUND THEN", 則會跑到"OTHERS"中 1.1 Oracle已存在Exception例外處理(但自定Exception名稱) DECLARE l_row abc%ROWTYPE; my_no_data_found_exp EXCEPTION; PRAGMA EXCEPTION_INIT(my_no_data_found_exp, -01403); --no data found Exception BEGIN BEGIN select * INTO l_row from abc where abc01='123@asd'; EXCEPTION WHEN my_no_data_found_exp THEN DBMS_OUTPUT.put_line('--> NO_DATA_FOUND err is ' || SQLERRM); WHEN OTHE

事務機無法發送掃描文件

圖片
事務機型號:FX DC236 解決方法: 因為印表機設定了固定IP發送郵件,當一改變位置時就得更換IP,當然現已經造成多天的不便。 最好的方法就是,改變設定使用DNS設定發送郵件,使用網域名稱mail.XXX.com。 進入印表機設定 TCP/IP DNS 項目,設定DNS主機的 IP位置及信箱網域 存檔即可。

Oracle資料唯一值 - Primary-Key與Unique Index差異

最近接觸TIPTOP系統, 發現資料庫都沒有設定Primary-Key, 但卻有唯一值的功能, 覺得很好奇, 查了一下才知道, 原來Index還可以有限定唯一值的功能, 但用途上與Primary-Key還是有些差異; 1. Primary Key欄位不允許null, 但Unique Index欄位允許 2. 一張Table只允許一組Primary Key, 但允許多組Unique Index reference web: http://tomkuo139.blogspot.tw/2010/03/oracle-database-primary-key-unique.html

mstsc遠端登入

一般windows的遠端登入依作業系統不同而且不同的數量, 再沒有購買license情況下, 一般為1個, 但如果是server有開啟遠端模式時, 預設可以有2個終端機數量可以連線。 但使用者如果沒有乖乖的在使用完後登出, 會造成2個數量都被使用掉, 並處理使用中而無法登入, 此時除了使用終端機管理員踢掉使用中session外, 還可以用下列指令連線至該電腦的console端。 mstsc /console PS. 但Windows XP SP3不支援此參數, 要改用 /admin 才可以。 reference web: http://zhidao.baidu.com/question/559403654.html

Oracle alter session

改變目前連線session的日期顯示格式 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Oracle 日期 trunc 用法

當日期使用 trunc 後, 會將其時分秒都變更為 00:00:00 select trunc(sysdate) from dual select to_char(trunc(sysdate), 'YYYY/MM/DD HH24:MI:SS') from dual

Oracle 取亂數的方法

使用 DBMS.RANDOM 來取得亂數值 隨機取亂數 select dbms_random.random from dual; 取0到1的亂數 select dbms_random.avlue from dual; 取指定範圍的亂數 select dbms_random.value(1, 1000) num from dual; 取20個隨機英文字-大寫 select dbms_random.string('U', 20) str from dual; 取20個隨機英文字-小寫 select dbms_random.string('L', 20) str from dual; 取20個隨機英文+符號-大寫 select dbms_random.string('A', 20) str from dual; 取20個隨機英文+符號-小寫 select dbms_random.string('X', 20) str from dual; reference web: http://www.databasejournal.com/features/oracle/article.php/3341051/Generating-random-numbers-and-strings-in-Oracle.htm

Oracle 工作排程 DBMS_JOB 筆記

1. 設定初始化參數 job_queue_processes : oracle 允許執行的最大任務數量 specifies the maximum number of processes that can be created for the execution of jobs. It specifies the number of job queue processes per instance (J000, ... J999). 最大值為 1000 sql> alter system set job_queue_processes=n; (n>0) 2. 查詢背景執行程序 sql> select name, description from v$bgprocess 3. 建立function or Stored Procedure 4. 執行程序 declare jobno number; begin dbms_job.submit(jobno, 'sp_test_alex;', sysdate, 'sysdate+1/1440'); dbms_output.put_line(jobno); commit; end; / 另一種寫法 declare jobno number; begin dbms_job.submit( job => :jobno, what => 'SP_SYNC_MES_ITEM;', next_date => SYSDATE, interval => 'SYSDATE + 10/1440' ); dbms_output.put_line(jobno); commit; end; 5. 查詢執行程序 sql> select * from user_jobs; 6.  移除程序 begin dbms_job.remove(141); end; / 7. 暫停程序 begin dbms_job.brok

Creating Crystal Reports with Datasets

1. 建立資料來源物件     a. 專案新增〔資料集〕項目(*.xsd), 命名為aaa.xsd     b. 新增Table及欄位 (依報表要的資料欄位來定義), Table名稱為bbb 2. 建立Crystal Report物件 (名稱為CrystalReport1)     a. 資料來源選擇剛剛第1步建立的資料集         專案資料\ADO.NET資料夾\剛剛建立的物件名稱     b. 選擇要的欄位(通常是全部)     c. 調整欄位位置 3. 建立一個表單(Form)來顯示報表     a. 拉一個button     b. 拉一個CrystalReportViewr物件, 名稱為crystalReportViewr1     c. 並在 buuton Click 事件裡寫入下面程式碼 //create database connection string strConnStr = "xxxxxxxx"; OracleConnection con = new OracleConnection(); con.ConnectionString = strConnStr; con.Open(); //create dataset aaa dSet = new aaa(); OracleDataAdapter da = null; da = new OracleDataAdapter(sql, con); da.Fill(dSet, "bbb"); //create CrystalReport1 Object and give DataSet CrystalReport1 cr = new CrystalReport1(); cr.SetDataSource(dSet); //指定CrystalReport 給 crystalReportViewr 物件 crystalReportViewr1.ReportSource = cr; crystalReportViewr1.refresh();

XP Powershell 安裝

因為要做一個自動刪除過期資料的批次檔, 以前都是自己寫vbscript, 但這次想要試試看PowerShell。 記得之前在找一些PowerShell的資料時, 是可以直接安裝PowerShell的程式, 而且安裝完成後也內建不錯的教學資料。但這次在找時, 微軟好像已經把PowerShell整合至Windows Patch更新檔裡了。 Windows 7 和 Windows 2008 R2是內建Powershell, 其他版本則是要自己下載更新檔, 而更新檔檔案名稱是『Windows Management Framework Core』, 同時包含了WinRM 2.0和Windows PowerShell 2.0。 [各系統對應下載路徑] Windows Server 2008: http://www.microsoft.com/downloads/details.aspx?FamilyId=863e7d01-fb1b-4d3e-b07d-766a0a2def0b 64位元6Windows Server 2008: http://www.microsoft.com/downloads/details.aspx?FamilyId=d37e25cf-db05-4b23-a852-cdf865d81b82 Windows Server 2003 32位元: http://www.microsoft.com/en-us/download/details.aspx?id=4045 Windows Server 2003 64位元: http://www.microsoft.com/downloads/details.aspx?FamilyId=909bbcf1-bd78-4e03-8c83-69434717e551 Vista: http://www.microsoft.com/downloads/details.aspx?FamilyId=f2fa1227-9a34-4e29-aa03-62f5c00e16f2 64位元Vista: http://www.microsoft.com/downloads/details.aspx?FamilyId=0f73efa2-f8d6-45f3-a8f8-5cdc205b119a XP和
之前其實有測試eSATA熱插拔的情況, 那次測試的結果和之前同事反應的狀況是一樣的, 一定要重開機才抓得到。(那時的心得是....這個eSATA真的是個很鳥的設計。) 今天剛好又在規劃備份機制, 因為資料量很大, 想說再測試一次看看(其實是不怎麼抱著希望), 為了怕是外接卡或線的問題, 又從盒子裡抓了兩個全新沒用的卡和線來測試。這次是拿MIS維修用的主機, 板子是微星的。 1. 主機開機 2. 外接硬碟開機 3. 插上eSATA 此時, 發現電腦有在動了, 在裝置管理員裡也發現有新的USB device, 心中一陣喜悅, 再切到磁碟管理, 果真有看到硬碟。沒想到竟然可以用, 但就覺得奇怪, 為什麼上次沒成功呢?? 把Server shutdown後, 裝上eSATA的外接卡後, 依上面的步驟執行後, 發現....ㄟ..怎麼沒反應, 裝置管理員和磁碟管理裡都沒反應, 重開機進BIOS後, 明明有看到抓到硬碟(心想: 果然和電腦有關, 但為什麼較老舊的電腦反而可以, 比較新一點的竟然不行)。 後來上網再查一下資料, 這個情況其實很多人都遇到, 也有人說eSATA一定要重開機才能用。查了幾篇文章後, 有個網友說可以用" HotSwap "(http://mt-naka.com/hotswap/index_enu.htm)軟體, 在OS裡執行後, 執行右下方常駐程式右鍵功能表中的『硬體變更掃瞄』, 就可以看到eSATA硬碟。 經實測, 證實果然可以偵測到硬碟, 真是一個好工具。 PS. 如果環境是XP, 要用5.0.0.0的版本。 2012/10/03 今天在系統運作時更換eSATA硬碟, 發現使用『裝置管理員』的硬體變更掃瞄與『HotSwap』軟體功能列表的硬體變更掃瞄是相同效果。

怎麼測試防毒軟體是否有作用

可以自己做一個簡單的檔案來測試防毒軟體是否有正常的在運作。 將下面這行字串反白選起來,Ctrl+C複製,打開「筆記本」,Ctrl+V貼上,存檔為「EICAR.COM」 (實際上, 要存檔為文字檔就被趨勢掃掉了)。儲存後檔案是 68-70 位元。 X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Windows批次檔常用變數

當前目錄 %cd% 目前正在運行的批次檔的所在目錄 %~dp0 目前正在運行的批次檔的所在的目錄的短名稱 %~sdp0 //20150415 新增 顯示傳入的第一個參數值 %1

修復XFS格式的磁區

今天早上一進公司,就發現NAS的外接USB硬碟掛了。使用網路芳鄰連進去,就只能看到一片空白,但可以看到正確的整個磁區大小及已使用磁區大小。建立資料夾時,會顯示I/O錯誤而失敗。 後來想說用Linux的開機工具mount看看,結果出現了新訊息"SuperBlock...."的錯誤。(整個錯誤訊息沒記下來...) 上網查了一下關於XFS磁區修復的資料,發現可以使用下面的指令來修復, xfs_repair -L /dev/sda1 主要發生此問題,大多是因為斷電導致磁區錯誤,但因為公司設備都是有使用UPS,所以還是不懂為什麼會發生此狀況。不過,修復好就可以用才是重點。

利用sysv-rc-conf管理啟動程式

在ubuntu裡,沒有chkconfig軟體,相對應的程式為sysv-rc-conf,不過預設是沒有安裝的。 >> sudo apt-get update >> sudo apt-get install sysv-rc-conf >> sudo sysv-rc-conf 畫面中,按 space 可以切換啟用或停用(直接儲存設定),按 q 離開程式。 也可以用指令來顯示或變更 >> sudo sysv-rc-conf --list (列出所有服務) >> sudo sysv-rc-conf --list | grep rsyslog (查詢某一服務) >> sudo sysv-rc-conf --level 25 rsyslog off (停用rsyslog level 2及5的服務) >> sudo sysv-rc-conf --level 25 rsyslog on (啟用rsyslog level 2及5的服務)

cacti 架設

之前一直在尋找免費又好用的電腦監控軟體來輔助了解伺服器運作的情況,但很多好用軟體大多都是付費軟體。雖然之前用過別人架設的cacti,但在上面始終看不懂要怎麼操作。 原本想說來個速學法,買本書啃一下就會了,誰知道cacti中文書真的超難買,賣完了沒買到,所以又灰心放棄了。 一直到前幾天看到 IT Home Download 有一篇算完整的教學,又燃起的學習的慾望。 參考網址:http://download.ithome.com.tw/article/index/id/1407 * 安裝作業系統 ubuntu 12.04 Server a. 預設語系選擇英艾 b. 不安裝作何套件 * 更新 apt-get list >> sudo apt-get update * 安裝 SSH + LAMP 套件 >> sudo taskse l * 選擇下面套件 1. OpenSSH server 2. LAMP server =>安裝過程中, 會要求輸入MySQL root 密碼。 * 安裝 cacti 相關套件 >> sudo apt-get install cacti =>安裝過程中, 1. 提示Webserver type時, 選擇 Apache2 2. 提示"Configure database for cacti with dbconfig-common"時, 選擇 "yes" 3. 提示"Password of the database's administrative user"時, 輸入mysql root 密碼 4. 提示"MySQL application password for cacti"時, 輸入 cacti 資料庫密碼 =>安裝完成後, cacti網頁路徑在 /usr/share/cacti 裡 * 安裝 cacti >> http://server-ip/cacti =>安裝過程中 1. Next 2. Please select the type of installtion => New Install

使用command安裝'作業系統安裝時的套件選擇畫面'功能套件

為了讓系統安裝完成後不要有太多垃圾,通常都是希望在安裝作業系統時,最好什麼程式或套件都不要裝。 平常如果是Windows的話就不會有什麼太大的問題,找到要的程式,Double Click * 2 就安裝完成了。 但是如果平台是Linux,再加上是新手的話,就很痛苦了。在每個 Linux 環境裡,其實都會有其相對的系統工具可以安裝套件。 在 ubuntu 的世界裡,除了可以用"apt-get"來安裝大多的套件,但如果有個套件清單可以選擇就更好了,此時則可以把ubuntu安裝系統時"選擇套件"的畫面叫出來後,就可以選擇了。第一次執行時,會發現只有2個套件可以選,所以記得要先更新apt-get清單。 >> sudo apt-get update >> sudo tasksel PS. 如果沒有這個套件(安裝完系統應該就有內建了),可以透過安裝"tasksel" 套件來取得, >> sudo apt-get install tasksel

倉頡輸入法安裝

因為安裝的是英文語系, 所以系統在預設下是沒有中文輸入法的. 找了網路上和中文輸入法有關的軟體有 ibus/scim/gcin. [ibus] 1. 一開始就先打開[applications\system tools\system settings], 找到[language support], 加入[chinese tranditional]. 2. [applications\system tools\iBus], 執行後, 右上方就會出現icon了 3. 在icon上右鍵[preference]中就可以選擇要的輸入法 4. 根據經驗, 選擇了[倉頡3], 結果發現在打'門'時, 輸入[日弓]後不會出現. 5. 上網查了一下, 找到一篇文章說也有相同問題, 討論中有提到安裝gcin就解決問題了 ------------------------------------------------------------------------------ [gcin] 1. 開啟terminal console, 並輸入下列命令 sudo apt-get update sudo apt-get install gcin im-switch im-switch -s gcin 2. 重開機並登入後, 右上角就會顯示gcin的圖示. 3. 在圖示上右鍵, 選擇[configuration\Default inpu method and toglle key], 就可以勾選要的輸入法. (發現雖然有無蝦米的可以選, 但完成後在切換輸入法時, 其實是選不到的, 看來要另外再安裝設定才可以使用) PS. 2014/07/19 在14.04上使用這個安裝方法後, 控制台的"語言支持"會不見。 就這樣, 終於可以輸入中文了. [scim]就有空再來試看看了. 可以打中文的感覺真好~~~

unity換回gnome

換回gnome的方法如下, 不會太難! 1. open terimal console 2. input commane => sudo apt-get install gnome-session-fallback 3. reboot 4. select 'gnome classic' in the login window 登入後, 就看到之前熟悉的介面了.

GetUpperBound & Length 的分別

在取陣列的長度時, 常用的語法有兩個, GetUpperBound & Length, 他們有什麼分別呢? GetUpperBound(N)可以用來取得陣列第N+1維度中元素的個數 Length可以用來取得陣列中所有的元素個數 用個簡單的程式來測一下就會比較清楚了 {2維陣列} string[,] aaa = new string[2, 3]; Console.WriteLine("aaa.GetUpperBound(0)=>" + aaa.GetUpperBound(0).ToString()); Console.WriteLine("aaa.GetUpperBound(1)=>" + aaa.GetUpperBound(1).ToString()); Console.WriteLine("aaa.Length=>" + aaa.Length.ToString()); 得到的結果如下, aaa.GetUpperBound(0)=>1 //2個元素 aaa.GetUpperBound(1)=>2 //3個元素 aaa.Length=>6 //6個元素 所有如果當陣列為多維度時, 結果就不會相同, 但如果是一維陣列, 則會是相同的。 {1維陣列} string[] bbb = new string[2]; Console.WriteLine("bbb.GetUpperBound(0)=>" + bbb.GetUpperBound(0).ToString()); Console.WriteLine("bbb.Length=>" + bbb.Length.ToString()); 得到的結果如下, bbb.GetUpperBound(0)=>1 //2個元素 bbb.Length=>2 //2個元素

日期格式

CONVERT(CHAR(10), GETDATE(), 100) => MM DD YYYY (06 26 2008) CONVERT(CHAR(10), GETDATE(), 101) => MM/DD/YYYY (06/26/2008) CONVERT(CHAR(10), GETDATE(), 102) => MM.DD.YYYY (06.26.2008) CONVERT(CHAR(10), GETDATE(), 103) => DD/MM/YYYY (14/03/2011) CONVERT(CHAR(10), GETDATE(), 104) => DD.MM.YYYY (14.03.2011) CONVERT(CHAR(10), GETDATE(), 105) => DD-MM-YYYY (14-03-2011) CONVERT(CHAR(10), GETDATE(), 106) => DD MM YYYY (14 03 2011) CONVERT(VARCHAR(8),  GETDATE() , 108)  => HH:MM:SS (17:24:30) CONVERT(CHAR(8), GETDATE(), 112) => YYYYMMDD (20110314) CONVERT(CHAR(12), GETDATE(), 114) => HH:MM:SS:sss (17:24:30:923) CONVERT(CHAR(10), GETDATE(), 111)  => YYYY/MM/DD (2008/06/26) CONVERT(CHAR(10), GETDATE(), 120)  => YYYY-MM-DD (2008-06-26) 取得年月日時分秒 <SQL Serve 2005 and Onwards> CONVERT(VARCHAR(10),  GETDATE(), 111) + ' ' + CONVERT(VARCHAR(8), GETDATE(), 108) => YYYY/MM/DD   => YYYY/MM/DD HH:MM:SS (2008/06/26 17:24:30) <SQL

MSSQL 暫存表(Tempary Table)

[暫存表(Temporary Tables)] CREATE TABLE #Yaks ( YakID int, YakName char(30) ) table name 前加入"#", 表示這是一個暫存表(temporary table) 當session 關閉時, 這個table 將會自動drop 好的寫作習慣, 應在暫存表使用完畢後, 下指令去 drop, 而不是讓系統自動回收 暫存表是存在主機記憶體中, 因此存取速度較快 暫存 table 的限制: 暫存表存在於"tempdb"這個database 裡 如果有兩個使用者建立同一個名字的暫存表, 則他們會各自擁有獨立的一份, 互相不會干擾. 若stored procedure A 建立了一個暫存表, 並呼叫 stored procedure B, 則在 B 中可以存取這個暫存表 如果在SQL Server Management Studio or Query Analyzer 中建立的暫存表, 會等到我們手動drop 去關閉session 才會消失   [表格變數(Table Variables)] 當我們使用 SQL Server 2000 或以後的版本, 則可以考慮使用 "Table Variables" (表格變數); 使用方式如下例: DECLARE @TibetanYaks TABLE ( YakID int, YakName char(30) ) INSERT INTO @TibetanYaks (YakID, YakName) SELECT YakID, YakName FROM dbo.Yaks WHERE YakType = 'Tibetan' -- Do some stuff with the table 它和暫存表類似, 但它更加彈性, 且不會存在於tempdb 中(完全存在於記憶體). 使用完畢後, 不須手動去 drop它 兩者的使用時機 當暫存的資料筆數小於100筆時, 使用表格變數, 否則, 可使用暫存表, 因為針對表格變數, SQL Server 不會去解析/最佳化它的效能. 當我們須要對表格建立索引(Ind

Oracle 與 MSSQL Tempary Table差異

Oracle   * Session Tempary Table   --> Session 結束時, 資料會清空   * Trasaction Tempary Table   --> 當Transaction(Commit or Rollback)時, 資料會清空   不論哪一種, Table都還是存在的。   每個Session的資料異動互不影響。 MSSQL   * Tempary Table (#)   --> 只有Creator自己看得到   --> Session結束時, Table架構會被系統自動刪除   * Golbal Tempary Table (##)   --> 大家都看得到   --> 當沒有人使用這Table時, 系統才會刪除