我写的代码是否正确,或者是否有更优化的方法来解决问题?

Is the code I wrote correct or are there more optimized approaches to solve the problem?

我有一个 srting p_balances 喜欢:

balances|100095|5800870-989095-3|Mb|10240.0|10240|0.0|3|2021-11-22T10:12:31.000+06:00^balances|989011|5800870-989011-3|Min|16666666666666666|0|-16666666666666666|3|2021-11-22T10:12:31.000+06:00

我想在我的函数中使用 return,如果 1 为真,0 为假。 我的 table service_id_map 包含 nparam1 列(其中有 989011, 100095, 100096 等数据)

我写的函数可以用,但是有没有更优化的方法来得到结果?

CREATE OR REPLACE FUNCTION find_option_func(p_balances IN VARCHAR2)
  RETURN NUMBER IS
  v_result NUMBER;
  ex EXCEPTION;
BEGIN
  FOR i IN (SELECT t.npararam1 FROM service_id_map t) LOOP
    BEGIN
      IF instr(p_balances, '|' || i.npararam1 || '|') > 0 THEN
        v_result := 1;
        EXIT;
      ELSE
        RAISE ex;
      END IF;
    EXCEPTION
      WHEN ex THEN
        v_result := 0;
    END;
  END LOOP;
  RETURN v_result;
END find_option_func;

你可以这样做:

CREATE OR REPLACE FUNCTION find_option_func(p_balances IN VARCHAR2)
  RETURN NUMBER IS
  v_result NUMBER;
BEGIN
  SELECT COUNT(*)
    INTO v_result
    FROM service_id_map t
   WHERE instr(p_balances, '|' || t.npararam1 || '|') > 0
     AND ROWNUM = 1;

  RETURN v_result;
END find_option_func;