2008-10-10 6 views
7

Tôi sắp xếp ra một loạt các tập lệnh SQL cho công ty của mình được viết bằng Oracle PL/SQL. Tôi bắt gặp một kịch bản thiết yếu với một dấu gạch chéo được đặt lạ ở gần đáy. Nó được kiểm tra vào CVS theo cách này. Đây có phải là lỗi cú pháp thuần túy hay không có chức năng nào đó mà tôi không biết. Các kịch bản hơi obfuscated:Đây có phải là ký tự gạch chéo trong một kịch bản Oracle PL/SQL không?

set serveroutput on size 2000; 
--PL/SQL block to link ISSN in serial base on a company's ISSN text file 

declare 
    cursor ItemCursor is 
     select issn is2 from web.obfuscated1 where issn is not null 
      union 
     select eissn is2 from web.obfuscated1 where eissn is not null; 

    cursor ItemCursor1(aIS varchar2) is 
     select obfuscated1_uid from web.obfuscated1 where group_num is null and issn in (
      select distinct issn from web.obfuscated1 where issn = aIS or eissn = aIS 
       union 
      select distinct eissn from web.obfuscated1 where issn = aIS or eissn = aIS 
     ) 
      union 
     select obfuscated1_uid from web.obfuscated1 where eissn in (
      select distinct issn from web.obfuscated1 where issn = aIS or eissn = aIS 
       union 
      select distinct eissn from web.obfuscated1 where issn = aIS or eissn = aIS 
     ); 

    cursor ItemCursor2(aIS9 varchar2) is 
     select obfuscated1_uid from web.obfuscated1 where issn in (
      select distinct issn from web.obfuscated1 where issn = aIS9 or eissn = aIS9 
       union 
      select distinct eissn from web.obfuscated1 where issn = aIS9 or eissn = aIS9 
     ) and group_num is null; 

    agroup  number(8); 
    processCount number(8); 

    ------------------------------------------------------ 
    -- MAIN BLOCK ----------------------------------- 
    ------------------------------------------------- 
begin 
    processCount := 0; 

    agroup := null; 
    for itemRec in ItemCursor loop 
     agroup := null; 
     begin 
      select group_num into agroup from web.obfuscated1 where issn in (
       select distinct issn from web.obfuscated1 where issn = itemRec.is2 or eissn = itemRec.is2 
        union 
       select distinct eissn from web.obfuscated1 where issn = itemRec.is2 or eissn = itemRec.is2 
      ) and group_num is not null and issn is not null and eissn is not null and rownum <= 1; 

     exception 
      when no_data_found then 
       agroup := null; 
      when others then 
       agroup := null; 
     end; 

     if agroup is not null then 
      for itemRec2 in ItemCursor2(itemRec.is2) loop 
       update web.obfuscated1 set group_num = agroup where obfuscated1_uid = itemRec2.obfuscated1_uid; 
       commit; 
      end loop; 
     else 
      processCount := processCount + 1; 
      for itemRec1 in ItemCursor1(itemRec.is2) loop 
       update web.obfuscated1 set group_num = processCount where obfuscated1_uid = itemRec1.obfuscated1_uid; 
       commit; 
      end loop; 
      commit; 
     end if; 
    end loop; 

    dbms_output.put_line('Total record read: ' || processCount); 
exception 
    when others then 
     dbms_output.put_line('ORA' || sqlcode); 
     dbms_output.put_line(substr(sqlerrm, 1, 255)); 
     dbms_output.put_line('ORA- Error during processing '); 
    end; 
/
exit; 

Trả lời

21

các dấu gạch chéo có a meaning:

thực thi gần đây nhất được thực hiện lệnh SQL hoặc khối PL/SQL là lưu trữ trong bộ đệm SQL. Bạn có thể nhập dấu gạch chéo (/) tại dấu nhắc hoặc tại dấu nhắc số dòng của lệnh nhiều dòng. Lệnh cắt giảm có chức năng tương tự như RUN, nhưng không không liệt kê lệnh.

5

các/ở cuối là nói với người phiên dịch để thực thi kịch bản nạp

về cơ bản bạn gõ những thứ sau đó gõ "/" và những gì bạn vừa gõ sẽ thực hiện

1

Nó không phải là lỗi. Nó thực thi kịch bản.

Điều này rất hữu ích khi bạn nối các tập lệnh khác nhau với nhau trong một tệp và muốn mỗi tác vụ riêng biệt thực thi trước tệp tiếp theo.

tức Tạo chức năng / Tạo thủ tục lưu trữ sử dụng các chức năng

Nếu không có dấu gạch chéo các thủ tục lưu trữ có thể được tạo ra với các lỗi hoặc không thể được tạo ra.

3

Cả dấu gạch chéo và "lối ra" khiến tôi nghi ngờ bạn có nghĩa vụ chạy tập lệnh này từ SQLPLUS. Bạn có thể gặp lỗi nếu bạn cố gửi nó cho Oracle theo cách khác. Trong trường hợp đó, chỉ cần loại bỏ cả hai.

6

Khi sử dụng Oracle bạn "trộn" ba ngữ pháp khác nhau.

  • SQL
  • PL/SQL
  • sqlplus (dòng lệnh client)

sqlplus có thể thực hiện/tiến trình SQL và báo cáo PL/SQL bằng cách gửi chúng vào máy chủ DB. Trong khi các lệnh sqlplus được giải thích bởi chính sqlplus.

Dấu chấm phẩy ";" không phải là một phần của ngữ pháp SQL và sqlplus nhận ra nó như là kết thúc của câu lệnh SQL. Trong khi đối với PL/SQL, nó là một phần của ngữ pháp và phải nói rõ ràng sqlplus rằng câu lệnh kết thúc ở đây và nên được thực hiện bằng cách sử dụng dấu gạch chéo.

Các lệnh sqlplus khác là "EXIT", "DEFINE" "VARIABLE" "IN" "SET <something>" (ngoại trừ SET ROLE).

Mặt khác, ví dụ: Toad nhận ra phần cuối của khối PL/SQL khi nó thấy một dòng trống.