Задать вопрос
Ответы пользователя по тегу PL/SQL
  • Можете помочь с выводом запроса SQL и желательно объяснить в какой момент что происходит?

    @Khamzabek
    Нет, результатом вывода будет только одна строка - либо "Первый", либо "Второй", в зависимости от значения переменной vID.

    Теперь разберем запрос более подробно:

    1. Объявляются две переменные - vID типа number и vGG типа varchar2.
    2. В блоке SELECT происходит выборка столбца GG из временной таблицы, созданной с помощью оператора UNION ALL. Эта временная таблица представляет собой объединение двух множеств: первое множество имеет столбцы ID=1 и GG='Первый', а второе - ID=2 и GG='Второй'.
    3. В условии WHERE выбирается строка, у которой значение столбца ID равно значению переменной vID.
    4. Результат выборки записывается в переменную vGG.
    5. В блоке dbms_output выводится строка, содержащая значение переменной vGG.

    Таким образом, если перед запуском данного блока кода значение переменной vID было установлено равным 1, то на выходе мы получим строку "Первый". Если значение переменной vID было установлено равным 2, то на выходе мы получим строку "Второй". Если же в таблице отсутствует строка с указанным значением ID, то блок SELECT не вернет никаких строк, что может привести к ошибке выполнения.
    Ответ написан
    Комментировать
  • Где ошибка в запросе?

    @Khamzabek
    Ошибка в запросе заключается в неправильном форматировании строкового литерала. Во-первых, не хватает символа "||" перед строкой "from", так как он должен быть объединен со строкой "select". Во-вторых, также не хватает символа "||" перед строкой "on", так как он должен быть объединен со строкой "join". В-третьих, в строке "on (t.' v_trg_pk" не хватает символа "||" перед переменной "v_trg_pk". Кроме того, необходимо добавить символы ";" в конце запроса.

    Исправленный запрос:

    v_sql := 'merge into ' || in_trg_table || ' t'
    || ' using (select s.address, s.city, m.trg_pk_id'
    || ' from ' || v_src_table || ' s join ' || v_map_table || ' m'
    || ' on m.src_pk_id = s.cust_id ) sc'
    || ' on (t.' || v_trg_pk || ' = sc.trg_pk_id)'
    || ' when matched then update set '
    || 't.ADDRESS=sc.ADDRESS,t.CITY=sc.CITY;';
    Ответ написан
    Комментировать