加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle函数始终返回null

发布时间:2021-03-15 07:44:06 所属栏目:站长百科 来源:网络整理
导读:我不能让这个功能按照我的意愿行事.任何人都可以指出为什么它总是返回null而不是CURRENT_TIMESTAMP? CREATE OR REPLACE FUNCTION nowts RETURN TIMESTAMP ISvTimestamp TIMESTAMP;BEGIN SELECT type_date INTO vTimestamp FROM param_table WHERE param_tab

我不能让这个功能按照我的意愿行事.任何人都可以指出为什么它总是返回null而不是CURRENT_TIMESTAMP?

CREATE OR REPLACE FUNCTION nowts RETURN TIMESTAMP IS

vTimestamp TIMESTAMP;

BEGIN
  SELECT type_date
  INTO vTimestamp
  FROM param_table
  WHERE param_table = 3
  AND exists (
     SELECT *
     FROM param_table 
     WHERE param_table = 2
  );

  IF vTimestamp IS NULL THEN
    vTimestamp := CURRENT_TIMESTAMP;
  END IF;

  return vTimestamp;
END nowts;

现在,名为param_table的表中没有任何内容.

解决方法

如果从SQL调用函数并且该函数引发NO_DATA_FOUND,则会得到NULL.

NO_DATA_FOUND中的SQLCODE为100,而PL / SQL代码为-1403. Ref

正数不是错误,SQL不会将NO_DATA_FOUND的概念视为异常. SQL将其视为“无值”,即null.

create or replace function ret_dt return date is
begin
  raise no_data_found;
end;
/
Elapsed: 00:00:00.26
> select rownum,ret_dt from user_tables where rownum < 5;
         ROWNUM RET_DT
--------------- -----------------
           1.00
           2.00
           3.00
           4.00

您可能希望捕获它并返回特定值,或捕获它并引发用户定义的异常(取决于您想要发生的事情).

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读