如何在oracle中运行包含一些日期操作sql的过程
我在oracle中创建了一个过程,如下所示:如何在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
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格式:),有效。。谢谢……)