次の SQL 行を実行します。
SELECT *
INTO assignment_20081120
FROM assignment ;
Oracleのデータベースに対して割り当てと呼ばれるテーブルをバックアップすると、次のORACLEエラーが発生します:ORA-00905:キーワードがありません
ASSIGNMENT
テーブルに単一の行があり、それASSIGNMENT_20081120
が type のローカル PL/SQL 変数でない限りASSIGNMENT%ROWTYPE
、これは望ましくありません。
新しいテーブルを作成し、既存のデータをその新しいテーブルにコピーしようとしていると仮定します
CREATE TABLE assignment_20081120
AS
SELECT *
FROM assignment
まず、次のように考えました。
「...Microsoft SQL Server では 新しいテーブルが自動的に作成されますが、Oracle では ステートメントを
SELECT...INTO
実行する前に手動で作成する必要があるようです...」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;
返事が遅くなりましたが、今日このリストに載ったばかりです!
CREATE TABLE assignment_20101120 AS SELECT * FROM assignment;
同じことをします。