<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>
# EXECUTE IMMEDIATE with USING
# 우선 테이블 데이터를 모두 삭제한다
delete from emp1;
select * from emp1;
-- this procedure can work with any table contain 1 coulmn and
-- this column should be number
create or replace procedure add_rows
( p_table_name varchar2, p_value number )
is
begin
--EXECUTE IMMEDIATE 'insert into '||p_table_name ||' values('||p_value||') ';
EXECUTE IMMEDIATE 'insert into '||p_table_name ||' values(:1) ' using p_value;
end;
------------------------------------------------------------
Procedure ADD_ROWS compiled
# emp1 테이블은 데이터 타입이 숫자인 필드를 1개만 가지고 있다
desc emp1;
----------------------
Name Null? Type
------ ----- ------
EMP_ID NUMBER
# 테이블 이름과 데이터를 입력한다
execute add_rows ('emp1',10);
# 테이블에 데이터가 1개인 것을 확인
select * from emp1;
------------------------------
EMP_ID
----------
10
# 전체 데이터 삭제
delete emp1;
# 내부변수를 이용하여 같은 테이블에 추가로 삽입
create or replace procedure add_rows
( p_table_name varchar2,p_value number )
is
val1 number:=20;
val2 number:=30;
begin
EXECUTE IMMEDIATE 'insert into '||p_table_name ||' values(:1) ' using p_value;
EXECUTE IMMEDIATE 'insert into '||p_table_name ||' values(:yy) ' using val1;
EXECUTE IMMEDIATE 'insert into '||p_table_name ||' values(:uuu)' using val2;
end;
# 패키지 실행
execute add_rows ('emp1',10);
# 실제 입력된 순서대로 입력된다.
select rowid, emp_id from emp1;
-----------------------------------------------
ROWID EMP_ID
------------------ ----------
AAAR3cAAEAAAKAMAAA 20
AAAR3cAAEAAAKAMAAB 30
AAAR3cAAEAAAKAMAAE 10
'Database > PLSQL' 카테고리의 다른 글
063 - [Oracle PL/SQL] Dynamic SQL - to compile packages (0) | 2024.03.20 |
---|---|
061 - [Oracle PL/SQL] Dynamic SQL - INTO Clause (0) | 2024.03.13 |
059 - [Oracle PL/SQL] Dynamic SQL (0) | 2024.03.13 |
058 - [Oracle PL/SQL] Oracle package - UTL_FILE (0) | 2024.03.12 |
057 - [Oracle PL/SQL] Oracle package - DBMS_OUTPUT (0) | 2024.03.12 |