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

beginとendを持つ2つのPLSQL文は、別々に正常に実行されますが、一緒に実行されませんか?

    Oracleは、一度に1つのSQL文またはPL/SQL匿名ブロックを受け取ることができます。 (一度にバッチを除外できるSQL Serverとは異なります。)したがって、いくつかのオプションがあります。

    1. 2つの匿名ブロックを別の匿名ブロック内にラップします:

      begin
        -- Make GC_NAB field for Next Action By Dropdown 
        begin 
        if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10, ))'; 
        elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or 
          'VARCHAR2' = 'VARCHAR2' then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))'; 
        else 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)'; 
        end if; 
        commit; 
        end; 
        -- Make GC_NABID field for Next Action By Dropdown 
        begin 
        if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(, ))'; 
        elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or 
          'NUMBER' = 'VARCHAR2' then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())'; 
        else 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)'; 
        end if; 
        commit; 
        end;
      end;
      
    2. PL / SQLをOracleに送信するために使用しているツールに、2つのブロックを別々に送信するように指示します。これを行う方法は、ツールによって異なります。 SQL * PLUSでは、/ 回線上でそれ自体がこれを達成します:

        -- Make GC_NAB field for Next Action By Dropdown 
        begin 
        if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10, ))'; 
        elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or 
          'VARCHAR2' = 'VARCHAR2' then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))'; 
        else 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)'; 
        end if; 
        commit; 
        end; 
        /
        -- Make GC_NABID field for Next Action By Dropdown 
        begin 
        if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(, ))'; 
        elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or 
          'NUMBER' = 'VARCHAR2' then 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())'; 
        else 
          execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)'; 
        end if; 
        commit; 
        end;
        /
      


    1. バックアップからのMySQLまたはMariaDBGaleraクラスターの完全な復元

    2. SQLで保持率を計算する方法は?

    3. V $ SQL_SHARED_CURSOR TOP_LEVEL_RPI_CURSOR

    4. SQLインデックスの概要