Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在oracle中运行包含一些日期操作sql的过程_Oracle_Date_Stored Procedures_Date Conversion - Fatal编程技术网

如何在oracle中运行包含一些日期操作sql的过程

如何在oracle中运行包含一些日期操作sql的过程,oracle,date,stored-procedures,date-conversion,Oracle,Date,Stored Procedures,Date Conversion,我在oracle中创建了一个过程,如下所示: create or replace PROCEDURE SP_X_AVERAGE ( profile out SYS_REFCURSOR, rx out SYS_REFCURSOR, ) as BEGIN open profile for select avg(to_number(profile_netassets)) AS netassets from

我在oracle中创建了一个过程,如下所示:

create or replace PROCEDURE SP_X_AVERAGE
(
    profile out SYS_REFCURSOR,
    rx out SYS_REFCURSOR,
)
as
BEGIN


  open profile for
        select
            avg(to_number(profile_netassets)) AS netassets
        from 
            fgp;


  open rx for
      select 
          avg(to_number(a_price)) as twr 
      from 
          r_x
      where 
            gq_date <= add_months(to_date(sysdate, 'mm/dd/yyyy'), -12);


END SP_X_AVERAGE;
如果在第二个sql中删除where条件,则它将成功运行

在同一过程中使用sql修改会话也不起作用

请帮忙


我正在sql developer(UbuntuOneIRIC 11)中运行这个过程。

SYSDATE已经是一个日期,所以您不需要对它应用\u DATE()。然而,较新版本的Oracle能够容忍这些事情,并且能够优雅地处理它们

所以剩下的问题是
r\u x.gq\u date
:那是什么数据类型?如果它是一个字符串,那么很有可能其中包含的值不会转换为日期,或者最终与默认的NLS_格式不匹配


“我们必须将它保留为“VARCHAR2(40字节)”“它的日期如下:'1/2/2003'”

宾果。这与您的NLS\u日期\u格式相同吗?如果不是,则需要强制转换该列:

to_date(gq_date, 'mm/dd/yyyy')  <= add_months(sysdate, -12);

to_date(gq_date,'mm/dd/yyyyy')SYSDATE已经是一个日期,因此您不需要对其应用to_date()。然而,较新版本的Oracle能够容忍这些事情,并且能够优雅地处理它们

所以剩下的问题是
r\u x.gq\u date
:那是什么数据类型?如果它是一个字符串,那么很有可能其中包含的值不会转换为日期,或者最终与默认的NLS_格式不匹配


“我们必须将它保留为“VARCHAR2(40字节)”“它的日期如下:'1/2/2003'”

宾果。这与您的NLS\u日期\u格式相同吗?如果不是,则需要强制转换该列:

to_date(gq_date, 'mm/dd/yyyy')  <= add_months(sysdate, -12);

to_date(gq_date,'mm/dd/yyyyyy')将价格显式转换为数字看起来也很可疑——不可能所有内容都是字符类型,对吗?一个名为“r_x”的表是可疑的also@APC:由于某些原因,我们不得不将其保留为“VARCHAR2(40字节)”,其中的日期如下:“1/2/2003”。查询2在sql工作表中运行得非常好,但当我在使用sql developer.Drawerful的过程中执行它时,它会出错。因此,日期被存储为文本,并且以大于和小于运算符都无效的格式存储。您必须使用to_date()将列转换为日期,然后与之进行比较,还可以选择创建基于函数的索引以避免性能问题。是的,这是我的NLS_date格式:),有效。。谢谢……)显式转换为数字的价格看起来也很可疑——不可能所有东西都是字符类型,对吗?一个名为“r_x”的表是可疑的also@APC:由于某些原因,我们不得不将其保留为“VARCHAR2(40字节)”,其中的日期如下:“1/2/2003”。查询2在sql工作表中运行得非常好,但当我在使用sql developer.Drawerful的过程中执行它时,它会出错。因此,日期被存储为文本,并且以大于和小于运算符都无效的格式存储。您必须使用to_date()将列转换为日期,然后与之进行比较,还可以选择创建基于函数的索引以避免性能问题。是的,这是我的NLS_date格式:),有效。。谢谢……)