编写一个脚本,创建并调用一个名为 invoice_balance 的存储过程
Posted
技术标签:
【中文标题】编写一个脚本,创建并调用一个名为 invoice_balance 的存储过程【英文标题】:Write a script that creates and calls a stored procedure named invoice_balance 【发布时间】:2021-09-25 00:03:19 【问题描述】:编写一个脚本来创建和调用一个名为 invoice_balance 的存储过程。此存储过程应使用两个变量来存储 (1) Invoices 表中具有到期余额的所有发票的计数和 (2) 所有这些发票的到期余额总和。如果该总余额大于或等于 30,000 美元,则存储过程应显示一个结果集,该结果集显示两个变量的值。否则,该过程应显示一个结果集,该结果集显示如下消息:应付总额低于 30,000 美元。
SELECT sum(dueBalance) FROM invoice
DROP PROCEDURE IF EXISTS test; ;//drop if already test name procedure avilable
DELIMITER //
CREATE PROCEDURE test()
BEGIN
DECLARE countInvoice int; //declaring two variable countInvoice and sumdueBalance
DECLARE sumdueBalance decimal(10,8);
SELECT count(*) into countInvoice //put total count in countInvoice
FROM invoice;
SELECT sum(dueBalance) into sumdueBalance //put sum in sumdueBalance
FROM invoice;
if countprod>=30000 then
select countInvoice , sumdueBalance as col1; //col1 is name for new column
else
select 'Total balance due is less than $30,000.';
end if;
END //
DELIMITER ;
call test()
我编写了这个脚本,但它给了我一个错误 1064。 给定的模式 https://drive.google.com/file/d/1JAeBc2h_5-z7La6nizFgIRDL1pjKDDz2/view?usp=sharing
【问题讨论】:
我们可以如何帮助您? 错误代码:1064。您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 3 行的“DROP PROCEDURE IF EXISTS test”附近使用正确的语法 对不起,先生,但是 MySQL 和 SQL Server 是不同的 RDBMS。您能澄清一下您使用的是哪一个吗 我正在使用我的 SQL。 这段代码仍然给我错误,我不知道我做错了。这应该给我这样的东西。应付总余额不到 30,000 美元 【参考方案1】:我记得你的脚本中有 sql 语法错误,而这部分的选择不是它在 mysql 中的假设。
SELECT count(*) into countInvoice 可以在mysql中重写:
insert into countInvoice
select count(*) from invoice;
【讨论】:
以上是关于编写一个脚本,创建并调用一个名为 invoice_balance 的存储过程的主要内容,如果未能解决你的问题,请参考以下文章
如何创建脚本或 Flyway 可以配置为每次使用 SQL 回调调用它?
07_编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。