Oracle错误:ORA-00905:缺少关键字

时间:2008-11-20 15:06:35

标签: sql oracle ora-00905

执行SQL行:

SELECT * 
  INTO assignment_20081120 
  FROM assignment ;

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

6 个答案:

答案 0 :(得分:19)

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

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

CREATE TABLE assignment_20081120
AS
SELECT *
  FROM assignment

答案 1 :(得分:6)

首先,我想:

  

“...在Microsoft SQL Server中   SELECT...INTO会自动创建   Oracle似乎是新表   要求您手动创建它   在执行SELECT...INTO之前   声明......“

但是在手动生成表格之后,它仍然无效,仍显示“缺少关键字”错误。

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

INSERT INTO assignment_20081120 SELECT * FROM assignment;

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

答案 2 :(得分: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;

答案 3 :(得分:0)

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

CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;

是否相同。

答案 4 :(得分:0)

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

示例:

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

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

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

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

答案 5 :(得分:0)

如果您在Oracle数据库中备份表。您可以尝试下面的语句。

CREATE TABLE name_table_bk
AS
SELECT *
  FROM name_table;

我正在使用Oracle Database 12c。