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'의 세부 정보를 프로젝션합니다.
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: 가져온 레코드 값을 표시합니다.