Учебники

16) SQL в PL / SQL

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

В этом уроке вы узнаете

Транзакции DML в PL / SQL

DML расшифровывается как Data Manipulation Language . Эти заявления в основном используются для выполнения манипуляционной деятельности. Это касается следующих операций.

  • Вставка данных
  • Обновление данных
  • Удаление данных
  • Выбор данных

В PL / SQL мы можем манипулировать данными только с помощью команд SQL.

Вставка данных

В PL / SQL мы можем вставить данные в любую таблицу, используя команду SQL INSERT INTO. Эта команда примет имя таблицы, столбец таблицы и значения столбца в качестве входных данных и вставит значение в базовую таблицу.

Команда INSERT также может получать значения непосредственно из другой таблицы, используя инструкцию SELECT, а не указывать значения для каждого столбца. С помощью оператора SELECT мы можем вставить столько строк, сколько содержится в базовой таблице.

Синтаксис:

BEGIN
  INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
     VALUES(<valuel><value2>,...:<value_n>);
END;
  • Приведенный выше синтаксис показывает команду INSERT INTO. Имя и значения таблицы являются обязательными полями, тогда как имена столбцов не являются обязательными, если операторы вставки имеют значения для всех столбцов таблицы.
  • Ключевое слово «VALUES» является обязательным, если значения указаны отдельно, как показано выше.

Синтаксис:

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • Приведенный выше синтаксис показывает команду INSERT INTO, которая получает значения непосредственно из <table_name2> с помощью команды SELECT.
  • Ключевое слово «VALUES» не должно присутствовать в этом случае, так как значения не приводятся отдельно.

Обновление данных

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

Синтаксис:

BEGIN	
  UPDATE <table_name>
  SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> 
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Приведенный выше синтаксис показывает ОБНОВЛЕНИЕ. Ключевое слово «SET» указывает движку PL / SQL обновить значение столбца на указанное значение.
  • Предложение WHERE является необязательным. Если этот пункт не указан, то значение упомянутого столбца во всей таблице будет обновлено.

Удаление данных

Удаление данных означает удаление одной полной записи из таблицы базы данных. Для этого используется команда «УДАЛИТЬ».

Синтаксис:

BEGIN
  DELETE
  FROM
  <table_name>
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Приведенный выше синтаксис показывает команду DELETE. Ключевое слово «FROM» является необязательным, и с предложением «FROM» или без него команда ведет себя одинаково.
  • Предложение WHERE является необязательным. Если этот пункт не указан, вся таблица будет удалена.

Выбор данных

Проекция / выборка данных означает извлечение необходимых данных из таблицы базы данных. Это может быть достигнуто с помощью команды «SELECT» с предложением «INTO». Команда «SELECT» извлекает значения из базы данных, а предложение «INTO» присваивает эти значения локальной переменной блока PL / SQL.

Ниже приведены пункты, которые необходимо учитывать в выражении «SELECT».

  • Оператор «SELECT» должен возвращать только одну запись при использовании предложения «INTO», поскольку одна переменная может содержать только одно значение. Если инструкция «SELECT» возвращает более одного значения, будет сгенерировано исключение «TOO_MANY_ROWS».
  • Оператор «SELECT» назначит значение переменной в предложении «INTO», поэтому для заполнения значения необходимо получить хотя бы одну запись из таблицы. Если он не получил никакой записи, то возникает исключение «NO_DATA_FOUND».
  • Количество столбцов и их тип данных в предложении «SELECT» должны совпадать с количеством переменных и их типов данных в предложении «INTO».
  • Значения выбираются и заполняются в том же порядке, как указано в операторе.
  • Предложение WHERE является необязательным, что позволяет иметь больше ограничений на записи, которые будут выбраны.
  • Оператор «SELECT» может использоваться в условии «WHERE» других операторов DML для определения значений условий.
  • Оператор «SELECT» при использовании операторов «INSERT», «UPDATE», «DELETE» не должен иметь предложения «INTO», так как в этих случаях он не будет заполнять никакие переменные.

Синтаксис:

BEGIN
  SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> 
   FROM <table_name>
   WHERE <condition to fetch the required records>;
END;
  • Приведенный выше синтаксис показывает команду SELECT-INTO. Ключевое слово «FROM» является обязательным, оно идентифицирует имя таблицы, из которой необходимо извлечь данные.
  • Предложение WHERE является необязательным. Если это условие не задано, будут получены данные из всей таблицы.

Пример 1. В этом примере мы увидим, как выполнять операции DML в PL / SQL. Мы собираемся вставить следующие четыре записи в таблицу emp.

EMP_NAME EMP_NO ЗАРПЛАТА УПРАВЛЯЮЩИЙ ДЕЛАМИ
ВВВ 1000 25000 AAA
XXX 1001 10000 ВВВ
YYY 1002 10000 ВВВ
ZZZ 1003 7500 ВВВ

Затем мы собираемся обновить зарплату «XXX» до 15000, и мы собираемся удалить запись сотрудника «ZZZ». Наконец, мы собираемся спроектировать детали сотрудника «XXX».

SQL в PL / SQL

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER; 
l_manager VARCHAR2(250);
BEGIN	
INSERT INTO emp(emp_name,emp_no,salary,manager) 
VALUES(‘BBB’,1000,25000,’AAA’);
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,’BBB);
INSERT INTO emp(emp_name,emp_no,salary,managed 
VALUES(‘YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager) 
VALUES(‘ZZZ',1003,7500,'BBB'):‭
COMMIT;
Dbms_output.put_line(‘Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line(‘Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT:
Dbms_output.put_line('Values Deleted );
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';

Dbms output.put line(‘Employee Detail’);
Dbms_output.put_line(‘Employee Name:‘||l_emp_name);
Dbms_output.put_line(‘Employee Number:‘||l_emp_no);
Dbms_output.put_line(‘Employee Salary:‘||l_salary);
Dbms output.put line(‘Emplovee Manager Name:‘||l_manager):
END;
/

Output:

Values Inserted
Values Updated
Values Deleted
Employee Detail 
Employee Name:XXX 
Employee Number:1001 
Employee Salary:15000 
Employee Manager Name:BBB

Code Explanation:

  • Code line 2-5: Declaring the variable.
  • Code line 7-14: Inserting the records into emp table.
  • Code line 15: Committing the insert transactions.
  • Code line 17-19: Updating the salary of the employee ‘XXX’ to 15000
  • Code line 20: Committing the update transaction.
  • Code line 22: Deleting the record of ‘ZZZ’
  • Code line 23: Committing the delete transaction.
  • Code line 25-27: Selecting the record of ‘XXX’ and populating into the variable l_emp_name, l_emp_no, l_salary, l_manager.
  • Code line 28-32: Displaying the fetched records value.