24

执行 SQL 行:

SELECT * 
  INTO assignment_20081120 
  FROM assignment ;

针对 oracle 中的数据库备份名为 assignment 的表给我以下 ORACLE 错误:ORA-00905:缺少关键字

4

6 回答 6

29

除非表中有一行ASSIGNMENT并且ASSIGNMENT_20081120是类型为 的本地 PL/SQL 变量,ASSIGNMENT%ROWTYPE否则这不是您想要的。

假设您正在尝试创建一个新表并将现有数据复制到该新表

CREATE TABLE assignment_20081120
AS
SELECT *
  FROM assignment
于 2008-11-20T15:12:28.513 回答
7

首先,我想:

“......在 Microsoft SQL Server 中, SELECT...INTO自动创建新表,而 Oracle 似乎要求您在执行SELECT...INTO 语句之前手动创建它......”

但是手动生成表格后还是不行,依旧显示“缺少关键字”的错误。

所以我放弃了这次,先手动创建表,然后使用“经典”SELECT语句解决:

INSERT INTO assignment_20081120 SELECT * FROM assignment;

哪个按预期工作。如果有人想出如何SELECT...INTO正确使用的解释,我会很高兴!

于 2009-09-28T06:34:04.270 回答
3

您可以在 PLSQL 块中使用 select into,如下所示。

Declare
  l_variable assignment%rowtype
begin
  select *
  into l_variable
  from assignment;
exception
  when no_data_found then
    dbms_output.put_line('No record avialable')
  when too_many_rows then
   dbms_output.put_line('Too many rows')
end;

此代码仅在分配中恰好有 1 行时才有效。通常,您将使用这种代码来选择由键号标识的特定行。

Declare
  l_variable assignment%rowtype
begin
  select *
  into l_variable
  from assignment
  where ID=<my id number>;
exception
  when no_data_found then
    dbms_output.put_line('No record avialable')
  when too_many_rows then
   dbms_output.put_line('Too many rows')
end;
于 2009-09-28T10:51:32.077 回答
2

虽然这与 OP 的确切问题没有直接关系,但我刚刚发现在查询中使用 Oracle 保留字(在我的情况下为 alias IN)会导致相同的错误。

例子:

SELECT * FROM TBL_INDEPENTS IN
JOIN TBL_VOTERS VO on IN.VOTERID = VO.VOTERID

或者,如果它在查询本身中作为字段名称

 SELECT ..., ...., IN, ..., .... FROM SOMETABLE

这也会引发该错误。我希望这可以帮助别人。

于 2017-10-10T20:27:06.007 回答
1

迟到的答案,但我今天才出现在这个名单上!

CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;

做同样的事情。

于 2010-11-10T14:14:23.183 回答
1

如果您备份 Oracle 数据库中的表。你试试下面的说法。

CREATE TABLE name_table_bk
AS
SELECT *
  FROM name_table;

我正在使用 Oracle 数据库 12c。

于 2020-11-02T10:25:07.077 回答