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
。我编辑了我的答案,看看是否有帮助。