执行SQL行:
SELECT *
INTO assignment_20081120
FROM assignment ;
对oracle中的数据库备份一个名为assignment的表给出了以下ORACLE错误: ORA-00905:缺少关键字
答案 0 :(得分:19)
除非ASSIGNMENT
表中有一行,ASSIGNMENT_20081120
是ASSIGNMENT%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。