[SQL] CREATE OR REPLACE PROCEDURE Proc_CalTotalPrice() AS BEGIN UPDATE orders SET totalprice = (SELECT SUM(extendedprice * (1-discount) * (1+tax)) FROM lineitem WHERE orders.orderkey = lineitem.orderkey); [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PROCEDURE Proc_CalTotalPrice() AS BEGIN UPDATE orders SET totalprice = (SELE' at line 1
时间: 2023-07-03 09:15:52 浏览: 267
这段 SQL 语句有语法错误,可能是因为你在 MySQL 中使用了 Oracle 的语法。正确的 MySQL 存储过程语法应该是:
```
CREATE PROCEDURE Proc_CalTotalPrice()
BEGIN
UPDATE orders
SET totalprice = (
SELECT SUM(extendedprice * (1-discount) * (1+tax))
FROM lineitem
WHERE orders.orderkey = lineitem.orderkey
);
END;
```
请注意,MySQL 中使用 `BEGIN` 和 `END` 来定义存储过程的主体。此外,在 MySQL 中,你可能需要使用 `DELIMITER` 命令来设置自定义分隔符以避免语法错误。
相关问题
[SQL] CREATE OR REPLACE PROCEDURE Proc_CalTotalPrice4Customer2 (p_custname CHAR(25),OUT p_totalprice REAL) AS DECLARE L_custkey INTEGER; [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PROCEDURE Proc_CalTotalPrice4Customer2 (p_custname CHAR(25),OUT p_totalprice RE' at line 1
这个错误提示是因为你使用的是 MySQL 数据库,而不是 Oracle 数据库。在 MySQL 中,创建存储过程的语法是不同的。下面是一个在 MySQL 中创建存储过程的示例:
```
CREATE PROCEDURE Proc_CalTotalPrice4Customer2 (IN p_custname CHAR(25), OUT p_totalprice REAL)
BEGIN
DECLARE L_custkey INTEGER;
-- rest of the procedure code goes here
END
```
需要注意的是,MySQL 中的变量声明需要使用 `DECLARE` 关键字,并且存储过程的代码需要使用 `BEGIN` 和 `END` 包裹。另外,MySQL 中的存储过程参数需要使用 `IN` 或 `OUT` 关键字来指定参数的输入输出类型。
阅读全文