-1

次のSQLクエリを実行してテーブルにデータを入力しようとしていますが、実行できません...アイデアはありますか?

BEGIN
FOR n in 21500..21600 LOOP

   if mod(n,2)=0
   then    
       dbms_output.put_line(n||'even');
   else
      insert into port_mapping(APP,VERSION,BUSINESS,CRITICAL,SUPPORTED,TYPE,PORT,NOTE)
      values("SDS","1","No","Yes","Yes","Server",n,"NA");
   end if;
END LOOP;
COMMIT;
END;

エラーが発生しています

PL/SQL: ORA-00984: ここでは列を使用できません ORA-06550: 行 8、列 7: PL/SQL: SQL ステートメントは無視されました

4

1 に答える 1

2

値は二重引用符で囲まれているため、Oracle に関する限り、値は (列) 識別子になります。一重引用符が必要です:

...
  values('SDS','1','No','Yes','Yes','Server',n,'NA');
...

SQLフィドル

これには PL/SQL は必要ありません。select-connect-by でより単純な insert-into を使用できますが、演習としてこれを行っているかどうかはわかりません。

insert into port_mapping (APP,VERSION,BUSINESS,CRITICAL,SUPPORTED,TYPE,
    PORT,NOTE)
select 'SDS','1','No','Yes','Yes','Server',
    21500 + (level * 2) - 1,'NA'
from dual
connect by level < 51;

SQLフィドル

于 2013-08-02T23:31:57.837 に答える