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

OracleでSQLコマンドを動的に作成して実行する

    OracleのVARCHAR2 空の文字列をNULLとして扱います 。
    だから

    if tname != '' then
    

    と同じです

    if tname != NULL then
    

    NULLを返します TRUEの代わりに 定義されていないので。

    NULLを確認できます tname IS NOT NULL

    table_name user_tablesでは必須です ただし、このチェックは必要ありません。

    さらに2つのこと:

    1. %NOTFOUNDを確認します フェッチ直後
    2. 可能であれば、変数宣言に列参照を使用します(user_tables.table_name%TYPE

    したがって、コードは次のようになります。

    DECLARE
      tname user_tables.table_name%TYPE;
      CURSOR ctable IS SELECT table_name FROM user_tables;
    BEGIN
      OPEN ctable;
      LOOP
        FETCH ctable INTO tname;
        EXIT WHEN ctable%NOTFOUND;
        EXECUTE IMMEDIATE 'drop table ' || tname;
      END LOOP;
      CLOSE ctable;
    END;
    

    読みやすくするために暗黙カーソルを使用することもできます:

    BEGIN
      FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
        EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
      END LOOP;
    END;
    



    1. PostgreSQLのINとANY演算子

    2. 右結合/左結合または内部結合をいつ使用するか、またはどのテーブルがどちら側にあるかを判断する方法を決定するにはどうすればよいですか?

    3. 2つの@GeneratedValueフィールドでエラーが発生するJPAエンティティクラス

    4. 2つのテーブルから結合を削除します