sql >> データベース >  >> RDS >> Oracle

Oracle 10gで、ループ内のユーザー入力を受け入れるにはどうすればよいですか?

    これは置換変数(sql * plus機能)であり、このようには機能しません。 undefine &slnoを呼び出す必要があります またはaccept slno ... 別の入力を受け取るようにしますが、これらもsqlplusであり、pl / sqlコマンドではないため、ループで呼び出すことはできません。

    おそらくここでできることは

    だけです
    INSERT INTO TEST_TABLE VALUES('&slno1',SYSDATE);
    INSERT INTO TEST_TABLE VALUES('&slno2',SYSDATE);
    INSERT INTO TEST_TABLE VALUES('&slno3',SYSDATE);
    INSERT INTO TEST_TABLE VALUES('&slno4',SYSDATE);
    INSERT INTO TEST_TABLE VALUES('&slno5',SYSDATE);
    

    更新 :幸い、独立した入力を受け入れる個別のシーケンシャルステートメントのリストを生成することでこれを回避できます:

    22:38:59 @> conn system/[email protected]_sandbox
    Connected.
    22:39:01 [email protected]_sandbox> @s:\test
    Enter value for var1: a
    Enter value for var2: b
    Enter value for var3: c
    22:39:06 [email protected]_sandbox> commit;
    22:39:11 [email protected]_sandbox> select * from test_table;
    
    COL1       COL2
    ---------- -------------------
    a          07.12.2012 22:39:10
    b          07.12.2012 22:39:11
    c          07.12.2012 22:39:11
    22:39:17 [email protected]_sandbox> get s:\test
      1  set echo off
      2  set define off
      3  set termout off
      4  set feedback off
      5  set timing off
      6  spool s:\123.sql
      7  begin
      8    for i in 1 .. 3 loop
      9      dbms_output.put_line('insert into test_table values(''&var'||i||''', sysdate);');
     10    end loop;
     11  end;
     12  /
     13  spool off
     14  set define "&"
     15  set termout on
     16* @s:\123.sql
    22:39:24  17  .
    22:39:58 [email protected]_sandbox> get s:\123.sql
      1  insert into test_table values('&var1', sysdate);
      2  insert into test_table values('&var2', sysdate);
      3* insert into test_table values('&var3', sysdate);
    22:40:04 [email protected]_sandbox>
    


    1. このデータファイルをMysqlテーブルにインポートするにはどうすればよいですか?

    2. ビューを介したMySQLTinybit(1)列

    3. intフィールドとしてのタイムスタンプ、クエリのパフォーマンス

    4. NULL列(0,3)による数値オーバーフロー