执行 SQL 行:
SELECT *
INTO assignment_20081120
FROM assignment ;
针对 oracle 中的数据库备份名为 assignment 的表给我以下 ORACLE 错误:ORA-00905:缺少关键字
除非表中有一行ASSIGNMENT
并且ASSIGNMENT_20081120
是类型为 的本地 PL/SQL 变量,ASSIGNMENT%ROWTYPE
否则这不是您想要的。
假设您正在尝试创建一个新表并将现有数据复制到该新表
CREATE TABLE assignment_20081120
AS
SELECT *
FROM assignment
首先,我想:
“......在 Microsoft SQL Server 中,
SELECT...INTO
自动创建新表,而 Oracle 似乎要求您在执行SELECT...INTO
语句之前手动创建它......”
但是手动生成表格后还是不行,依旧显示“缺少关键字”的错误。
所以我放弃了这次,先手动创建表,然后使用“经典”SELECT
语句解决:
INSERT INTO assignment_20081120 SELECT * FROM assignment;
哪个按预期工作。如果有人想出如何SELECT...INTO
正确使用的解释,我会很高兴!
您可以在 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;
虽然这与 OP 的确切问题没有直接关系,但我刚刚发现在查询中使用 Oracle 保留字(在我的情况下为 alias IN
)会导致相同的错误。
例子:
SELECT * FROM TBL_INDEPENTS IN
JOIN TBL_VOTERS VO on IN.VOTERID = VO.VOTERID
或者,如果它在查询本身中作为字段名称
SELECT ..., ...., IN, ..., .... FROM SOMETABLE
这也会引发该错误。我希望这可以帮助别人。
迟到的答案,但我今天才出现在这个名单上!
CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;
做同样的事情。
如果您备份 Oracle 数据库中的表。你试试下面的说法。
CREATE TABLE name_table_bk
AS
SELECT *
FROM name_table;
我正在使用 Oracle 数据库 12c。