编写一个脚本,创建并调用一个名为 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 回调调用它?

进程环境详解---main函数调用

XLua系列讲解_XLua调用C#

可以从不同位置调用脚本时如何编写导入语句?

07_编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。

使用 Lisp:编写一个名为 myList 的 Common Lisp 函数,它创建以下列表并返回它