#oracle #plsql
Вопрос:
Итак, у меня есть код PL/SQL, который я не понимаю. В строке 11 данные вставляются в вызываемый объект emp
. Но emp
в этом коде нет объекта, объявленного. Не могли бы вы, пожалуйста, объяснить мне это?
1. DECLARE
2. TYPE emp_det IS RECORD
3. (
4. EMP_NO NUMBER,
5. EMP_NAME VARCHAR2(150),
6. MANAGER NUMBER,
7. SALARY NUMBER
8. );
9. TYPE emp_det_tbl IS TABLE OF emp_det; guru99_emp_rec emp_det_tbl:= emp_det_tbl();
10. BEGIN
11. INSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1000,’AAA’,25000,1000);
12. INSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1001,'XXX’,10000,1000);
13. INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
14. INSERT INTO emp (emp_no,emp_name,salary, manager) VALUES (1003,’ZZZ’,'7500,1000);
15. COMMIT:
16. SELECT emp no,emp_name,manager,salary BULK COLLECT INTO guru99_emp_rec
17. FROM emp;
Комментарии:
1. Нет, Linux-это не так 🙁
Ответ №1:
В строке 11 данные вставляются в объект, называемый emp. Но в этом коде не объявлен объект emp
EMP
это таблица, скорее всего, принадлежащая тому же пользователю, который запускает этот код PL/SQL. В Oracle мы обычно НЕ создаем таблицы в PL/SQL. Даже если бы вы хотели это сделать, CREATE TABLE
это DDL, и вам пришлось бы использовать динамический SQL ( execute immediate
). Редко, очень, очень редко мы создаем какие-либо объекты из PL/SQL.
Поэтому не имеет значения, что CREATE TABLE EMP
в этом сценарии ничего нет. Кроме того, вам не нужно «объявлять» об этом, вы не можете. Если таблица существует, в нее вставляются строки (конечно, если с данными все в порядке, например, вы не нарушаете никаких ограничений, типы данных совпадают и т. Д.).
Позже, в строке № 16, вы выбираете все строки (те, которые ранее существовали в таблице, если таковые имеются, а также недавно вставленные) в коллекцию с именем guru99_emp_rec
.