gpt4 book ai didi

mysql - 很难在 SQL 中创建过程

转载 作者:行者123 更新时间:2023-11-29 04:16:44 25 4
gpt4 key购买 nike

我需要为类创建一个过程,但我认为书中的 sql 版本很旧。例如,我认为我不能像书上说的那样使用“创建或替换”,而是使用“创建”、“删除”、“创建”,但这超出了范围。

我的问题是我在设置 %TYPE 时遇到问题。我使用 WAMP,我在 Notepad++ 中创建了程序,并将其粘贴到控制台。然后我打开 phpmyadmin,将其粘贴到查询窗口中,结果得到了更详细的错误消息。书籍:Phil Pratt 和 Mary Last 的“SQL 指南”,第 9 版 https://www.amazon.com/Guide-SQL-Philip-J-Pratt/dp/111152727X . Book 有 TAL Distributers、SOLARIS comdominium group 和 COLONIAL adventure tours 数据库,它可以帮助任何人。讲师提供了用于创建数据库的 sql 文件以节省时间。这是最后一章,ch.8 创建代码:

delimiter ;;
use tal;;
CREATE PROCEDURE CHANGE_ITEM_PRICE(I_ITEM_NUM IN item.item_num%TYPE, I_NEW_PRICE IN item.price%TYPE) AS
BEGIN
UPDATE item SET price = I_NEW_PRICE
WHERE item_num = I_ITEM_NUM;
END;;
delimiter ;

2 个错误:

Unrecognized data type. (near "IN" at position 56)

还有一个用于位置 91。

有什么想法吗?我不想在这里被喂食,我只需要一点指导。

编辑:谢谢@Bill Karwin。更正后的工作语法如下:

delimiter ;;
use tal;;
CREATE PROCEDURE CHANGE_ITEM_PRICE(IN I_ITEM_NUM char(4), IN I_NEW_PRICE decimal(6,2))
BEGIN
UPDATE item SET price = I_NEW_PRICE
WHERE item_num = I_ITEM_NUM;
END;;
delimiter ;

最佳答案

I_ITEM_NUM IN item.item_num%TYPE

这不是 MySQL 的有效过程参数声明。您必须使用 INT 或 DATE 或 VARCHAR(length) 或其他已知类型来命名类型。 MySQL 没有像您展示的那样动态查询命名列类型的语法。

出于好奇,您是从哪里获得该语法的?它是其他品牌的 SQL 数据库的一部分吗?我以前从未见过它。


啊哈,我找到了:

https://www.postgresql.org/docs/current/static/sql-createfunction.html说:

The type of a column is referenced by writing table_name.column_name%TYPE. Using this feature can sometimes help make a function independent of changes to the definition of a table.

那在 PostgreSQL 文档中。 PostgreSQL 和 MySQL 不是同一种软件,并且有许多语法和功能示例,它们各自具有对方所没有的。

Oracle 也支持此语法:%TYPE attribute .实际上,我假设 Oracle 在 PostgreSQL 之前就这样做了。


回复你的评论:

var IN char(4)" does not work either

您说您对一些指导感兴趣。最简单的指导是,当您学习新语法时,阅读引用文档会有所帮助。 :-)

在过去的 16 年里,我经常使用 MySQL。我经常在 MySQL session 和用户组中发表演讲。我是 published author .当我做一些我不是很熟悉的事情时,我什至会打开文档页面作为第一步。

此处:http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

声明过程参数时注意,是IN param_name type,不是param_name IN type


now the error is "syntax near ' AS....'

同样,请参阅文档。 MySQL 的存储过程语法中没有 AS。这也是 Oracle 语法。

如果您要使用 MySQL 而不是 Oracle,则可能需要购买另一本书。例如,我建议 MySQL Stored Procedure Programming: Building High-Performance Web Applications in MySQL .

但老实说,我根本不喜欢在 MySQL 中使用存储过程。 MySQL对存储过程的实现远不如Oracle。 MySQL 过程没有包或库,没有过程调试器,它们没有被编译,也不能很好地扩展。

大多数使用 MySQL 的开发人员在他们的应用程序代码中放置了更多的逻辑而不是存储过程。这使他们能够将性能扩展到众多应用服务器,而不是在数据库服务器上堆积负载。

关于mysql - 很难在 SQL 中创建过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com