1

我创建了一个 oracle 过程,它正在使用 oracle SQL 编辑器。
我想在水晶报表中使用该过程。
从数据库专家中,我选择了该过程并且出现了一条错误消息:

==============================
查询引擎错误:'ADO 错误代码:0x
来源:OraOLEDB
描述:ORA-01850:小时必须在 0 和 23 之间
ORA-06512:在“NPLS.PROC_YEARLYACTIVELIST2”,第 19 行
ORA-06512:在第 1 行本
机错误:'
==================== ==========

我这样声明变量:
==============================
str INT;
inv_date 日期;
==============================

过程如下,
================ ==============
创建或替换过程 PROC_YEARLYACTIVELIST2(in_year IN VARCHAR)
AS

ctr INT;
字符串整数;
curr_rowid VARCHAR2(50);
inv_date 日期;

开始从TBLACTIVELISTYEARLY2

中删除;
ctr := 1;
FOR ctr IN 1..12
LOOP

IF ctr = 1 THEN
str := '01';
inv_date := to_date('31-01-' || in_year || '23:59:59', 'DD-MM-YYYY HH24:MI:SS');
万一;
结尾;
/
===============================

我一直在尝试解决这个问题很长时间,但仍然找不到解决方案。
我希望你能帮助我。

谢谢!:)

-米歇尔(在职实习生)

4

3 回答 3

2

一种可能性是 in_year 没有被 Crystal 传入或作为 NULL 传入。

请验证这一点。您可以添加此代码作为快速检查:

  if (trim(in_year) is null) or length(in_year != 4))
  then
    raise_application_error(-20000, 'year is invalid: '  || in_year);
  end if;
 inv_date := to_date('31-01-' || in_year || ' 23:59:59', 'DD-MM-YYYY HH24:MI:SS');

那会抛出什么错误?

好像年份是空的,我们会得到那个错误:

SQL> declare
  2    inv_date DATE;
  3     in_year varchar2(42) ;
  4  begin
  5   inv_date := to_date('31-01-' || in_year || ' 23:59:59', 'DD-MM-YYYY HH24:MI:SS');
  6  end;
  7  /
declare
*
ERROR at line 1:
ORA-01850: hour must be between 0 and 23
ORA-06512: at line 5
于 2013-02-08T13:34:09.820 回答
1

该功能有效且有效。格式掩码中的年份和小时之间有一个多余的破折号。Oracle 应该能够忽略这一点,但也许 Crystal 不能:如果只是为了从查询中消除它,清理它肯定是值得的。

如果不是这样,那么唯一可能的就是in_year. 你能把它写到跟踪文件中看看它是什么吗?

或者,这是一种更复杂但可能不那么不稳定的方式来获得相同的日期时间:

last_day(trunc(to_date( in_year, 'YYYY') , 'YYYY') ) + (86399/86400)

                          ^  first day of current month
          ^ first day of current year
 ^ last day of month
                                                        ^ last second of the day  
于 2013-02-08T09:36:13.273 回答
1

检查您的数据库 nls 时间设置。我认为这与您的水晶报告设置不同。

如果您需要更改 nls 设置,请使用此查询-- alter session set nls_date_format ='your date format here';

于 2013-02-10T15:47:54.850 回答