dm_function.sql 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. CREATE OR REPLACE FUNCTION FIND_IN_SET
  2. (
  3. piv_str1 varchar2,
  4. piv_str2 varchar2,
  5. p_sep varchar2 := ',')
  6. RETURN NUMBER
  7. IS
  8. l_idx number:=0;
  9. str varchar2(500);
  10. piv_str varchar2(500) := piv_str2;
  11. res number :=0;
  12. loopIndex number :=0;
  13. BEGIN
  14. IF instr(piv_str, p_sep, 1) = 0 THEN
  15. IF piv_str = piv_str1 THEN
  16. res := 1;
  17. END IF;
  18. ELSE
  19. LOOP
  20. l_idx := instr(piv_str, p_sep);
  21. loopIndex:=loopIndex+1;
  22. IF l_idx > 0 THEN
  23. str:= substr(piv_str, 1, l_idx-1);
  24. IF str = piv_str1 THEN
  25. res:= loopIndex;
  26. EXIT;
  27. END IF;
  28. piv_str := substr(piv_str, l_idx+length(p_sep));
  29. ELSE
  30. IF piv_str = piv_str1 THEN
  31. res:= loopIndex;
  32. END IF;
  33. EXIT;
  34. END IF;
  35. END LOOP;
  36. END IF;
  37. RETURN res;
  38. END FIND_IN_SET;
  39. --
  40. CREATE OR REPLACE FUNCTION "IF"(
  41. p_condition BOOLEAN,
  42. p_true_val ANYTYPE,
  43. p_false_val ANYTYPE
  44. ) RETURN ANYTYPE
  45. AS
  46. BEGIN
  47. IF p_condition IS NULL THEN
  48. RAISE_APPLICATION_ERROR(-20001, '判断条件不能为NULL');
  49. END IF;
  50. IF p_condition THEN
  51. RETURN p_true_val;
  52. ELSE
  53. RETURN p_false_val;
  54. END IF;
  55. END;