【问题标题】:How to print an output message in SQL oracle if a condition within a function is not met如果不满足函数中的条件,如何在 SQL oracle 中打印输出消息
【发布时间】:2022-01-15 21:14:41
【问题描述】:

如果报销请求未获批准,如何向函数添加输出消息?

这是我的函数的代码:

create or replace FUNCTION reimbursement_check(CREATIONDATE DATE) 
RETURN  DATE
IS
M_DATE DATE ;
BEGIN 
SELECT UpdateDate
      INTO M_DATE
      FROM REIMBURSEMENTREQUEST
      WHERE ReimbursementStatus = 'APPR'
AND UpdateDate = CREATIONDATE;
M_DATE := CREATIONDATE + 7;
RETURN M_DATE;
END;

【问题讨论】:

  • 报销状态将不等于“NOTA”,因为您在 WHERE 子句中指定了报销状态 = 'APPR'。如果要报告没有返回批准的记录,可以使用 WHEN SQL%NOTFOUND dbms_output 等
  • 你说得对,这绝对可以。我才发现我说的不是更具体,还有另外一种状态。哪个是提交状态。我认为当只有 2 个状态时,WHEN SQL%NOTFOUND dbms_output 等效果更好。 SUBMITTEED 状态会改变吗?对不起,如果我问的是简单的问题。我刚接触 SQL。
  • 一般来说,你的想法是个坏主意。如果有人使用无法显示 dbms_output.put_line 结果的工具(例如 Oracle Apex、Oracle Forms...),则没有人会看到任何“消息”。我猜最终用户不会从 SQL*Plus 或 SQL Developer 调用该函数。因此,您宁愿找到另一种选择。由于函数返回 DATE 数据类型,您 - 显然 - 不能返回该消息(因为它是一个字符串)。此外,SELECT 语句甚至没有检查“ReimbursementStatus” - 它用于 WHERE 子句。恐怕这里有很多问题。
  • 是的,明白了。在这种情况下,我可以使用 apex_application.g_print_success_message := 代替。
  • 是关于在 Apex 中“打印”某些内容(我根本不知道)还是从 PL/SQL 函数返回某些内容(我非常熟悉)的问题?

标签: oracle function plsql output


【解决方案1】:

您是否尝试过类似的方法:

CREATE OR REPLACE FUNCTION reimbursement_check(p_creation_date DATE) 
RETURN  DATE
IS
  l_date   DATE;
  l_status REIMBURSEMENTREQUEST.ReimbursementStatus%TYPE;
BEGIN
  BEGIN

    SELECT UpdateDate, ReimbursementStatus 
      INTO l_date, l_status
      FROM REIMBURSEMENTREQUEST
     WHERE UpdateDate = p_creation_date;

  EXCEPTION WHEN no_data_found THEN
    NULL; --or however it should be handled
  END;

  IF l_status = 'NOTA' THEN
    apex_error.add_error(
      p_message => 'Not approved for receiving a reimbursement check', 
      p_display_location => apex_error.c_inline_in_notification);
  END IF;

  RETURN p_creation_date + 7;
END;
/

【讨论】:

  • 不,我没有。谢谢 Gnqz,这超出了我的想象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多