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

Oracle 觸發器開發速查:變量、NEW/OLD、流程控制、常用函數對照表

     編輯:Oracle 資料庫基礎

核心語法要點

項目Oracle 語法說明
變量聲明DECLARE msg VARCHAR2(22); cnt NUMBER := 0;DECLARE 區塊,可帶初始值
取新/舊值:NEW.col_name / :OLD.col_nameDML 觸發器專用,:NEW 在 INSERT/UPDATE 中有效
IF-ELSEIF cond THEN ... ELSIF ... ELSE ... END IF;PL/SQL 標準流程控制
字符串截取SUBSTR(str, pos, len)SQL Server: SUBSTRING(str, pos, len)
字符串替換REPLACE(str, old, new)兩者語法相同
字符串拼接str1 || str2SQL Server: str1 + str2
日期→字符串TO_CHAR(date, 'YYYYMMDD')SQL Server: CONVERT(VARCHAR, date, 112)
字符串→日期TO_DATE(str, 'YYYY-MM-DD')SQL Server: CONVERT(DATETIME, str)
當前時間SYSDATESQL Server: GETDATE()
輸出調試DBMS_OUTPUT.PUT_LINE(msg)SQL Server: PRINT msg
單行查詢賦值SELECT col INTO var FROM ...SQL Server: SELECT @var=col FROM ...
語句結束符**每句必須分號**SQL Server 可省略
自增列實現Sequence + BEFORE INSERT TriggerSQL Server: IDENTITY(1,1)

完整觸發器案例:投票業務

CREATE OR REPLACE TRIGGER t_table_trigger
AFTER INSERT ON t_table
FOR EACH ROW
DECLARE
  msg          VARCHAR2(22);
  return_msg   VARCHAR2(180);
  xsbh         VARCHAR2(10);
  vote_cnt     NUMBER := 0;
BEGIN
  IF INSERTING THEN
    msg := :NEW.msg;
    msg := REPLACE(REPLACE(msg, '+', ''), '-', '');  -- 清洗

    IF LOWER(SUBSTR(msg,1,1)) = 'v' AND LENGTH(msg) > 3 THEN
      IF SYSDATE < TO_DATE('2009-12-26','YYYY-MM-DD') THEN
        SELECT COUNT(*) INTO vote_cnt
        FROM t_siteuser
        WHERE userid = :NEW.source_user
          AND TO_CHAR(gentime,'YYYYMMDD') = TO_CHAR(SYSDATE,'YYYYMMDD');

        IF vote_cnt <= 20 THEN
          xsbh := '候選人編號';  -- 簡化邏輯
          INSERT INTO t_siteuser(id, bh, gentime)
          VALUES (SEQ_T_SITEUSER.NEXTVAL, xsbh, SYSDATE);
          return_msg := '感謝您對' || xsbh || '號的支持!';
        ELSE
          return_msg := '對不起,網站每天限投 20 票!';
        END IF;
      ELSE
        return_msg := '活動已結束,歡迎繼續關注!';
      END IF;
    END IF;
    -- 實際業務中 return_msg 需返回給前端,此處略過
  END IF;
END;
/
-- 測試:INSERT INTO t_table(msg, source_user) VALUES ('v123', 'user001');

該案例涵蓋:DML 事件判斷、:NEW 取值、字符串處理、日期比較、單行查詢賦值、Sequence 取值、條件分支、異常消息構建。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved