【问题标题】:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versionERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册
【发布时间】:2021-12-03 08:49:02
【问题描述】:

我正在尝试在 MySQL 中执行 PL/SQL 语句。但是,当我尝试创建表时,它会显示语法错误。我收到以下错误

CREATE TABLE supplier(supid NUMBER(5) PRIMARY KEY, suppname VARCHAR2(15));
ERROR 1064 (42000): 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 'NUMBER(5) PRIMARY KEY, suppname VARCHAR2(15))' at line 1

完整代码如下:

DROP TABLE supplier; 
DROP SEQUENCE practical2_sequence; 
*/ 
CREATE TABLE supplier(supid NUMBER(5) PRIMARY KEY, suppname VARCHAR2(15)); 
CREATE SEQUENCE practical2_sequence START WITH 1 MAXVALUE 100; 
BEGIN 
LOOP 
INSERT INTO supplier VALUES(practical2_sequence.NEXTVAL, 1); 
EXIT WHEN practical2_sequence.CURRVAL >= 100; 
END LOOP; 
END; 
/ 
SELECT * FROM supplier;

帮帮我,因为我在 MySQL 方面没有经验。

【问题讨论】:

  • NUMBER 不是有效的数据类型。那应该是INT(5)
  • PL/SQL 用于 Oracle,而不是 MySQL。
  • MySQL 没有SEQUENCE。您使用 AUTO_INCREMENT 属性声明 ID。
  • mysql中没有varchar2或number。不过有一个 varchar 和 numeric。

标签: mysql


【解决方案1】:

您似乎正在尝试在 MySQL 中使用 Oracle 语法。

MySQL 没有序列,它使用列的AUTO_INCREMENT 属性。插入时,要么将NULL分配给列,要么将其排除在列列表之外,它将获得序列中的下一个值。

MySQL 没有NUMBER 数据类型,它使用INT。它没有VARCHAR2,只有VARCHAR

DECLARE counter INT DEFAULT 0;

DROP TABLE IF EXISTS supplier; 
CREATE TABLE supplier(
    supid INT(5) PRIMARY KEY AUTO_INCREMENT,
    suppname VARCHAR(15)
);
WHILE counter < 100 DO
    INSERT INTO supplier (suppname) VALUES('1');
END WHILE;

请注意,变量声明和WHILE 循环只能在存储过程中使用,不能用作普通查询。

【讨论】:

  • DECLARE 只能在复合语句中使用,并且必须放在块中任何其他语句之前。
猜你喜欢
  • 2019-11-22
  • 2018-11-09
  • 2018-04-04
  • 2017-09-12
  • 2014-03-14
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2017-11-22
相关资源
最近更新 更多