运行 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 语句。 您发布的代码毫无用处。而且,它是无效的。 endselect 语句的末尾做了什么?如果您不使用其中任何一个,为什么要声明这么多参数?这只是令人困惑。样本数据肯定会有所帮助 - 简化它!最后,你为什么使用这个提示?是只是因为,还是……?如果你是初学者(看起来你是),你宁愿让 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 函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 加速长函数

PL/SQL 函数返回错误结果

帮助使用Dynamic PL/SQL,函数抛出异常

vsize 函数不能与 PL/SQL 中的修剪函数一起使用

从 PL/SQL 函数返回表 - 不正确的数据类型

自定义 SQL 函数 - PL/SQL:语句被忽略