24

次の SQL 行を実行します。

SELECT * 
  INTO assignment_20081120 
  FROM assignment ;

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

4

6 に答える 6

29

ASSIGNMENTテーブルに単一の行があり、それASSIGNMENT_20081120が type のローカル PL/SQL 変数でない限りASSIGNMENT%ROWTYPE、これは望ましくありません。

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

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

まず、次のように考えました。

「...Microsoft SQL Server では 新しいテーブルが自動的に作成されますが、Oracle では ステートメントをSELECT...INTO実行する前に手動で作成する必要があるようです...」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 に答える
1

返事が遅くなりましたが、今日このリストに載ったばかりです!

CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;

同じことをします。

于 2010-11-10T14:14:23.183 に答える