问题描述
我已经在Cobol中作为嵌入式SQL编写了下面的查询。procobol编译器给予错误-
pls-00222: 此作用域中不存在带有 “to_date” 的函数
但是查询在oracle SQL developer中工作正常
注意: to_date是PAY_SUM表的一列。这是问题吗?如果是,那么解决方案是什么?
从付款中选择 *
其中ctrb_no = 94272317
和to_date(to_date,'YYYYMMDD')-add_months(to_date(from_date,'YYYYMMDD')),trunc (months_afen (to_date,'YYYYMMDD')),to_date(from_date,'YYYYMMDD') = 30
pls-00222: 此作用域中不存在带有 “to_date” 的函数
但是查询在oracle SQL developer中工作正常
注意: to_date是PAY_SUM表的一列。这是问题吗?如果是,那么解决方案是什么?
从付款中选择 *
其中ctrb_no = 94272317
和to_date(to_date,'YYYYMMDD')-add_months(to_date(from_date,'YYYYMMDD')),trunc (months_afen (to_date,'YYYYMMDD')),to_date(from_date,'YYYYMMDD') = 30
专家解答
我不熟悉Pro Cobol,但是有一个名为 “to_date” 的列似乎是一个可能的原因。指出了一些强烈建议的更改:
-将日期存储为日期,而不是字符串!那你就不用给他们约会了...
-不要对数据库对象名称使用保留字。将其重命名为其他名称。
假设您无法立即解决这些问题中的任何一个,则可以通过完全限定对 “to_date” 的引用来解决此问题。
这个函数是在standard中定义的,所以在函数调用之前放置 “sys.standard”,在列名之前放置表别名:
-将日期存储为日期,而不是字符串!那你就不用给他们约会了...
-不要对数据库对象名称使用保留字。将其重命名为其他名称。
假设您无法立即解决这些问题中的任何一个,则可以通过完全限定对 “to_date” 的引用来解决此问题。
这个函数是在standard中定义的,所以在函数调用之前放置 “sys.standard”,在列名之前放置表别名:
create table t (
to_date varchar2(10)
);
insert into t values ('20170101');
select * from t
where sys.standard.to_date(t.to_date, 'YYYYMMDD') = trunc(sysdate, 'y');
TO_DATE
20170101 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




