SELECT a.appname FROM appinfo a; -- 正確
SELECT a.appname FROM appinfo AS a; -- 錯誤
疑為避免與 PL/SQL 關鍵字 AS 衝突。
預存程序中 SELECT 單一欄位必須緊接 INTO;若選整列則使用游標。
SELECT af.keynode INTO kn FROM appfoundation af ...; -- 正確
SELECT af.keynode FROM appfoundation af ...; -- 編譯錯:PLS-00428
若查無資料會拋出 NO_DATA_FOUND 例外。建議先 SELECT COUNT(*) 確認存在再執行 SELECT INTO。
編譯雖通過,執行期會報 ORA-01422: exact fetch returns more than requested number of rows。
錯誤範例:SELECT af.keynode INTO kn FROM appfoundation af WHERE af.appid = appid ...(別名 af 與欄位 appid 同名導致條件失效)。
表 A 定義 vcount NOT NULL,但 SELECT SUM(vcount) INTO fcount FROM A WHERE bid='xxx' 若無符合行,fcount 為 NULL(即使宣告 fcount NUMBER(8) := 0 也會被覆蓋)。必須事後判斷:
IF fcount IS NULL THEN fcount := 0; END IF;
this.pnumberManager.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
CallableStatement cs = session.connection().prepareCall("{call modifyapppnumber_remain(?)}");
cs.setString(1, foundationid);
cs.execute();
return null;
}
});