2010-06-11 12 views
6

Chỉ cần tự hỏi nếu có ai có thể giúp với điều này, tôi có hai câu lệnh PLSQL để thay đổi bảng (thêm trường bổ sung) và họ là như sau:Hai câu lệnh PLSQL có bắt đầu và kết thúc, chạy tốt một cách riêng biệt nhưng không cùng nhau?

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

Khi tôi chạy hai truy vấn những cách riêng biệt, không có vấn đề. Tuy nhiên, khi chạy cùng nhau như được hiển thị ở trên, Oracle cung cấp cho tôi một lỗi khi nó bắt đầu câu lệnh thứ hai:

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: 

Tôi giả định rằng điều này có nghĩa là câu lệnh đầu tiên không được kết thúc đúng ... có điều gì tôi nên đặt vào giữa các báo cáo để làm cho nó hoạt động đúng cách?

Trả lời

7

Có, bạn cần dấu gạch chéo / trên dòng sau mỗi end;.

16

Oracle có thể lấy một câu lệnh SQL hoặc khối ẩn danh PL/SQL tại một thời điểm. (Không giống như SQL Server có thể trừ một lô tại một thời điểm.) Vì vậy, bạn có một vài tùy chọn.

  1. Bó hai khối vô danh trong một khối ẩn danh:

    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. Cho công cụ mà bạn đang sử dụng để trình PL/SQL với Oracle để gửi hai khối riêng rẽ. Làm thế nào để làm điều này sẽ là công cụ cụ thể. Trong SQL * PLUS, một / trên một dòng riêng của mình sẽ thực hiện điều này:

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

người ta có thể đạt được bằng hai cách

1) chạy hai khối riêng biệt trong tập tin pl/sql.

2) trong khối chính bạn có thể chạy hai SBU-khối theo cách này:

bắt đầu // khối chính bắt đầu ..... [pl/sql lệnh] ...... cuối bắt đầu
....... [pl/sql lệnh] ....... cuối cuối // đích chính