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 命令未在过程中正确结束

Oracle 终止会话过程

自定义 SQL 函数 - PL/SQL:语句被忽略

PL/SQL:PLS-00382:表达式类型错误。语句被忽略

Oracle 函数不是过程或未定义。语句被忽略