tags:

views:

1601

answers:

4

I'm sorting out a series of SQL scripts for my company written in Oracle PL/SQL. I came across an essential script with a strangely placed slash near the bottom. It is checked into CVS this way. Is this a pure syntax error or does it have some function I'm not aware of. The slightly obfuscated script:

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;
+2  A: 

the / at the end is to tell the interpreter to execute the loaded script

basicaly you type stuff then type "/" and what you just typed will execute

Eric
+5  A: 

The slash has a meaning:

Executes the most recently executed SQL command or PL/SQL block which is stored in the SQL buffer. You can enter a slash (/) at the command prompt or at a line number prompt of a multi-line command. The slash command functions similarly to RUN, but does not list the command.

EddieAwad
A: 

It is not an error. It executes the script.

It is useful when you concatenate various scripts together in one file and want each separate task to execute before the next one.

ie Create function / Create stored procedure that uses the function

Without the slash the stored procedure may get created with errors or may not get created.

tdyen
+1  A: 

Both the slash and the "exit" make me suspect you are supposed to run this script from SQLPLUS. You may get an error if you try to submit it to Oracle in some other way. In that case, just get rid of both.

Nuno G