PLSQL-06, 스토리지 프로세스
CREATE OR REPLACE PROCEDURE raise_salary
(p_id IN emp.empno%TYPE)
IS
--
BEGIN
UPDATE emp SET sal = sal * 1.1
WHERE empno = p_id;
END raise_salary;
/
스토리지 프로세스 호출:
-- :
EXECUTE raise_salary (7839);
-- :
declare
v_empno emp.empno%type :=&p_empno;
begin
RAISE_SALARY(v_empno);
end;
/
SQL>SHOW ERROR -- ;
연습2: 내보내기 형식 매개 변수 (out 형식)
CREATE OR REPLACE PROCEDURE query_emp
(p_id IN emp.empno%TYPE,
p_name OUT emp.ename%TYPE,
p_salary OUT emp.sal%TYPE,
p_comm OUT emp.comm%TYPE)
IS
BEGIN
SELECT ename, sal, comm
INTO p_name, p_salary, p_comm
FROM emp
WHERE empno = p_id;
END query_emp;
/
스토리지 프로세스 호출:
---- :
VARIABLE g_name VARCHAR2(25)
VARIABLE g_sal NUMBER
VARIABLE g_comm NUMBER
EXECUTE query_emp(7369, :g_name, :g_sal, :g_comm);
PRINT
---- :
declare
v_empno emp.empno%type:=7499;
v_sal emp.sal%type;
v_ename emp.ename%type;
v_comm emp.comm%type;
begin
query_emp(v_empno,v_ename,v_sal,v_comm);
dbms_output.put_line(v_ename||' '||v_sal||' '||v_comm);
end;
/
연습3: 가져오기/내보내기 형식 매개 변수 (in/out 형식)
CREATE OR REPLACE PROCEDURE format_phone
(p_phone_no IN OUT VARCHAR2)
IS
BEGIN
p_phone_no := '(' || SUBSTR(p_phone_no,1,3) ||
')' || SUBSTR(p_phone_no,4,3) ||
'-' || SUBSTR(p_phone_no,7);
END format_phone;
/
스토리지 프로세스 호출:
---- :
VARIABLE g_phone_no VARCHAR2(15);
BEGIN
:g_phone_no:='8006330575';
format_phone (:g_phone_no);
END;
/
---- :
VARIABLE g_phone_no VARCHAR2(15);
:g_phone_no:='8006330575';
PRINT g_phone_no
EXECUTE format_phone (:g_phone_no)
PRINT g_phone_no
연습 4:default 값이 있는 매개 변수
---- :
create sequence departments_seq start with 50;
CREATE OR REPLACE PROCEDURE add_dept
(p_name IN dept.dname%TYPE DEFAULT 'unknown',
p_loc IN dept.loc%TYPE DEFAULT 'BJ')
IS
BEGIN
INSERT INTO dept(deptno,
dname, loc)
VALUES (departments_seq.NEXTVAL, p_name, p_loc);
END add_dept;
/
---- :
BEGIN
add_dept;
add_dept ('TRAINING', 'SH');
END;
/
연습 5: 데이터 존재 여부 검사
CREATE OR REPLACE PROCEDURE valid_deptno
(v_deptno IN d.deptno%TYPE,V_RETURN OUT BOOLEAN)
IS
v_dummy VARCHAR2(1);
BEGIN
SELECT 'x'
INTO v_dummy
FROM d
WHERE deptno = v_deptno;
IF SQL%FOUND THEN
V_RETURN:=TRUE;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_RETURN:=FALSE;
END valid_deptno;
/
----
DECLARE
V_FLAG BOOLEAN;
BEGIN
valid_deptno(90,V_FLAG);
if v_flag then
DBMS_OUTPUT.PUT_LINE('The department exist!');
else
DBMS_OUTPUT.PUT_LINE('The department not exist!');
end if;
END;
/
연습6: 직원 증원 과정 만들기
CREATE OR REPLACE PROCEDURE new_emp
(v_ename emp.ename%TYPE,
v_job emp.job%TYPE DEFAULT 'SALESMAN',
v_mgr emp.mgr%TYPE DEFAULT 7839,
v_sal emp.sal%TYPE DEFAULT 1000,
v_comm emp.comm%TYPE DEFAULT 0,
v_deptno emp.deptno%TYPE DEFAULT 30)
IS
V_FLAG BOOLEAN;
BEGIN
valid_deptno(v_deptno,V_FLAG);
IF V_FLAG THEN
INSERT INTO emp
VALUES (seq_empno.NEXTVAL, v_ename, v_job, v_mgr,
TRUNC (SYSDATE, 'DD'), v_sal, v_comm, v_deptno);
ELSE
DBMS_OUTPUT.PUT_LINE('Invalid Deptno ,try again!');
END IF;
END new_emp;
/
연습 7: 페이지 조회
create or replace procedure TABLEPAGE_SELECT
(v_page_size number,v_current_page number)
as
cursor c(v_page_size number,v_current_page number) is SELECT *
FROM (select rownum rn,emp.*
FROM emp WHERE rownum <= v_page_size*v_current_page)
WHERE rn >= (v_page_size*v_current_page-(v_page_size-1));
begin
dbms_output.put_line('pagesize : '||v_page_size||' rows');
dbms_output.put_line('current page : '||v_current_page||' page');
for r in c(v_page_size,v_current_page) loop
dbms_output.put_line('employee name : '||r.ename||' employee''s salary : '||r.sal);
end loop;
end;
/
:
exec TABLEPAGE_SELECT(5,2);
연습 8: 로컬 동적 SQL 문(execute immediate)
create or replace procedure proc_test
(
table_name in varchar2, --
field1 in varchar2, --
datatype1 in varchar2, --
field2 in varchar2, --
datatype2 in varchar2 --
) as
str_sql varchar2(500);
begin
str_sql:='create table '||table_name||'('||field1||' '||datatype1||','||field2||' '||datatype2||')';
execute immediate str_sql; -- DDL
exception
when others then
null;
end ;
/
동적 문에 값 전송(USING 자문)
declare
l_depnam varchar2(20) := 'testing';
l_loc varchar2(10) := 'Dubai';
begin
execute immediate 'insert into dept values (:1, :2, :3)'
using 50, l_depnam, l_loc;
commit;
end;
procedure용 암호화(Wrap 암호화)
사용법:
wrap의 사용법은 비교적 간단하다. 명령 하나로 암호화를 실현할 수 있다. 다음은 명령의 형식이다.
wrap iname=input_file [ oname=output_file ]
iname: 지정한 것은 원본 파일입니다
oname: 변환된 암호화 파일을 지정합니다. oname 옵션은 wrap 명령을 생략하면 자동으로 파일 이름이 똑같은 암호화 파일을 생성합니다. 접미사는 다음과 같습니다.plb, 물론 당신도 자신의 이름을 지정할 수 있습니다.
컴파일 방법 실행: SQLplus 환경에서 @outputfile.plb
주: 현재 이 암호화 방식은 해독되었습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.