Я нашел этого персонажа, когда читал блог о pl sql << some text >>.

Я нашел этого персонажа из следующего блога http: //www.oracle-base. ru / article / 8i / collections-8i.php

4
Nisar 15 Май 2014 в 14:00

4 ответа

Лучший ответ

Его часто используют для обозначения циклов, курсоров и т. Д.

Вы можете использовать этот ярлык в goto заявления. Иначе это просто «комментарий».

Образец из Oracle:

DECLARE
  p        VARCHAR2(30);
  n        PLS_INTEGER := 37; -- test any integer > 2 for prime
BEGIN
  FOR j in 2..ROUND(SQRT(n)) LOOP
    IF n MOD j = 0 THEN -- test for prime
      p := ' is not a prime number'; -- not a prime number
      GOTO print_now; -- << here is the GOTO
    END IF;
  END LOOP;
  p := ' is a prime number';
<<print_now>> -- << and it executes this
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(n) || p);
END;
/
5
Patrick Hofman 15 Май 2014 в 10:03

Как уже говорили другие, <<some_text>> - это ярлык с именем "some_text". Ярлыки не часто используются в PL / SQL, но могут быть полезны в различных контекстах.

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

<<outer_most_loop>>
LOOP
  ...
  <<next_inner_loop>>
  LOOP
    ...
    <<inner_most_loop>>
    LOOP
      ...
      IF something <> something_else THEN
        EXIT outer_most_loop;
      END IF;
      ...
    END LOOP inner_most_loop;
    ...
  END LOOP next_inner_loop;
  ...
END LOOP outer_most_loop;

-- Execution continues here after EXIT outer_most_loop;

something := something_else;
...

Затем предположим, что у вас есть код с вложенными блоками, каждый из которых объявляет переменную с тем же именем, поэтому вам нужно указать компилятору, какие из переменных с одинаковыми именами вы собираетесь использовать. В этом случае вы можете использовать такой ярлык:

<<outer>>
DECLARE
  nNumber  NUMBER := 1;
BEGIN
  <<inner>>
  DECLARE
    nNumber  NUMBER := 2;
  BEGIN
    DBMS_OUTPUT.PUT_LINE('outer.nNumber=' || outer.nNumber);
    DBMS_OUTPUT.PUT_LINE('inner.nNumber=' || inner.nNumber);
  END inner;
END outer;

Ярлыки также могут быть полезны, если вы настаиваете на присвоении переменной того же имени, что и столбец в таблице. В качестве примера предположим, что у вас есть таблица с именем PEOPLE со столбцом LASTNAME, не допускающим значения NULL, и вы хотите удалить всех с LASTNAME = 'JARVIS'. Следующий код:

DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE
    WHERE LASTNAME = lastname;
END;

Не будет делать то, что вы намеревались - вместо этого он удалит каждую строку в таблице PEOPLE. Это происходит потому, что в случае потенциально неоднозначных имен PL / SQL выберет использование столбца в таблице вместо локальной переменной или параметра; таким образом, сказанное выше интерпретируется как

DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE p
    WHERE p.LASTNAME = p.lastname;
END;

И бум! Каждая строка в таблице прощается. :-) Метка может использоваться для уточнения имени переменной следующим образом:

<<outer>>
DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE p
    WHERE p.LASTNAME = outer.lastname;
END;

Выполните это, и исчезнут только люди с LASTNAME = 'JARVIS'.

И да - как кто-то сказал, вы можете GOTO ярлык:

FUNCTION SOME_FUNC RETURN NUMBER
IS
  SOMETHING       NUMBER := 1;
  SOMETHING_ELSE  NUMBER := 42;
BEGIN
  IF SOMETHING <> SOMETHING_ELSE THEN
    GOTO HECK;
  END IF;

  RETURN 0;

  <<HECK>>

  RETURN -1;
END;

(Фуууу! Такой код кажется неправильным ...!)

Поделитесь и наслаждайтесь.

6
Bob Jarvis - Reinstate Monica 15 Май 2014 в 15:20

Это метка, подгруппа комментариев в синтаксисе plsql. http://ss64.com/oraplsql/operators.html

2
Cloud 15 Май 2014 в 10:02

Это разделитель этикеток

<< label delimiter (begin) 


 label delimiter (end) >>

http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/02_funds.htm

2
Patrick Hofman 15 Май 2014 в 10:07