【ORACLE】常用脚本

时间:2021-11-29 14:04:01
--IFELSE
 

DECLARE

  V_NUM NUMBER;
BEGIN
  V_NUM := 100;
  IF V_NUM > 100 THEN
    --
  ELSIF V_NUM > 50 THEN
    --
  ELSE
    --
  END IF;
END;

 
--带参数存储过程
CREATE OR REPLACE PROCEDURE DELETE_SUBSCRIBER(P_SUBID IN NUMBER) IS
  V_MEM VARCHAR2(100) := '<SQL5.4.4.11R2.p14121911_6861>';
BEGIN
      --。。。
END DELETE_SUBSCRIBER;
/
 
--不带参数存储过程
CREATE OR REPLACE PROCEDURE DELETE_SUBSCRIBER IS
  V_MEM VARCHAR2(100) := '<SQL5.4.4.11R2.p14121911_6861>';
BEGIN
      --。。。
END DELETE_SUBSCRIBER;
/
 
--带参数的函数
其中RETURN字句是必须存在的,一个函数如果没有执行RETURN字句就结束语句会发生错误
CREATE OR REPLACE FUNCTION GET_PRODUCTSTR(P_SUBID IN NUMBER, P_PAYDT DATE)
  RETURN VARCHAR2 IS
  RESULT VARCHAR2(1024);

BEGIN
  MERGE_STR := '';
  FOR V_P IN C_PRODUCTINFO LOOP
    MERGE_STR := MERGE_STR || V_P.PRODUCTNAMESTR || '[R:' || V_P.MONTHFEE || ']. ';
  END LOOP;
  RETURN RESULT;
END;
/
 
--函数可以有默认值
CREATE OR REPLACE FUNCTION CountryNumber(n_max number default 10000,n_min number default 10)
RETURN VARCHAR2 IS
v_resultvalue vacharr2(50);
BEGIN
 
RETURN  v_resultvalue;
END;
 

--异常处理例子
DECLARE
  V_NUM NUMBER(2) := 10;
  V_ZERO NUMBER(2) := 0;
  V_RESULT NUMBER(5);
BEGIN
  V_RESULT := V_NUM / V_ZERO;
EXCEPTION
  WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('DIVIDE ZERO');
END;
 
异常说明:
DUP_VAL_INDEX:违反唯一性
LOGIN_DENIED: 登陆失败,用户名密码错误
NO_DATA_FOUND:没有发现数据存在
TOO_MANY_ROWS:数据行太多,
ZERO_DIVIDE:除数为0错误
VALUE_ERROR: 算法或转换错误
CASE_NOT_FOUND: 在case语句中发现不匹配的when语句
 
 
DECLARE
  E_OVERNUMBER EXCEPTION;
BEGIN
  IF V_MAX < V_NUM THEN
    -- deal....
    RAISE E_OVERNUMBER;
  END IF EXCEPTION
 
  WHEN E_OVERNUMBER THEN DBMS_OUTPUT.PUT_LINE("ERR MSG");
END;