INSERT INTO后SELECT语句不起作用

时间:2017-07-03 18:45:37

标签: sql oracle

所以我已经完成了我的第一年编程,所以我对sql了解了一些,但我似乎无法找到解决这个问题的方法。 我知道你可以在彼此之后执行声明;但是当我在插入[table]语句后尝试这样做时,它对我来说并不起作用。 到目前为止我已经尝试过了:

INSERT INTO employees(employee_id, last_name, email, hire_date, job_id)
VALUES(208, 'King', 'king@hotmail.com', sysdate, 'AC_MGR'); SELECT * FROM employees;

我总是得到一个错误,说第一个分号无效。 如果有人能解释为什么会这样发生,真的很感激。 此外,它只是执行此操作的SELECT语句,或者是INSERT INTO

之后的每个命令

编辑:

OP发布了这个表定义的图像作为答案。只是为了每个人的目的而添加它。

enter image description here

EDIT2: 我只使用这些值作为示例,它们不是我在查询中使用的实际值,但现在我已经用实际值更新它们,但它没有任何区别...

2 个答案:

答案 0 :(得分:1)

  

我知道你可以在彼此之后执行语句;

正如你所发现的,不,你不能。

使用Oracle,有两个语言要分开。 SQL,就像你正在做的那样,以及在包,函数,匿名PL / SQL块,触发器等中使用的PL / SQL。

在PL / SQL中,分号是一个语句终止符,可以在一行中间使用,在行上放置多个语句,就像普通语言一样。

在Oracle的SQL中,分号无效。令人困惑的是,客户端工具(例如SQLPlus)在行的末尾使用分号 作为SQL语句的终止符,但在语句之前删除了分号被发送到数据库服务器。客户端负责在SQL语句被服务器解析之前分离它们。在使用分号时,许多其他工具都遵循SQL * Plus的主导。

所以,SQL * PLus,看到insert对自己说,"一个SQL语句"然后读取,直到一行以分号结束。然后它将读取减去尾部分号的内容发送到数据库服务器以执行单个 SQL语句。 Oracle的SQL解析器不知道如何制作内部分号和扼流圈。

注意,在SQLPlus中可以使用set sqlterminator ...更改SQL语句终止符,但我很少看到它在实践中完成。

答案 1 :(得分:0)

请删除值子句和分号之间的两个语句,语句应如下: -

INSERT INTO employees(EMPLOYEE_ID, FIRST_NAME, JOB_ID)
VALUES(1, 'king', 'manager') SELECT * FROM employees;