SQLの行の実行:
SELECT *
INTO assignment_20081120
FROM assignment ;
oracleのデータベースに対して割り当てと呼ばれるテーブルをバックアップすると、次のOracleエラーが表示されます。ORA-00905:キーワードがありません
ASSIGNMENT
テーブルに単一行があり、ASSIGNMENT_20081120
がASSIGNMENT%ROWTYPE
型のローカルPL/SQL変数でない限り、これは望みのものではありません。
新しいテーブルを作成し、既存のデータをその新しいテーブルにコピーしようとしていると仮定します
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の予約語(私の場合はエイリアス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割り当て;
同じことをします。