這裡就涉及到有一條記錄但是記錄是空記錄和沒有一條記錄的問題了。 首先弄清楚no data found異常是在找不到一條記錄的時候報的異常,但是在找到一條空記錄的時候是不會報這個異常的。 用集合函式之所以不會報錯原因是:用集合函式的時候,當引數沒有賦值時,函式會預設賦一個空值來進行計算,返回的結果也是一個空值(不是沒有值)。 而to_char、substr這些函式就不會當引數沒有賦值時預設賦空值,也就沒有結果返回。所以區別就是一個有記錄返回,但是個空記錄,而一個是沒有記錄返回。其實你要看清楚空記錄和沒有記錄的區別可以執行如下的程式看返回結果的差別就懂了。OPEN OUTCURSOR FORselect MAX(t.Time) from dept t where t.id>"10";比較OPEN OUTCURSOR FORselect t.Time from dept t where t.id>"10"; 再比較OPEN OUTCURSOR FORselect to_char(t.Time,"yyyy-mm-dd") from dept t where t.id>"10";
這裡就涉及到有一條記錄但是記錄是空記錄和沒有一條記錄的問題了。 首先弄清楚no data found異常是在找不到一條記錄的時候報的異常,但是在找到一條空記錄的時候是不會報這個異常的。 用集合函式之所以不會報錯原因是:用集合函式的時候,當引數沒有賦值時,函式會預設賦一個空值來進行計算,返回的結果也是一個空值(不是沒有值)。 而to_char、substr這些函式就不會當引數沒有賦值時預設賦空值,也就沒有結果返回。所以區別就是一個有記錄返回,但是個空記錄,而一個是沒有記錄返回。其實你要看清楚空記錄和沒有記錄的區別可以執行如下的程式看返回結果的差別就懂了。OPEN OUTCURSOR FORselect MAX(t.Time) from dept t where t.id>"10";比較OPEN OUTCURSOR FORselect t.Time from dept t where t.id>"10"; 再比較OPEN OUTCURSOR FORselect to_char(t.Time,"yyyy-mm-dd") from dept t where t.id>"10";