SQL表错误:缺少右括号

时间:2018-04-03 14:59:36

标签: sql oracle

// Filter queries map
List<String> queriesMapKeys = new ArrayList<>();
for (String element : elementFilter) {
    for (String type : typeFilter) {
        queriesMapKeys.add(queries.get(element + "_" + type + "_QUERY"));
    }
}
String[] queriesToJoin = queries.entrySet().stream().filter(e -> queriesMapKeys.contains(e.getKey())).collect(// I'm stuck here :-/);

String sqlQuery = String.join(" UNION ", queriesToJoin);

我的上表显示了此错误

  

错误报告 -   ORA-00907:缺少右括号   00907. 00000 - &#34;错过右括号&#34;

我无法理解缺少哪个右括号。

3 个答案:

答案 0 :(得分:2)

只需从最后一行删除逗号(,

这是您正确的代码(MySQL)

CREATE TABLE STUDENT
(
      STUDENT_NAME CHAR(20),
      FATHER_NAME CHAR(20),
      ENROLL_NO INT(12),
      PHONE_NO INT(12),
      EMAIL_ID CHAR(20),
      ADDRESS CHAR(20),
      COURSE CHAR(20),
      D_O_B DATE
);
oracle不支持

更新:: INT。用户NUMBER数据类型。

这是oracle的更新代码

CREATE TABLE STUDENT_TABLE
(
  STUDENT_NAME CHAR(20),
  FATHER_NAME CHAR(20),
  ENROLL_NO NUMBER(10),
  PHONE_NO NUMBER(10),
  EMAIL_ID VARCHAR(20),
  ADDRESS VARCHAR(20),
  COURSE VARCHAR(20),
  D_O_B DATE
);

答案 1 :(得分:1)

在我的结尾试过这个。这对我有用。

CREATE TABLE STUDENT_TABLE
(
  STUDENT_NAME CHAR(20),
  FATHER_NAME CHAR(20),
  ENROLL_NO NUMBER(10),
  PHONE_NO NUMBER(10),
  EMAIL_ID VARCHAR(20),
  ADDRESS VARCHAR(20),
  COURSE VARCHAR(20),
  D_O_B DATE
);

答案 2 :(得分:0)

甲骨文?摆脱CHAR和VARCHAR数据类型并使用 VARCHAR2

SQL> CREATE TABLE STUDENT
  2    ( STUDENT_NAME VARCHAR2(20),
  3      FATHER_NAME  VARCHAR2(20),
  4      ENROLL_NO    NUMBER(12),
  5      PHONE_NO     NUMBER(12),
  6      EMAIL_ID     VARCHAR2(20),
  7      ADDRESS      VARCHAR2(20),
  8      COURSE       VARCHAR2(20),
  9      D_O_B        DATE
 10  );

Table created.

SQL>

除此之外,该表没有定义主键,并且 - 在我看来 - 它应该。一些NOT NULL约束(例如,在STUDENT_NAME上)可能是一个不错的选择。

再想一想,为何选择STUDENT_NAME?它不是规范化 - 应该分成(至少)STUDENT_FIRST_NAME和STUDENT_LAST_NAME。

某人(@Vikash,3小时前发布消息))表示Oracle不支持INT数据类型;好吧,确实如此,但你宁愿使用NUMBER:

SQL> create table test
  2    (phone_no int);

Table created.

但你无法设定其精确度:

SQL> create table test_2
  2    (phone_no int(12));
  (phone_no int(12))
               *
ERROR at line 2:
ORA-00907: missing right parenthesis


SQL>

所以 - 在您的代码中 - 使用INTNUMBER(12),但要注意意外的陷阱(即舍入),例如

SQL> create table test
  2    (num1 int,
  3     num2 number(12));

Table created.

SQL> insert into test values (123.456, 123.456);

1 row created.

SQL> select * From test;

      NUM1       NUM2
---------- ----------
       123        123

SQL>