【问题标题】:Creating table in Oracle yields a "Missing right parenthesis" error [duplicate]在 Oracle 中创建表会产生“缺少右括号”错误 [重复]
【发布时间】:2014-09-21 12:44:14
【问题描述】:

我正在尝试创建表,但不断收到以下错误消息:Warning: oci_execute(): ORA-00907: missing right parenthesis in ... on line 14

以下是处理这个问题的代码:

$stid = oci_parse($conn, 'CREATE TABLE tags (
                            id INT NOT NULL auto_increment, 
                            PRIMARY KEY(id), 
                            name VARCHAR2(64) NOT NULL)') 
        or die(oci_error($conn));
oci_execute($stid) or die(oci_error($conn));

第 14 行是oci_execute($stid) or die(oci_error($conn));

我是 Oracle 新手,不理解这个错误。我用谷歌在 StackOverflow 上也找到了很多帖子,但是这些答案都没有能够解决这个问题并正确地创建一个新表。

我在这里做错了什么?

【问题讨论】:

标签: sql oracle


【解决方案1】:

我相信您习惯于在 MySQL 中创建表。 Oracle 没有像 MySQL 那样的 auto_increment。

$stid = oci_parse($conn, 'CREATE TABLE tags (
                           id INT NOT NULL,
                           name VARCHAR2(64) NOT NULL),
                           PRIMARY KEY(id)') 

Oracle 使用对象 Sequence 创建一个 auto_increment 值。

假设您拥有正确的权限,如何创建序列的示例。

CREATE SEQUENCE  "CCAD"."AUTH_GROUP_SQ"      
MINVALUE 1 
MAXVALUE 999999999999 
INCREMENT BY 1 
START WITH 91 
CACHE 20 
NOORDER  NOCYCLE;

与插入触发器一起使用。

create or replace TRIGGER "AUTH_GROUP_TR"
BEFORE INSERT ON "AUTH_GROUP"
FOR EACH ROW
WHEN (new."ID" IS NULL)
BEGIN
    SELECT "AUTH_GROUP_SQ".nextval
    INTO :new."ID" FROM dual;
END;

【讨论】:

  • 我取出了 auto_increment 并且它工作了,但是我需要 id 列来自动递增。有类似的 Oracle 吗?
  • @DemCodeLines 您在帖子中链接到的问题告诉您如何在 Oracle 中实现最接近的东西。
  • @DemCodeLines - 如果您的版本是12c 或更高版本,请查看Oracle: how to create an identity column?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多