Oracle 我的sql过程有什么问题

Oracle 我的sql过程有什么问题,oracle,plsql,Oracle,Plsql,我的程序如下 CREATE OR REPLACE PROCEDURE updateWEEK_SALES_REPORTS ( p_start IN WEEK_SALES_REPORT.StartDate%TYPE, p_end IN weekly_sales_report.EndDate%TYPE) IS BEGIN UPDATE WEEK_SALES_REPORT SET ComAmount = SaleAmount*ComRate WHERE (StartDate-E

我的程序如下

CREATE OR REPLACE PROCEDURE updateWEEK_SALES_REPORTS

(   p_start IN WEEK_SALES_REPORT.StartDate%TYPE,
     p_end IN weekly_sales_report.EndDate%TYPE)

IS

BEGIN


 UPDATE WEEK_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;
/

但显示错误是错误的

7/3 PL/SQL:忽略SQL语句

7/10 PL/SQL:ORA-00909:参数数无效


是的,@Jacob H是对的,
CONCAT
只接受两个参数。改用
|
,虽然比您的版本更难看:

SELECT 'The commission amount for report ' || ReportID ||
       ' has been updated to ' || ComAmount || ' dollars, which is' ||
        ComRate || '% of the total sale amount of ' || SaleAmount ||
       ' dollars.' ...
此外,您需要
it
选择为
一些变量,如f.i

SELECT ... INTO myvar FROM DUAL; 

我很确定你是想把你的信息打印到控制台上。为此,您需要
dbms\u输出

CREATE OR REPLACE PROCEDURE updateWEEK_SALES_REPORTS
(   p_start IN date,
     p_end IN date)
IS

BEGIN

 UPDATE WEEK_SALES_REPORT SET ComAmount = SaleAmount*ComRate WHERE (StartDate-EndDate) = (p_start-p_end);

 dbms_output.put_line('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;

因为您正在Oracle中运行此操作,但已使用sql server标记此操作。您实际使用的是哪种DBMS?我第一次问问题时实际上使用了sqlplus,可能会出错。我相信Oracle concat只会使用2个参数,所以您需要嵌套它们。但是如果我没有弄错的话,双管
|
也应该这样做。0/0 PL/SQL:编译单元分析终止2/16 PLS-00201:标识符“WEEK_SALES_REPORT.STARTDATE”必须声明为iduno错误的意思是什么噢,对不起-我认为您不能将过程参数声明为相对类型,您必须使用显式类型,如
date
。我编辑了我的答案,看看是否有帮助。