【发布时间】:2020-07-05 22:49:41
【问题描述】:
我正在尝试使用一些测试数据运行以下函数。当我通过 in_sales_model = 'C7.1' OR 'C3.2' 它失败了。当我通过“C32”或“C27”时,它会正确执行。我需要更改什么功能才能接受“C7.1”或类似的功能?
create or replace FUNCTION GET_VALID_ENG_MODEL_CSQ_1
(in_sales_model in varchar ,in_mkt_segment_code in varchar, in_PRODUCT_TYPE in varchar, in_duty in varchar,in_emison_ind in varchar)
RETURN VARCHAR2
IS tmp_eng_model_eomp VARCHAR2(32767);
BEGIN
select /*+ optimizer_features_enable('11.2.0.3') */ distinct cic_model into tmp_eng_model_eomp
from fbp_eng_mdl_ref
where
PRODUCT_STATUS ='NEW'
end;
RETURN tmp_eng_model_eomp;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return '';
WHEN OTHERS THEN
return '';
RAISE;
END GET_VALID_ENG_MODEL_CSQ_1;
【问题讨论】:
-
欢迎来到 SO 社区。你到底得到了什么?请查看How to Ask。将其作为您问题的模板,极大地提高了您获得满意答案的机会。您需要发布表定义示例数据和预期结果。全部为文本 - 无图像和预期结果。
-
一个建议(无论如何测试),删除异常块,让任何异常传播到函数之外。如所写,如果抛出异常,您的代码将捕获并丢弃它。顺便说一句,您在 ON OTHERS 中的 raise 语句将永远不会执行,函数执行会立即终止,并使用之前的 return 语句。
-
您发布的代码毫无用处。而且,它是无效的。
end在select语句的末尾做了什么?如果您不使用其中任何一个,为什么要声明这么多参数?这只是令人困惑。样本数据肯定会有所帮助 - 简化它!最后,你为什么使用这个提示?是只是因为,还是……?如果你是初学者(看起来你是),你宁愿让 Oracle 弄清楚如何执行你编写的代码。
标签: function plsql parameters