SQL и PL/SQL - это два взаимодополняющих, но принципиально разных языка для работы с базами данных. Вот их ключевые различия:
SQL (Structured Query Language):
SELECT name, salary FROM employees WHERE department = 'IT';
PL/SQL (Procedural Language/SQL):
BEGIN
FOR emp IN (SELECT * FROM employees WHERE department = 'IT') LOOP
DBMS_OUTPUT.PUT_LINE(emp.name || ': ' || emp.salary);
END LOOP;
END;
SQL:
PL/SQL:
DECLARE
v_salary NUMBER;
BEGIN
SELECT salary INTO v_salary FROM employees WHERE id = 100;
IF v_salary < 5000 THEN
UPDATE employees SET salary = salary * 1.1 WHERE id = 100;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Сотрудник не найден');
END;
SQL:
PL/SQL:
BEGIN
FORALL i IN 1..100
UPDATE employees SET salary = salary * 1.1 WHERE id = i;
END;
SQL лучше для:
PL/SQL лучше для:
CREATE OR REPLACE TRIGGER audit_salary_changes
BEFORE UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_audit VALUES (:OLD.id, :OLD.salary, :NEW.salary, SYSDATE);
END;
SQL:
PL/SQL:
DECLARE
TYPE id_array IS TABLE OF employees.id%TYPE;
v_ids id_array := id_array(101, 102, 103);
BEGIN
FORALL i IN INDICES OF v_ids
UPDATE employees SET salary = salary * 1.1 WHERE id = v_ids(i);
END;
SQL:
PL/SQL:
SQL - это язык запросов для манипуляции данными, тогда как PL/SQL - это полноценный процедурный язык для создания серверной логики в Oracle Database. PL/SQL расширяет SQL, добавляя:
Выбор между ними зависит от задачи: простые запросы - SQL, сложная бизнес-логика - PL/SQL. Профессиональный разработчик Oracle должен владеть обоими языками.