Pl sql вывести курсор

PL / SQL — курсоры

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

Курсор — это указатель на эту контекстную область. PL / SQL управляет контекстной областью с помощью курсора. Курсор содержит строки (одну или несколько), возвращаемые оператором SQL. Набор строк, которые содержит курсор, называется активным набором .

Вы можете назвать курсор так, чтобы на него можно было ссылаться в программе для выборки и обработки строк, возвращаемых оператором SQL, по одной за раз. Есть два типа курсоров —

  • Неявные курсоры
  • Явные курсоры

Неявные курсоры

Неявные курсоры автоматически создаются Oracle при каждом выполнении оператора SQL, когда для оператора нет явного курсора. Программисты не могут контролировать неявные курсоры и информацию в них.

Всякий раз, когда выполняется оператор DML (INSERT, UPDATE и DELETE), с этим оператором связывается неявный курсор. Для операций INSERT курсор содержит данные, которые необходимо вставить. Для операций UPDATE и DELETE курсор определяет строки, которые будут затронуты.

В PL / SQL вы можете ссылаться на самый последний неявный курсор как на курсор SQL , который всегда имеет атрибуты, такие как % FOUND,% ISOPEN,% NOTFOUND и % ROWCOUNT . Курсор SQL имеет дополнительные атрибуты % BULK_ROWCOUNT и % BULK_EXCEPTIONS , предназначенные для использования с оператором FORALL . В следующей таблице приведено описание наиболее часто используемых атрибутов.

Читайте также:  Как можно вывести партаки

Возвращает TRUE, если инструкция INSERT, UPDATE или DELETE затронула одну или несколько строк или инструкция SELECT INTO вернула одну или несколько строк. В противном случае он возвращает FALSE.

Логическая противоположность% FOUND. Он возвращает TRUE, если инструкция INSERT, UPDATE или DELETE не затронула строки, или инструкция SELECT INTO не вернула строки. В противном случае он возвращает FALSE.

Всегда возвращает FALSE для неявных курсоров, потому что Oracle автоматически закрывает курсор SQL после выполнения соответствующего оператора SQL.

Возвращает количество строк, затронутых оператором INSERT, UPDATE или DELETE или возвращенных оператором SELECT INTO.

Источник

Вывод курсора из процедуры

По аналогии с выводом результата функции:

А что если у нас есть не функция, а процедура, где первый параметр — out sys_refcursor?

Как получить так же выборку прямо в окне SQL Window, как в случае функции?

2 ответа 2

В SQL Window нельзя напрямую вызвать процедуру. Перейдите в Command Window и попробуйте, например:

В 12с у пакета dbms_sql появилась функция return_result. Вам нужно указать в своей процедуре dbms_sql.return_result(_cur_name), т.е.

В итоге при вызове в sqlplus вам покажется содержимое курсора. В 11g и ранние версии нужно создавать функцию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками oracle plsql plsql-developer или задайте свой вопрос.

Связанные

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.2.40635

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Русские Блоги

Подробное использование курсора в oracle

Концепция курсора:
Курсор — это рабочая область SQL памяти, которая определяется системой или пользователем в виде переменных. Назначение курсора — временно сохранить блоки данных, извлеченные из базы данных. В некоторых случаях данные должны быть переданы из таблицы, хранящейся на диске, в память компьютера для обработки, и, наконец, результат обработки отображается или, наконец, записывается обратно в базу данных. Таким образом, скорость обработки данных увеличится, в противном случае частый обмен данными на диске снизит эффективность.
Существует два типа курсоров: явный и неявный. Оператор запроса SELECT . INTO . используемый в вышеупомянутой программе, может одновременно извлекать только одну строку данных из базы данных. Для этой формы запроса и операции DML система использует неявный курсор. Но если вы хотите извлечь несколько строк данных, вы должны определить явный курсор программистом и обработать его с помощью операторов, связанных с курсором. Явный курсор соответствует оператору SELECT, который возвращает несколько строк и несколько столбцов.
Как только курсор открыт, данные передаются из базы данных в переменную курсора, а затем приложение декомпозирует необходимые данные из переменной курсора и обрабатывает их.
Неявный курсор
Как упоминалось ранее, операции DML и однострочные операторы SELECT используют неявные курсоры.
* Операция вставки: INSERT.
* Операция обновления: ОБНОВЛЕНИЕ.
* Операция удаления: УДАЛИТЬ.
* Однострочная операция запроса: SELECT . INTO .
Когда система использует неявный курсор, вы можете использовать свойства неявного курсора, чтобы понять состояние и результат операции, а затем управлять потоком программы. Доступ к неявным курсорам можно получить с помощью имени SQL, но следует отметить, что только имена курсора предыдущей операции DML или однострочной операции SELECT всегда могут быть доступны через имена курсоров SQL. Поэтому обычно сразу после выполнения операции немедленно используйте имя курсора SQL для доступа к свойству. Существует четыре типа свойств курсора, как показано ниже.

  1. Неявные свойства курсора возвращают значение типа значения
  2. SQL% ROWCOUNT Integer представляет количество строк данных, успешно выполненных оператором DML.
  3. SQL% FOUND логическое. TRUE означает, что операция вставки, удаления, обновления или однострочного запроса прошла успешно.
  4. SQL% NOTFOUND логическое значение является противоположностью возвращаемого значения атрибута SQL% FOUND.
  5. SQL% ISOPEN логическое значение true во время выполнения DML и false после завершения

