首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 應用經驗談 (1):入門必備知識清單與 Forms 常用內建函數速查

     編輯:Oracle 資料庫基礎

一、月份縮寫對照表

JAN-1  FEB-2  MAR-3  APR-4  MAY-5  JUN-6
JUL-7  AUG-8  SEP-9  OCT-10 NOV-11 DEC-12

二、常用環境設定與 Forms 觸發器範例

ON-LOGON 觸發器:多重資料源登入重試邏輯

DECLARE
  flag VARCHAR2(80) := NULL;
  cou  NUMBER := 1;
  n    NUMBER;
BEGIN
  LOOP
    LOGON(USERNAME, PASSWORD || '@' || CONNECT, PROPERTY_FALSE, ...);
    flag := GET_APPLICATION_PROPERTY(DATASOURCE);
    EXIT WHEN cou > 8 OR flag = 'Oracle';
    cou := cou + 1;
  END LOOP;
  IF flag <> 'Oracle' THEN
    SET_ALERT_PROPERTY('a_1', ALERT_MESSAGE_TEXT, '登錄失敗,請返回重試');
    n := SHOW_ALERT('a_1');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
END;

對基表執行查詢

SET_BLOCK_PROPERTY('Block_Name', DEFAULT_WHERE, 'WHERE ...');
GO_BLOCK('Block_Name');
EXECUTE_QUERY;

三、變數類型與作用域

  • 區域變數:PL/SQL 區塊內宣告。
  • 全域變數::block.item、:parameter.v_name、:global.v_name。

四、常用內建函數速查

視窗控制

SYNCHRONIZE;                    -- 同步顯示
EXECUTE_TRIGGER('TRIGGER_NAME');-- 觸發指定 Trigger
CLEAR_BLOCK(NO_VALIDATE);       -- 清除區塊(不驗證)

警示視窗

SET_ALERT_PROPERTY('Alert_Name', ALERT_MESSAGE_TEXT, 'message');
n := SHOW_ALERT('Alert_Name');
IF n = ALERT_BUTTON1 THEN ... ELSIF n = ALERT_BUTTON2 THEN ... END IF;

視窗屬性設定

SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW, WINDOW_STATE, MAXIMIZE|MINIMIZE);
SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW, TITLE, 'TEXT');
SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW, REMOVE_ON_EXIT, PROPERTY_FALSE|TRUE);

系統訊息等級

:SYSTEM.MESSAGE_LEVEL := '5|10|15|20';

Item 屬性控制

SET_ITEM_PROPERTY('Block.Item', ENABLED, PROPERTY_TRUE|FALSE);
SET_ITEM_PROPERTY('Block.Item', NAVIGABLE, PROPERTY_TRUE|FALSE);
SET_ITEM_PROPERTY('Block.Item', VISUAL_ATTRIBUTE, 'vname');
SET_ITEM_PROPERTY('Block.Item', DISPLAYED, TRUE|FALSE);
SET_ITEM_PROPERTY('Block.Item', POSITION, x, y);
SET_ITEM_PROPERTY('Block.Item', ITEM_SIZE, x, y);
SET_ITEM_PROPERTY('Block.Item', LABEL, 'MESSAGE');

List Item 操作

CLEAR_LIST('b1.fkfs');
POPULATE_GROUP('fkfs');
POPULATE_LIST('b1.fkfs', 'fkfs');

ADD_LIST_ELEMENT(list_name, index, label, value);
DELETE_LIST_ELEMENT(list_name, index);
GET_LIST_ELEMENT_COUNT(list_name);
GET_LIST_ELEMENT_LABEL(list_name, index);
GET_LIST_ELEMENT_VALUE(list_name, index);

Timer 與編輯器

CREATE_TIMER('emp_timer', 60000, REPEAT|NO_REPEAT); -- 1 分鐘週期

DECLARE ed_id Editor; status BOOLEAN;
BEGIN
  ed_id := FIND_EDITOR('edit_name');
  IF NOT ID_NULL(ed_id) THEN
    SHOW_EDITOR(ed_id, NULL, :block.item, status);
  ELSE RAISE FORM_TRIGGER_FAILURE; END IF;
END;

LOV (List of Values)

DECLARE lv_id LOV; status BOOLEAN;
BEGIN
  lv_id := FIND_LOV('lov_name');
  status := SHOW_LOV(lv_id, 10, 20);
END;

例外處理

DECLARE err_1 EXCEPTION;
BEGIN
  IF ... THEN RAISE err_1; END IF;
EXCEPTION
  WHEN err_1 THEN ...;
END;

五、常用 SQL 函數速查

  • 字串:UPPER/LOWER/INITCAP, LPAD/RPAD, LTRIM/RTRIM, INSTR, SUBSTR, TRANSLATE, ASCII
  • 數值:ABS, MOD, ROUND/TRUNC, SIGN, GREATEST/LEAST, FLOOR/CEIL
  • 彙總:AVG/COUNT/MAX/MIN/SUM
  • 條件:DECODE, NVL
  • 排序:ORDER BY expr|position ASC|DESC

六、游標屬性與迴圈結構

%ISOPEN   -- 是否開啟
%NOTFOUND -- 最近 FETCH 無資料
%FOUND    -- 最近 FETCH 有資料
%ROWCOUNT -- 已擷取筆數

LOOP ... EXIT WHEN ... END LOOP;
WHILE condition LOOP ... END LOOP;
FOR i IN start..end LOOP ... END LOOP;
FOR rec IN cursor LOOP ... END LOOP;

七、常見預定義例外

WHEN NO_DATA_FOUND THEN ...
WHEN TOO_MANY_ROWS THEN ...
WHEN INVALID_NUMBER THEN ...
WHEN ZERO_DIVIDE THEN ...
WHEN DUP_VAL_ON_INDEX THEN ...
WHEN INVALID_CURSOR THEN ...
WHEN VALUE_ERROR THEN ...
WHEN OTHERS THEN ...

八、TEXT_IO 檔案操作

DECLARE out_file TEXT_IO.FILE_TYPE; L VARCHAR2(100);
BEGIN
  out_file := TEXT_IO.FOPEN('c:\log.txt', 'r');
  IF TEXT_IO.IS_OPEN(out_file) THEN
    TEXT_IO.GET_LINE(out_file, L);
    ...
  END IF;
  TEXT_IO.FCLOSE(out_file);
END;

九、其他實用片段

  • 清除全域變數:ERASE('global.var_name')
  • 隱藏物件:HIDE_WINDOW|VIEW|MENU('name')
  • 參數列傳遞報表:CREATE_PARAMETER_LIST, ADD_PARAMETER, RUN_PRODUCT
  • OLE 自動化:OLE2.CREATE_OBJ, OLE2.INVOKE
  • 刪除重複資料:DELETE FROM emp e WHERE e.rowid > (SELECT MIN(f.rowid) FROM emp f WHERE f.empno = e.empno);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved