我写的代码是否正确,或者是否有更优化的方法来解决问题?
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;
我有一个 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;