[Обучение 1] Используйте атрибуты неявного курсора, чтобы определить, является ли изменение зарплаты сотрудника успешным.
Шаг 1. Войдите и запустите следующую программу:

  1. Не удалось изменить зарплату сотрудника!
  2. Процесс PL / SQL успешно завершен.

Шаг 2: Измените номер сотрудника с 1234 на 7788 и повторите описанную выше процедуру:
Результат:

  • Успешно изменена зарплата сотрудника!
  • Процесс PL / SQL успешно завершен.
  • Примечание. В этом примере атрибут SQL% FOUND используется для определения успешности модификации и предоставления соответствующей информации.
    Явный курсор
    Определение и работа курсора
    Использование курсора разделено на следующие 4 шага.
    1. Объявить курсор
    В разделе DECLEAR объявите курсор в следующем формате:
    Имя курсора CURSOR [(тип данных параметра 1 [, тип данных параметра 2 . ])]
    оператор IS SELECT;
    Параметр является необязательным, и определенные параметры могут появляться в предложении WHERE инструкции SELECT. Если параметры определены, соответствующие фактические параметры должны быть переданы при открытии курсора.
    Оператор SELECT — это запрос к таблице или представлению, или даже запрос объединения. Вы можете включить такие предложения, как условия WHERE, ORDER BY или GROUP BY, но вы не можете использовать предложения INTO. Переменные, определенные перед курсором, можно использовать в операторе SELECT.
    2. Открыть курсор
    В разделе исполняемого файла откройте курсор в следующем формате:
    Имя открытого курсора [(фактический параметр 1 [, фактический параметр 2 . ])];
    Когда курсор открыт, результат запроса оператора SELECT переносится в рабочую область курсора.
    3. Извлечение данных
    В исполняемом разделе данные в рабочей области курсора извлекаются в переменные в следующем формате. Операция извлечения должна происходить после открытия курсора.
    Имя курсора FETCH INTO имя переменной 1 [, имя переменной 2 . ];
    или
    Имя курсора FETCH Переменная записи INTO;
    После того, как курсор открыт, появляется указатель на область данных. Оператор FETCH возвращает одну строку данных, на которую указывает указатель за раз. Чтобы вернуть несколько строк, необходимо выполнить его несколько раз. Вы можете использовать оператор цикла. Цикл управления может быть выполнен путем оценки свойств курсора.
    Эти два формата описаны ниже:
    Имя переменной в первом формате — это переменная, используемая для получения данных от курсора, и ее необходимо определить заранее. Количество и тип переменных должны соответствовать количеству и типу переменных поля в операторе SELECT.
    Второй формат принимает одну строку данных за раз в переменные записи. Вам нужно использовать% ROWTYPE для предварительного определения переменных записи. Эта форма удобнее использовать, и вам не нужно определять и использовать несколько переменных отдельно.
    Метод определения переменных записи следующий:
    имя таблицы переменных имя | имя курсора% ROWTYPE;
    Таблица должна существовать, и имя курсора должно быть определено первым.
    4. Закрыть курсор
    ЗАКРЫТЬ имя курсора;
    После того, как явный курсор открыт, он должен быть явно закрыт. Как только курсор закрыт, ресурсы, занятые курсором, освобождаются, курсор становится недействительным и должен быть открыт заново, прежде чем его можно будет использовать.
    Вот простое упражнение с использованием явных курсоров.

    [Обучение 1] Используйте курсор, чтобы извлечь имя и должность 7788 сотрудников в таблице emp.

    1. SCOTT,ANALYST
    2. Процесс PL / SQL успешно завершен.

    Объяснение: Эта программа извлекает и отображает имя и должность сотрудника 7788, определяя курсор emp_cursor.
    В качестве улучшения приведенного выше примера переменные записи используются в следующем обучении.
    [Обучение 2] Используйте курсор, чтобы извлечь имя, должность и зарплату 7788 сотрудников в таблице emp.

    • SCOTT,ANALYST,3000
    • Процесс PL / SQL успешно завершен.

    Объяснение: В примере переменные записи используются для получения данных.Переменные записи определяются переменными курсора и должны появляться после определения курсора.
    Примечание. Содержимое записанных переменных можно получить в следующем виде:
    Запишите имя переменной и имя поля.
    [Тренинг 3] Показать имена и зарплаты трех лучших сотрудников с самой высокой заработной платой.

    1. KING,5000
    2. SCOTT,3000
    3. FORD,3000
    4. Процесс PL / SQL был успешно завершен.

    Объяснение: Программа использует предложение ORDER BY в определении курсора для сортировки и использует оператор цикла для извлечения нескольких строк данных.
    Цикл курсора
    [Обучение 1] Используйте специальный цикл FOR для отображения номеров и имен всех сотрудников.

    1. 7369SMITH
    2. 7499ALLEN
    3. 7521WARD
    4. 7566JONES
    5. Процесс PL / SQL успешно завершен.

    Объяснение: Видно, что форма цикла очень проста, что подразумевает определение переменных записи, процесс открытия, извлечения и закрытия курсора. Emp_record — это неявно определяемая переменная записи, количество циклов выполнения соответствует количеству строк данных, полученных курсором.
    [Обучение 2] Другая форма цикла курсора.

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

    Свойства курсора можно получить в следующем виде:
    Атрибут имени курсора%
    Чтобы определить, открыт ли курсор emp_cursor, вы можете использовать атрибут emp_cursor% ISOPEN. Если курсор уже открыт, возвращаемое значение — true, в противном случае — false. Для получения подробной информации, пожалуйста, обратитесь к следующему обучению.
    [Обучение 1] Практикуйтесь с использованием атрибутов курсора.

    1. 1-SMITH
    2. 2-ALLEN
    3. 3-WARD
    4. Процесс PL / SQL был успешно завершен.

    Объяснение: В этом примере используется emp_cursor% ISOPEN, чтобы определить, открыт ли курсор, используется emp_cursor% ROWCOUNT для получения количества строк данных, возвращенных до сих пор оператором FETCH, и выводится; используется цикл для получения данных; используется оператор FETCH в теле цикла; используется emp_cursor% NOTFOUND Независимо от того, был ли успешно выполнен оператор FETCH. Когда оператор FETCH завершается неудачно, это указывает на то, что данные были получены и цикл завершен.
    [Упражнение 1] Удалите оператор OPEN emp_cursor; и повторно запустите вышеуказанную программу.
    Передача параметров курсора
    [Training 1] Курсоры с параметрами.

    1. 7934,MILLER
    2. Процесс PL / SQL успешно завершен.

    Объяснение: Курсор emp_cursor определяет два параметра: p_deptno представляет номер отдела, а p_job представляет задание. Оператор OPEN emp_cursor (10, ‘CLERK’) передал курсору два значения параметров, а именно отдел 10 и задание CLERK, поэтому содержимым запроса курсора являются сотрудники отдела 10, чье задание — CLERK. Раздел цикла используется для отображения содержимого запроса.
    [Упражнение 1] Измените параметры оператора Open: номер отдела равен 20, позиция ANALYST и выполните снова.
    Вы также можете передавать параметры курсорам через переменные, но переменные должны быть определены до курсора и назначенные значения перед его открытием. Приведенный выше пример изменяется следующим образом:
    [Training 2] Передайте параметры курсору через переменные.

    1. 7934,MILLER
    2. Процесс PL / SQL успешно завершен.

    Примечание. Эта программа выполняет ту же функцию, что и предыдущая.
    Использование динамического оператора SELECT и динамического курсора
    Oracle поддерживает динамические операторы SELECT и динамические курсоры. Динамические методы значительно расширяют возможности программирования.
    Для оператора SELECT с результатом запроса в одну строку вы можете использовать метод динамического генерирования строки оператора запроса, чтобы временно сгенерировать и выполнить ее на этапе выполнения программы. Синтаксис:
    выполняет немедленную строку запроса в переменной 1 [, переменная 2 . ];
    Ниже приведен пример динамической генерации оператора SELECT.
    [Training 1] Динамический запрос SELECT.

    1. SCOTT
    2. Процесс PL / SQL успешно завершен.

    Объяснение: Оператор SELECT . INTO . хранится в строке STR и выполняется оператором EXECUTE.
    Курсор, определенный в разделе объявления переменной, является статическим и не может быть изменен во время работы программы. Хотя с помощью передачи параметров могут быть получены различные данные, все еще существуют значительные ограничения. Используя динамический курсор, запрос может быть сгенерирован как курсор в любое время на этапе выполнения программы. Чтобы использовать динамические курсоры, вам необходимо определить тип курсора, а затем объявить переменную курсора. Оператор запроса, соответствующий курсору, может быть динамически объяснен во время выполнения программы.
    Оператор, который определяет тип курсора, выглядит следующим образом:
    Имя типа курсора TYPE REF CURSOR;
    Оператор для объявления переменной курсора выглядит следующим образом:
    имя переменной курсора имя типа курсора;
    В разделе исполняемого файла вы можете открыть динамический курсор следующим образом:
    Имя переменной курсора OPEN FOR строка запроса;
    [Обучение 2] Отображение информации о сотрудниках в группах в алфавитном порядке, содержащемся в имени.
    Введите и запустите следующую программу:

    1. Имена, содержащие букву А:
    2. ALLEN
    3. WARD
    4. MARTIN
    5. BLAKE
    6. CLARK
    7. ADAMS
    8. JAMES
    9. Имена с буквой B:
    10. BLAKE
    11. Имена, содержащие букву С:
    12. CLARK
    13. SCOTT

    Объяснение: используется двойной цикл. Во внешнем теле цикла оператор SELECT курсора генерируется динамически, а затем открывается. Используйте инструкцию letter: = chr (ascii (letter) +1), чтобы получить следующую букву в алфавите.

    Обработка исключений
    Обработка ошибок
    Раздел обработки ошибок расположен после исполняемого раздела программы и состоит из нескольких ветвей, управляемых операторами WHEN. Синтаксис для обработки ошибок следующий:
    EXCEPTION
    КОГДА ошибка 1 [ИЛИ ошибка 2] ТО
    последовательность операторов 1;
    КОГДА ошибка 3 [ИЛИ ошибка 4] ТО
    последовательность операторов 2;
    WHEN OTHERS
    последовательность операторов n;
    END;
    где:
    Ошибка — это стандартная ошибка, предопределенная системой в стандартном пакете, или ошибка, настроенная пользователем в разделе описания программы. См. Тип ошибки, предопределенный системой, в следующем разделе.
    Последовательность операторов является частью обработки ошибок различных ветвей.
    Все ошибки, которые появляются после WHEN, являются ошибками, которые можно отследить. Другие ошибки, которые не были зафиксированы, будут обработаны в разделе WHEN OTHERS. Ошибка обработки ветки. Чтобы дополнительно определить тип ошибки в этой ветви, вы можете получить номер системной ошибки и информацию об ошибке, используя предопределенные функции SQLCODE () и SQLERRM ().
    Если в подблоке программы возникает ошибка, но в подблоке нет части обработки ошибок, ошибка передается основной программе.
    Ниже приведен пример предопределенного исключения, вызванного неправильным номером запроса.
    [Обучение 1] Запросите имя сотрудника с номером 1234.

    1. Неверный номер, соответствующий сотрудник не найден!
    2. Процесс PL / SQL успешно завершен.

    Объяснение: В приведенном выше запросе, поскольку сотрудник с номером 1234 не существует, будет указан тип «NO_DATA_»
    FOUND «исключение.» NO_DATA_FOUND «является предопределенным системой типом ошибки. Оператор WHEN в разделе EXCEPTION будет перехватывать исключение и выполнять соответствующий раздел кода. В этом примере выходные данные Определяемое пользователем сообщение об ошибке «Ошибка числа, соответствующий сотрудник не найден!». Если возникают другие типы ошибок, будет выполнен раздел кода с условием «ДРУГОЕ» с сообщением «Произошли другие ошибки!»
    [Training 2] Системные ошибки отображаются кодом программы.

    1. Произошла системная ошибка!
    2. Код ошибки:? 1476
    3. Сообщение об ошибке: ORA-01476: делитель 0
    4. Процесс PL / SQL успешно завершен.

    Объяснение: Ошибка деления на ноль произошла во время работы программы и была перехвачена WHEN OTHERS. При выполнении собственного оператора вывода, отображаемого в сообщении, отобразилось сообщение об ошибке, а затем он завершился нормально. В части обработки ошибок предопределенные функции SQLCODE () и SQLERRM () используются для дальнейшего получения кода ошибки и информации о типе.
    предопределенная ошибка
    В Oracle много системных ошибок, но в стандартном пакете определены только некоторые распространенные ошибки. Об определенной ошибке можно судить по стандартному имени ошибки в части EXCEPTION, и выполняется обработка исключений. Общие системные предопределенные исключения показаны ниже.

    Например, если программа вставит повторяющиеся значения в столбец первичного ключа таблицы, произойдет ошибка DUP_VAL_ON_INDEX.
    Если системная ошибка не определена в стандартном пакете, ее необходимо определить в разделе описания, синтаксис следующий:
    Имя ошибки ИСКЛЮЧЕНИЕ;
    После определения PRAGMA EXCEPTION_INIT используется, чтобы связать определенную ошибку со специальным кодом ошибки Oracle, и ее можно использовать как системную ошибку. Синтаксис выглядит следующим образом:
    PRAGMA EXCEPTION_INIT (имя ошибки, код ошибки);
    [Training 1] Определите новый тип системной ошибки.

    1. Невозможно вставить значение NULL!
    2. Процесс PL / SQL успешно завершен.

    Объяснение: NULL_INSERT_ERROR является пользовательским исключением и связано с системной ошибкой 1400.
    пользовательское исключение
    Программисты могут использовать механизм, который вызывает исключения для разработки программ, и определять свои собственные типы исключений. Вы можете определить новый тип исключения в разделе объявлений. Синтаксис определения:
    Имя ошибки ИСКЛЮЧЕНИЕ;
    Определяемые пользователем ошибки не могут быть вызваны системой. Они должны запускаться явно программой. Синтаксис триггера:
    RAISE имя ошибки;
    RAISE также может быть использован для вызова симулируемых системных ошибок. Например, RAISE ZERO_DIVIDE вызовет симулированное деление на ноль ошибок.
    Вы также можете вызвать исключение, используя функцию RAISE_APPLICATION_ERROR. Этой функции передаются два параметра, первый из которых представляет собой определяемый пользователем номер ошибки, а второй параметр представляет собой определяемое пользователем сообщение об ошибке. Количество исключений, возникающих при использовании этой функции, следует выбирать между 20 000 и 20 999.
    Пользовательская обработка исключений такая же, как и раньше.
    [Обучение 1] Вставьте новых сотрудников и ограничьте число сотрудников, которые будут вставлены, между 7000 и 8000.

    Результат выполнения:
    Номер сотрудника меньше нижнего предела в 7000!
    Процедура PL / SQL успешно завершена.
    Примечание. В этом примере определены два исключения: new_excp1 и new_excp2, которые представляют ошибки с числами меньше 7000 и числами больше 8000 соответственно. Исходя из размера числа в программе, генерируется соответствующее исключение, и операция вставки откатывается в части обработки исключения, а затем отображается соответствующее сообщение об ошибке.
    [Training 2] Используйте функцию RAISE_APPLICATION_ERROR, чтобы вызвать системное исключение.

    1. DECLARE
    2. *
    3. Ошибка ERROR находится в строке 1:
    4. ORA-20001: число меньше нижнего предела 7000!
    5. ORA-06512: на линии 9

    Примечание. В этом обучении RAISE_APPLICATION_ERROR используется для создания пользовательского исключения и отображается как системная ошибка. Номера ошибок: 20001 и 20002.
    Примечание. По сравнению с предыдущим обучением этот метод не требует предварительного определения исключения, его можно вызвать напрямую.
    Вы можете обратиться к следующему фрагменту программы, чтобы записать информацию об ошибке в таблицу, где ошибки — это таблица, в которой записана информация об ошибке, SQLCODE — это номер ошибки, где произошло исключение, а SQLERRM — сообщение об ошибке, когда произошло исключение.
    DECLARE
    v_error_code NUMBER;
    v_error_message VARCHAR2(255);
    BEGIN
    .
    EXCEPTION
    .
    WHEN OTHERS THEN
    v_error_code := SQLCODE ;
    v_error_message := SQLERRM ;
    INSERT INTO errors
    VALUES(v_error_code, v_error_message);
    END;
    [Упражнение 1] Измените зарплату сотрудника и управляйте диапазоном изменения на 600–6000, вызывая исключение.
    Фазовое обучение
    [Обучение 1] Копирование сотрудников из одной таблицы в другую.
    Шаг 1. Создайте новую таблицу EMP1 с той же структурой, что и таблица EMP:
    CREATE TABLE emp1 AS SELECT * FROM SCOTT.EMP WHERE 1=2;
    Шаг 2. Переместите сотрудника из таблицы EMP в таблицу EMP1, указав номер сотрудника:

    Результат выполнения:
    Сотрудник успешно скопирован!
    Процедура PL / SQL успешно завершена.
    Шаг 2: Показать результат копирования:
    SELECT empno,ename,job FROM emp1;
    Результат выполнения:

    Объяснение: Переменная emp_rec является переменной записи, определенной в соответствии с таблицей emp. Оператор SELECT . INTO . передает всю запись в эту переменную. Оператор INSERT вставляет всю переменную записи в таблицу emp1. Если вставка прошла успешно (SQL% FOUND равен true), транзакция фиксируется, в противном случае транзакция откатывается для отмены транзакции. Попробуйте изменить номер сотрудника на 7902 и повторите описанную выше процедуру.
    [Обучение 2] Вывод зарплаты сотрудника. Заработная плата сотрудника представлена ​​* на разных высотах.
    Введите и выполните следующую программу:

    Примечание: первая функция rpad производит эффект выравнивания, а вторая функция rpad генерирует различное число * в зависимости от зарплаты. Программа использует неявный цикл курсора курсора.
    [Обучение 3] Напишите программу для форматирования и вывода информации об отделе.
    Введите и выполните следующую программу:

    • Список отделов
    • ————————————
    • Номер отдела: 10
    • Название отдела: БУХГАЛТЕРСКИЙ УЧЕТ
    • Город: NEWYORK
    • ————————————
    • Номер отдела: 20
    • Название отдела: ИССЛЕДОВАНИЯ
    • Город: ДАЛЛАС
    • .
    • Есть 4 отдела!
    • Процесс PL / SQL успешно завершен.

    Примечание. Содержимое поля в этой программе расположено вертикально. Переменная V_count записывает количество циклов, то есть количество отделов.
    [Обучение 4] Известно, что в каждом отделе есть менеджер, он пишет программу и статистически выводит название отдела, общее количество отделов, общую зарплату и руководителя отдела.
    Введите и выполните следующую программу:

    1. ——————— Министерство статистики и регулирования ———————
    2. Наименование отдела Общее количество человек Общая заработная плата Заведующий отделом
    3. ACCOUNTING 3 8750 CLARK
    4. RESEARCH 5 10875 JONES
    5. SALES 6 9400 BLAKE
    6. ————————————————————-
    7. Процесс PL / SQL был успешно завершен.

    Объяснение: Оператор SELECT с функцией группировки используется в курсоре для подсчета общего числа людей и общей заработной платы каждого отдела. Затем найдите менеджера отдела по номеру отдела и названию. Процедура предполагает наличие менеджера для каждого отдела.
    [Обучение 5] Повышение заработной платы для работников, начиная с низкооплачиваемых работников, увеличение 10% первоначальной заработной платы для каждого человека, ограничение общего повышения заработной платы до 800 юаней, что свидетельствует о том, что увеличение заработной платы Количество и баланс.
    Введите и отладьте следующую программу:

    1. Имя Оригинальная зарплата Новая зарплата
    2. ———————————————
    3. SMITH 1289 1418
    4. JAMES 1531 1684
    5. MARTIN 1664 1830
    6. MILLER 1730 1903
    7. ALLEN 1760 1936
    8. ADAMS 1771 1771
    9. TURNER 1815 1815
    10. WARD 1830 1830
    11. BLAKE 2850 2850
    12. CLARK 2850 2850
    13. JONES 2975 2975
    14. FORD 3000 3000
    15. KING 5000 5000
    16. ————————————————
    17. Увеличение заработной платы: 5 Остаточная заработная плата: 3
    18. Процесс PL / SQL успешно завершен.

    Источник

    Оцените статью
    S.No Атрибут и описание
    1