web-dev-qa-db-ja.com

Oracleエラー:ORA-00905:キーワードがありません

SQLの行の実行:

SELECT * 
  INTO assignment_20081120 
  FROM assignment ;

oracleのデータベースに対して割り当てと呼ばれるテーブルをバックアップすると、次のOracleエラーが表示されます。ORA-00905:キーワードがありません

20
test

ASSIGNMENTテーブルに単一行があり、ASSIGNMENT_20081120ASSIGNMENT%ROWTYPE型のローカルPL/SQL変数でない限り、これは望みのものではありません。

新しいテーブルを作成し、既存のデータをその新しいテーブルにコピーしようとしていると仮定します

CREATE TABLE assignment_20081120
AS
SELECT *
  FROM assignment
22
Justin Cave

まず、私は思った:

「... Microsoft SQL ServerではSELECT...INTOが自動的に新しいテーブルを作成しますが、OracleはSELECT...INTOステートメントを実行する前に手動で作成する必要があるようです...」

しかし、テーブルを手動で生成した後も、まだ機能せず、「キーワードがありません」というエラーが表示されます。

そこで、今回はあきらめて、最初に手動でテーブルを作成し、次に「クラシック」SELECTステートメントを使用して解決しました。

INSERT INTO assignment_20081120 SELECT * FROM assignment;

期待通りに機能しました。 SELECT...INTOを正しい方法で使用する方法についての説明を誰かが思いついたら、私は幸せです!

6
Uwe Keim

次のような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
Rene

これはOPの正確な質問に直接関連していませんが、クエリでOracleの予約語(私の場合はエイリアスIN)を使用すると同じエラーが発生することがわかりました。

例:

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

または、フィールド名としてクエリ自体にある場合

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

また、そのエラーがスローされます。これが誰かの助けになることを願っています。

0
logixologist

遅い答えですが、今日このリストに載りました!

CREATE TABLE assignment_20101120 AS SELECT * FROM割り当て;

同じことをします。

0
David