运行 PL SQL 函数的问题
Posted
技术标签:
【中文标题】运行 PL SQL 函数的问题【英文标题】:Issues running the PL SQL function 【发布时间】: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 弄清楚如何执行你编写的代码。
【参考方案1】:
create or replace FUNCTION GET_VALID_ENG_MODEL_CSQ_1(in_sales_model in varchar2,
in_mkt_segment_code in varchar2,
in_PRODUCT_TYPE in varchar2,
in_duty in varchar2,
in_emison_ind in varchar2)
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';
RETURN tmp_eng_model_eomp;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return '';
END GET_VALID_ENG_MODEL_CSQ_1;
【讨论】:
您好,非常感谢您的尝试。我更正了代码,但仍然看到问题。请看截图。以上是关于运行 PL SQL 函数的问题的主要内容,如果未能解决你的问题,请参考以下文章