所以我已经完成了我的第一年编程,所以我对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发布了这个表定义的图像作为答案。只是为了每个人的目的而添加它。
EDIT2: 我只使用这些值作为示例,它们不是我在查询中使用的实际值,但现在我已经用实际值更新它们,但它没有任何区别...
答案 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;