Oracle 스토리지 프로세스 요약(컨텐트 오프로드)
create or replace procedure test(var_name_1 in type,var_name_2 out type) as
-- ( )
begin
--
end test;
-- E.g:
create or replace procedure test(workDate in Date) is
begin
dbms_output.putline('The input date is:'||to_date(workDate,'yyyy-mm-dd'));
end test;
2. 변수 할당
변수 이름: = 값;
create or replace procedure test(workDate in Date) is
x number(4,2);
begin
x := 1;
end test;
3. 판단문:
if 비교 then begin end;end if;
eg.
create or replace procedure test(x in number) is
begin
if x >0 then
begin
x := 0 - x;
end;
end if;
if x = 0 then
begin
x: = 1;
end;
end if;
end test;
4. For 루프
For ... in ... LOOP
--
end LOOP;
(1) 루프 사이클
create or replace procedure test() as
Cursor cursor is select name from student; name varchar(20);
begin
for name in cursor LOOP
begin
dbms_output.putline(name);
end;
end LOOP;
end test;
(2) 순환 반복 그룹
create or replace procedure test(varArray in myPackage.TestArray) as
--( varArray , 6)
i number;
begin
i := 1; -- 1 , java、C、C++ 。 Oracle ,
-- (Table), ,
for i in 1..varArray.count LOOP
begin
dbms_output.putline('The No.'|| i || 'record in varArray is:'||varArray(i));
end LOOP;
end test;
5.While 주기
while 조건문 LOOP
begin
end;
end LOOP;
E.g
create or replace procedure test(i in number) as
begin
while i < 10 LOOP
begin
i:= i + 1;
end;
end LOOP;
end test;
6, 배열
먼저 하나의 개념을 명확히 한다. Oracle에는 수조의 개념이 없었는데 수조는 사실 하나의 표(Table)이고 모든 수조 요소는 표의 기록이다.
배열을 사용할 때 Oracle에서 정의한 배열 유형을 사용하거나 필요에 따라 배열 유형을 정의할 수 있습니다.
(1) Oracle 자체 배열 유형 사용
x array; --
e.g:
create or replace procedure test(y out array) is
x array;
begin
x := new array();
y := x;
end test;
(2) 사용자 정의 배열 유형(사용자 정의 데이터 유형은 쉽게 관리할 수 있도록 Package를 만드는 것이 좋습니다)
E.g(사용자 정의 사용 제목 4.2 참조)
create or replace package myPackage is
-- Public type declarations type info is record( name varchar(20), y number);
type TestArray is table of info index by binary_integer; --여기에 TestArray의 유형 데이터를 설명했는데 사실은 Info 데이터 형식을 저장하는 Table일 뿐이고 TestArray는 표입니다. 두 개의 필드가 있는데 하나는
name, 하나는 y입니다.여기서 주의해야 할 것은 Index by binaryintegerTable의 색인 항목을 작성하거나 쓰지 않고 type TestArray is로 작성할 수 있습니다.
table of info, 쓰지 않으면 그룹을 사용할 때 초기화합니다: varray myPackage.TestArray; varArray := new myPackage.TestArray();
end TestArray;
7. 커서의 사용은 Oracle에서 커서를 사용하는 데 매우 유용하며 임시 테이블의 검색 결과를 훑어보는 데 사용된다.관련 방법과 속성도 많고,
현재 자주 사용하는 용법만 하나 둘 소개한다.
(1) Cursor형 커서 (매개변수 전송에는 사용할 수 없음)
create or replace procedure test() is
cusor_1 Cursor is select std_name from student where ...; --Cursor 1 cursor_2 Cursor;
begin
select class_name into cursor_2 from class where ...; --Cursor 2
-- For x in cursor LOOP .... end LOOP; Cursor
end test;
(2)SYS_REFCURSOR형 커서, 이 커서는 Oracle이 미리 정의한 커서로 매개 변수를 전달할 수 있다
create or replace procedure test(rsCursor out SYS_REFCURSOR) is
cursor SYS_REFCURSOR; name varhcar(20);
begin
OPEN cursor FOR select name from student where ... --SYS_REFCURSOR OPEN
LOOP
fetch cursor into name --SYS_REFCURSOR fetch into exit when cursor%NOTFOUND; --SYS_REFCURSOR : ---%NOTFOUND( ) %FOUND( ) ---%ROWCOUNT( )
dbms_output.putline(name);
end LOOP;
rsCursor := cursor;
end test;
다음은 앞서 설명한 스토리지 프로세스의 사용법을 적용하기 위한 간단한 예입니다.
현재 두 장의 표가 존재한다고 가정하면 한 장은 학생성적표(studnet), 한 장은 stdId, math,article,language,music,sport,total,average,step 한 장은 학생과외성적표(out school), 한 장은 stdId,parctice,comment
저장 프로세스를 통해 각 학생의 총 성적과 평균 성적을 자동으로 계산하는 동시에 학생이 과외 과정에서 A로 평가되면 총 성적에 20점을 더한다.
create or replace procedure autocomputer(step in number) is
rsCursor SYS_REFCURSOR;
commentArray myPackage.myArray;
math number;
article number;
language number;
music number;
sport number;
total number;
average number;
stdId varchar(30);
record myPackage.stdInfo;
i number;
begin
i := 1;
get_comment(commentArray); -- get_comment()
OPEN rsCursor for select stdId,math,article,language,music,sport from student t where t.step = step;
LOOP
fetch rsCursor into stdId,math,article,language,music,sport; exit when rsCursor%NOTFOUND;
total := math + article + language + music + sport;
for i in 1..commentArray.count LOOP
record := commentArray(i);
if stdId = record.stdId then
begin
if record.comment = 'A' then
begin
total := total + 20;
go to next; -- go to for
end;
end if;
end;
end if;
end LOOP;
<<continue>> average := total / 5;
update student t set t.total=total and t.average = average where t.stdId = stdId;
end LOOP;
end;
end autocomputer;
--
create or replace procedure get_comment(commentArray out myPackage.myArray) is
rs SYS_REFCURSOR;
record myPackage.stdInfo;
stdId varchar(30);
comment varchar(1);
i number;
begin
open rs for select stdId,comment from out_school
i := 1;
LOOP
fetch rs into stdId,comment; exit when rs%NOTFOUND;
record.stdId := stdId;
record.comment := comment;
recommentArray(i) := record;
i:=i + 1;
end LOOP;
end get_comment;
-- myArray
create or replace package myPackage is begin
type stdInfo is record(stdId varchar(30),comment varchar(1));
type myArray is table of stdInfo index by binary_integer;
end myPackage;
주의: 저장 프로세스나 패키지가 생성된 후commit이 필요합니다. 그렇지 않으면 저장 프로세스를 호출할 때'식별자를 찾지 못하거나 저장 프로세스 or 함수가 아니다'call procedurename
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.