Является ли этот символ косой черты в сценарии Oracle PL/SQL ошибкой?

Я сортирую серию SQL-скриптов для моей компании, написанных на Oracle PL / SQL. Я наткнулся на основной сценарий со странно расположенной косой чертой внизу. Он проверяется в CVS таким образом. Это чистая синтаксическая ошибка или у нее есть какая-то функция, о которой я не знаю. Слегка запутанный сценарий:

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;

5 ответов


Слэш есть значение:

выполняет последнее выполненное Команда SQL или блок PL / SQL, который хранится в буфере SQL. Вы можете введите косую черту (/) по команде подскажите или по номеру строки подскажите многострочная команда. Команда slash функции аналогично RUN, но делает не перечислять команду.


при использовании Oracle вы "смешиваете" три разных грамматики.

  • SQL
  • PL / SQL
  • для sqlplus (клиент командной строки)

sqlplus может выполнять/обрабатывать операторы SQL и PL/SQL, отправляя их на сервер БД. В то время как команды sqlplus интерпретируются самим sqlplus.

точка с запятой ";" не является частью грамматики SQL, и sqlplus распознает ее как конец инструкции SQL. В то время как для PL / SQL это часть грамматика и должны явно сообщить sqlplus, что оператор заканчивается здесь и должен быть выполнен с помощью Слэша.

другие команды sqlplus - "EXIT", "DEFINE", "VARIABLE", "PRINT", "SET " (кроме SET ROLE).

с другой стороны, жаба, например, распознает конец блока PL/SQL, когда видит пустую строку.


/ в конце должен сказать интерпретатору, чтобы выполнить загруженный скрипт

basicaly вы набираете материал, затем набираете"/", и то, что вы только что набрали, будет выполняться


как косая черта, так и" выход " заставляют меня подозревать, что вы должны запустить этот скрипт из SQLPLUS. Вы можете получить сообщение об ошибке, если попытаетесь отправить его Oracle каким-либо другим способом. В таком случае, просто избавьтесь от обоих.


Это не ошибка. Он выполняет сценарий.

Это полезно, когда вы объединяете различные сценарии вместе в одном файле и хотите, чтобы каждая отдельная задача выполнялась до следующей.

ie создает функцию / Создайте хранимую процедуру, использующую функцию

без косой черты хранимая процедура может быть создана с ошибками или не может быть создана.