Oracle PL/SQL 삽입, 업데이트, 삭제 및 선택 [예]

이번 튜토리얼에서는 사용법을 배워보겠습니다. SQL PL/SQL에서. SQL은 데이터베이스에서 데이터를 가져오고 업데이트하는 작업을 담당하는 실제 구성 요소인 반면, PL/SQL은 이러한 데이터를 처리하는 구성 요소입니다. 또한 이 기사에서는 PL/SQL 블록 내에서 SQL을 결합하는 방법에 대해서도 설명합니다.

PL/SQL의 DML 트랜잭션

DML은 다음을 의미합니다. 데이터 조작 언어. 이러한 진술은 주로 조작 활동을 수행하는 데 사용됩니다. 아래 작업을 다룹니다.

  • 데이터 삽입
  • 데이터 업데이트
  • 데이터 삭제
  • 데이터 선택

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 명령을 보여줍니다. 테이블 이름과 값은 필수 필드인 반면, insert 문에 테이블의 모든 열에 대한 값이 있는 경우 열 이름은 필수가 아닙니다.
  • 위와 같이 값이 별도로 제공되는 경우 'VALUES' 키워드는 필수입니다.

구문 :

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • 위 구문은 INSERT INTO 명령에서 값을 직접 가져오는 것을 보여줍니다. 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;
  • 위 구문은 UPDATE를 보여줍니다. 'SET' 키워드는 해당 PL/SQL 엔진에 지정된 값으로 열 값을 업데이트하도록 지시합니다.
  • 'WHERE' 절은 선택사항입니다. 이 절이 제공되지 않으면 전체 테이블에서 언급된 열의 값이 업데이트됩니다.

데이터 삭제

데이터 삭제는 데이터베이스 테이블에서 하나의 전체 레코드를 삭제하는 것을 의미합니다. 이를 위해 'DELETE' 명령이 사용됩니다.

구문 :

BEGIN
  DELETE
  FROM
  <table_name>
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • 위 구문은 DELETE 명령을 보여줍니다. 'FROM' 키워드는 선택 사항이며 'FROM' 절이 있든 없든 명령은 동일한 방식으로 작동합니다.
  • 'WHERE' 절은 선택사항입니다. 이 절이 제공되지 않으면 전체 테이블이 삭제됩니다.

데이터 선택

데이터 프로젝션/가져오기는 데이터베이스 테이블에서 필요한 데이터를 검색하는 것을 의미합니다. 이는 'INTO' 절과 함께 'SELECT' 명령을 사용하여 달성할 수 있습니다. 'SELECT' 명령은 데이터베이스에서 값을 가져오고 'INTO' 절은 이 값을 데이터베이스의 로컬 변수에 할당합니다. PL/SQL 블록.

'SELECT' 문에서 고려해야 할 사항은 다음과 같습니다.

  • 'SELECT' 문은 하나의 레코드만 반환해야 하며, 'INTO' 절을 사용하면 하나의 변수가 하나의 값만 가질 수 있기 때문입니다. 'SELECT' 문이 'TOO_MANY_ROWS'보다 두 개 이상의 값을 반환하면 예외가 발생합니다.
  • 'SELECT' 문은 'INTO' 절의 변수에 값을 할당하므로 값을 채우려면 테이블에서 최소한 하나의 레코드를 가져와야 합니다. 레코드를 얻지 못한 경우 'NO_DATA_FOUND' 예외가 발생합니다.
  • 'SELECT' 절의 열 수와 해당 데이터 유형은 'INTO' 절의 변수 수 및 해당 데이터 유형과 일치해야 합니다.
  • 명령문에 언급된 것과 동일한 순서로 값을 가져와서 채웁니다.
  • 'WHERE' 절은 가져올 레코드에 대해 더 많은 제한을 둘 수 있는 선택 사항입니다.
  • 'SELECT' 문은 다른 DML 문의 'WHERE' 조건에 사용되어 조건의 값을 정의할 수 있습니다.
  • 'INSERT', 'UPDATE', 'DELETE' 문을 사용할 때 'SELECT' 문에는 '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 테이블에 아래 XNUMX개의 레코드를 삽입하겠습니다.

EMP_NAME EMP_NO 봉급 MANAGER
BBB 1000 25000 AAA
트리플 엑스 1001 10000 BBB
YYY 1002 10000 BBB
Zzz 1003 7500 BBB

그런 다음 'XXX'의 급여를 15000으로 업데이트하고 직원 레코드 'ZZZ'를 삭제합니다. 마지막으로 직원 'XXX'의 세부 정보를 프로젝션합니다.

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;
/

출력:

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

코드 설명 :

  • 코드 라인 2-5: 변수를 선언합니다.
  • 코드 라인 7-14: emp 테이블에 레코드를 삽입합니다.
  • 코드 라인 15: 삽입 트랜잭션을 커밋합니다.
  • 코드 라인 17-19: 직원 'XXX'의 급여를 15000으로 업데이트
  • 코드 라인 20: 업데이트 트랜잭션을 커밋합니다.
  • 코드 라인 22: 'ZZZ' 기록 삭제 중
  • 코드 라인 23: 삭제 트랜잭션을 커밋합니다.
  • 코드 라인 25-27: 'XXX' 레코드를 선택하고 변수 l_emp_name, l_emp_no, l_salary, l_manager에 입력합니다.
  • 코드 라인 28-32: 가져온 레코드 값을 표시합니다.