SQL 过程语句被忽略
Posted
技术标签:
【中文标题】SQL 过程语句被忽略【英文标题】:SQL Procedures Statement ignored 【发布时间】:2018-05-29 21:07:28 【问题描述】:我想编写一个程序,将两个日期作为输入(一个持续时间)并更新开始日期在此持续时间范围内的每个周报告的佣金金额。佣金金额是销售额和佣金率(%)相乘的结果。
CREATE OR REPLACE PROCEDURE updateweekly_sales_report
(p_start IN WEEKLY_SALES_REPORT.StartDate%TYPE, p_end IN
weekly_sales_report.EndDate%TYPE)
IS
BEGIN
UPDATE WEEKLY_SALES_REPORT SET ComAmount = SaleAmount*ComRate where
(StartDate-EndDate) = (p_start- p_end);
SELECT concat('The commission amount for report ',ReportID,' has been updated
to ',ComAmount,' dollars,
which is',ComRate,'% of the total sale amount of ',SaleAmount,' dollars.')
COMMIT;
END;
/
BEGIN
updateweekly_sales_report('2018-04-02','2018-04-08');
END;
/
我有两个错误 行/列错误
6/1 PL/SQL:忽略 SQL 语句 6/8 PL/SQL:ORA-00909:参数数量无效
【问题讨论】:
孤独的SELECT concat...
(没有目标也没有尾随;
)应该做什么?而且您知道 WHERE (StartDate-EndDate) = (p_start- p_end)
将匹配日期的 difference 相等的所有行(这应该是全部,如果您没有所有周的天数不同.. .)?
您使用的是什么类型的数据库? (Oracle、sqlServer 等)
【参考方案1】:
'2018-04-02'
和 '2018-04-08'
是字符串,而不是日期。要传入实际的 DATE
类型,您需要使用 TO_DATE
函数将字符串转换为日期:
BEGIN
updateweekly_sales_report(TO_DATE('2018-04-02', 'YYYY-MM-DD'),
TO_DATE('2018-04-08', 'YYYY-MM-DD'));
END;
或者您可以使用日期文字:
BEGIN
update_weekly_sales_report(DATE '2018-04-02',
DATE '2018-04-08');
END;
祝你好运。
【讨论】:
以上是关于SQL 过程语句被忽略的主要内容,如果未能解决你的问题,请参考以下文章
ORA -00909 //sql 语句被忽略 ...过程创建时出现编译错误
ORACLE:错误错误(6,3):PL/SQL:SQL 语句被忽略和错误(8,3):PL/SQL:ORA-00933:SQL 命令未在过程中正确结束