2010-06-11 1 views
6

그냥 사람이 도움을 줄 수 궁금, 나는 (추가 필드를 추가) 테이블을 변경하기위한 두 PLSQL 문을 다음과 같이 그들은 :시작과 끝이있는 두 개의 PLSQL 문은 별도로 실행하지만 함께 실행하지 마십시오.

-- 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; 

나는 문제가 없는지, 별도로 두 개의 쿼리를 실행합니다. 위의 그림과 같이 실행할 때이 두 번째 문 시작할 때 그러나, 오라클은 나에게 오류를 제공합니다

Error report: 
ORA-06550: line 15, column 1: 
PLS-00103: Encountered the symbol "BEGIN" 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

나는이 제대로 종료되지 않은 첫 번째 문을 의미 있으리라 믿고있어이 ... 거기에 아무것도 내가해야이다 문이 제대로 작동하도록하기 위해 문 사이에 넣으시겠습니까?

답변

7

예, 각 end; 다음에 줄에 슬래시 /이 필요합니다.

16

오라클은 한 번에 하나의 SQL 문 또는 PL/SQL 익명 블록을 사용할 수 있습니다. (한 번에 배치를 제외 할 수있는 SQL Server와 달리) 몇 가지 옵션이 있습니다. 또 다른 익명의 블록 내에서

  1. 랩 두 익명 블록 :

    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을 제출하는 데 사용하는 도구를 말한다. 이렇게하는 방법은 도구에 따라 다릅니다. 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; 
    /
    
0

하나는 두 가지 방법으로

1

) PL/SQL 파일에 별도로 두 블록을 실행에 달성 할 수있다.

2) 메인 블록에이 방법으로 두 SBU 블록을 실행할 수 있습니다

는 ..... [PL/SQL 명령] 을 시작 // 메인 블록 시작 ...... 단부 는
....... [PL/SQL 명령] ....... 단부 단부 // 주 단부

시작
관련 문제