Oracle 저장 프로 세 스 총화

7248 단어 OacleGo
Oracle 저장 프로 세 스 총화

1、      

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、    

    :=  ;

E.g:

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;

E.g

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     

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 binary_integer    Table    ,     ,    :type TestArray is

table of info,                   :varArray myPackage.TestArray; varArray := new myPackage.TestArray();

end TestArray;

7.      Oracle Cursor      ,             。           ,             :

(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 = &apos;A&apos; 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;


좋은 웹페이지 즐겨찾기