oracle - 日志返回一个有趣的函数的结果
问题描述
我有一个返回期限保护金额的函数,但是我拥有的代码,系统返回错误。
CREATE OR REPLACE FUNCTION moneysaving
RETURN number
IS
moineysaving_p number(10);
BEGIN
select customer_id , case
when periods_id = "TK12" then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =12
then TRUNC(money *(1+0.063/365*365))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >12 || TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <24
then TRUNC((money *(1+0.063/365*365))+(money *(1+0.003/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=24
then TRUNC((money *(1+0.063/365*365))+(money *(1+0.06/365*365)))
end
when periods_id = "TK6" then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =6
then TRUNC(money *(1+0.054/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >6 || TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <12
then TRUNC((money *(1+0.054/365*365))+(money *(1+0.3/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=12
then TRUNC((money *(1+0.054/365*365))+(money *(1+0.054/365*365)))
end
when periods_id = "TK3" then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =3
then TRUNC(money *(1+0.05/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >3|| TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <6
then TRUNC(money *(1+0.05/365*365))+(money *(1+0.003/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=6
then TRUNC(money *(1+0.05/365*365))+(money *(1+0.05/365*365)))
end
when periods_id = "TK1" then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =1
then TRUNC(money *(1+0.045/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >1 || TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <3
then TRUNC(money *(1+0.045/365*365))+money *(1+0.003/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=3
then TRUNC(money *(1+0.045/365*365))+money *(1+0.045/365*365)))
end
else TRUNC(money *(1+0.003/365*365))
end
from saving ;
RETURN moineysaving_p;
END;
你有一些钱存入银行的期限,你来按期限取钱,然后计算你在该期限内存款时收到的金额,ora-00695,ora-001765
解决方案
ORA-01756: 带引号的字符串未正确终止。
使用单引号 '' 而不是双引号 ""。
CREATE OR REPLACE FUNCTION moneysaving
RETURN number
IS
moineysaving_p number(10);
BEGIN
select customer_id , case
when periods_id = 'TK12' then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =12
then TRUNC(money *(1+0.063/365*365))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >12 || TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <24
then TRUNC((money *(1+0.063/365*365))+(money *(1+0.003/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=24
then TRUNC((money *(1+0.063/365*365))+(money *(1+0.06/365*365)))
end
when periods_id = 'TK6' then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =6
then TRUNC(money *(1+0.054/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >6 || TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <12
then TRUNC((money *(1+0.054/365*365))+(money *(1+0.3/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=12
then TRUNC((money *(1+0.054/365*365))+(money *(1+0.054/365*365)))
end
when periods_id = 'TK3' then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =3
then TRUNC(money *(1+0.05/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >3|| TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <6
then TRUNC(money *(1+0.05/365*365))+(money *(1+0.003/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=6
then TRUNC(money *(1+0.05/365*365))+(money *(1+0.05/365*365)))
end
when periods_id = 'TK1' then
case
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) =1
then TRUNC(money *(1+0.045/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >1 || TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) <3
then TRUNC(money *(1+0.045/365*365))+money *(1+0.003/365*365)))
when TRUNC(MONTHS_BETWEEN (TO_DATE (sentdate, 'yyyy/mm/dd'), TO_DATE ( SYSDATE(), 'yyyy/mm/dd'))) >=3
then TRUNC(money *(1+0.045/365*365))+money *(1+0.045/365*365)))
end
else TRUNC(money *(1+0.003/365*365))
end
from saving ;
RETURN moineysaving_p;
END;
推荐阅读
- python - python如何从静态类型语言实现类型自由变量
- swift - 获取 tableview 单元格按钮以添加新的 tableview 单元格
- python-3.x - 是否可以在列表理解上进行字符串连接?
- python - 是否有任何支持 Python 3.8 的延迟微分方程 (DDE) 的 Python 库?
- ruby-on-rails - 如何使用 Rails 和 GraphQL 处理复杂的突变
- javascript - 将前置和后置事件触发器添加到 Pub-Sub 模式
- c - 一种动态计算传递给函数的不同数组大小的方法
- android - 样式未应用于最近的 google 材质按钮依赖项
- asp.net-core - 重启后Ocelot配置正在恢复
- git - 即使在 git lfs install 之后也无法 git push