Oracle 常用命令

Oracle 常用的指令簡單以 FAQ 的方式記錄一下:

查看 有哪些 DB(show databases)
select * from v$dbfile
查看有哪些 Table(show tables)
select * from v$tablespace
建立 DB(Tablespace)
create tablespace NAME datafile 'FILENAME.dbf' size 20M; (Create DB)
建立一個新的 USER, 並授權可連線, 建 table 等
  • create user USERNAME identified by PASSWORD;
  • grant connect to USERNAME;
  • grant resource to USERNAME;
  • conn USERNAME/PASSWOD;
  • create table t1 (c1 int);
  • insert into t1 values(1);
  • commit;

其它的等遇到問題再來做記錄囉~

閱讀全文〈Oracle 常用命令〉

MySQL InnoDB 的 Transaction 的簡易用法

MySQL 預設都會啟動 Auto Commit, 要在 InnoDB 做 Transaction 有分兩種方法:

  1. BEGIN 直到 COMMIT, ROLLBACK 結束
  2. SET AUTOCOMMIT=0 直到 SET AUTOCOMMIT=1 結束

兩者差別在於:

  1. 使用 BEGIN 是當下的做 Transaction 的功能, 一直到 COMMIT 或 ROLLBACK 為止.(之後一樣是會 AUTO COMMIT)
  2. 使用 SET AUTOCOMMIT 的話, 只要設 0 就是 "在這次的 Connection" 都當做 AUTOCOMMIT是關閉的, 不管做幾次 COMMIT, ROLLBACK 都一樣, 直到設為 1 才算開啟 AUTO COMMIT.

不過以上的方法, 都要小心是否要做 Read Lock 的問題.

閱讀全文〈MySQL InnoDB 的 Transaction 的簡易用法〉

Perl 四捨五入

方法1: 自己寫 round()

sub round {
    my $val = shift;
    my $col = shift;
    my $r = 10 ** $col;
    my $a = ($val > 0) ? 0.5 : -0.5;
    return int($val * $r + $a) / $r;
}
# 於要取的位數後 +0.5, 再取整數即可.
my $a = 10.335444;
print round($a, 2);

方法2: 使用 sprintf()

my $a = 10.335444;
print sprintf("%.2f", $a);

用法可參考: Perl 5.8.0 Documentation - sprintf

閱讀全文〈Perl 四捨五入〉

CVS 加 TAG 標籤

要 Release 一個新版本的時後, 可以順便做個 tag, 將此 release 的各個檔案版本資訊都記錄下來, 之後要取得也可以方便取的.

CVS 要加個 tag 的方法如下:

加 tag: cvs tag tag_name
EX: cvs tag public-release-2-0-20060105-stable
取出 tag 的版本: cvs co -r tag_name output_path
EX: cvs co -r public-release-2-0-20060105-stable work/plog/

閱讀全文〈CVS 加 TAG 標籤〉

防止表單送出兩次又能禁止留空

寫網頁的程式最怕的就是 Double Submit(同一時間重覆點擊), 只要簡單加上一段就可以解決這種問題. (於 input 點下去的時後, 馬上將此 button disable 掉)

加此行: onclick="this.disabled=true"

Ex:
<input type="button" name="Submit" value="Submit" onclick="this.disabled=true" />

閱讀全文〈防止表單送出兩次又能禁止留空〉

PHP 截字、斷字專用 function

在寫網頁的時後常會遇到 80 個字要截字, 然後超過 80 字加 "...", 未滿 80 字不加.. 等等之類的問題.

之前用 substr 的寫法如下:

$string = strip_tags($string); // 先清掉 html tag, 以免 html tag 被破壞
$string = mb_substr($string, 0, 80, 'UTF-8');
$string .= (mb_strlen($string, 'UTF-8') > 80) ? '...' : '';

PHP 有支援很方便的 function 可以直接達到此功能.

$string = strip_tags($string);
$string = mb_strimwidth($string, 0, 80, '...', 'UTF-8');

在 UTF-8 的環境算字數用 strlen 或 mb_strlen 都不是很準, 所以可以用另一個做法, 算字的寬度, 也是個不錯的做法

echo mb_strwidth($string, 'UTF-8'); // 算字寬度

閱讀全文〈PHP 截字、斷字專用 function〉

Perl 文字 / 字串 取代(Regex)

感謝 洪朝貴 老師 寫的 Regular Expression.

老師的教導, 而學生當時沒有好好學習.. 需要用到時才偷偷的溜回去看老師的網頁..

真是慚愧... 慚愧之餘.... 還是趕快把語法記下來.. :p

  • 取代法1: perl -pe 's/<?/<?php/g' 檔名
  • 取代法2: perl -pe 's/<?/<?php/g' action.php > action-new.php
  • 取代法3: perl -i -pe 's/<?/<?php/g' `find . -iname '*htm*'`

取代法3 後面的 find.. 可以改用其它你想改的檔名(ex: 改成 *.php), 以上三個範例都是要將 <? 改成 <?php 的做法..

取代法3 能將所有目錄中.你想取代的檔案都取代到(靠自己多嘗試學習吧!!)

此命令是要將 InnoDB 取代成 MyISM 並將原始檔案備份成 filename.sql.bak

perl -i.bak -pe 's#InnoDB#MyISAM#g' filename.sql

MySQL Update 加字串進原始欄位中

MySQL 要對某個欄位做 Update, 而主要要做的事情, 是要將新增的資料塞在那個欄位前面或後面.

以前的做法都笨笨的 Select 出來, 再結合好塞回去, 原來有個很好用的 Function 可以解決這事情.

主要用的 Function 是 CONCAT(), (MySQL 內建函數).

ex: update T1 set t = CONCAT(t,'def'); // 把 def 加在此欄後面.

CONCAT = concatenate (連接)的意思.

閱讀全文〈MySQL Update 加字串進原始欄位中〉