PL/SQL 編程

PL/SQL 程序結構:函數

declare 佈局

    聲明部分(聲明變量、類型、遊標以及佈局的存儲過程及函數)spa

begin對象

   執行部分(過程及SQL語句,程序的主要部分,是必須的)it

end;eg(基表爲course):table

declareclass

  v_cno varchar(20) :='001';變量

beginselect

  select * from course where cno=v_cno;數據類型

  delete * from course where cno=v_cno;

end;

------查詢course表中cno=‘001’的數據

------刪除course表中cno=‘001’的數據

 

returning的使用

在須要返回DML語句執行後的信息時使用,講個例子加以說明

本例基表爲student(sno, sname, classno)

declare

    s_no varchar2(20);

    s_name varchar2(40);

begin

   insert into student values('20110001','張三','051')  returning sno,sname into s_no, s_name;

  dbms_output.put_line(s_no);

  dbms_output.put_line(s_name);

end

------將插入的信息之中的sno、sname對應的賦值給s_no,s_name

 

type、%type的使用

type 用於定義類,具體用例子說明

基表爲course(cno,cname,credit)

declare
      type c_rec is record(
          c_cno char(10):=&no,
          c_cname char(40)

);
      rec_course c_rec;              -------rec_course 的類型爲c_rec類
      begin
          select cno,cname into rec_course from course where cno=rec_course.c_cno;
          dbms_output.put_line(rec_course.c_cno||'     '||rec_course.c_cname);
      end;

%type可使定義的變量引用相關字段的數據類型、格式等,例如:

declare

      type c_rec is record(

          c_cno course.cno%type:=&no,              --c_cno引用了course表中的cno的數據類型和寬度

          c_cname course.cname%type);           --c_cname引用了course表中cname的數據類型和寬度

       rec_course c_rec;

begin

       select cno,cname into rec_course from course where cno=rec_course.c_cno ;

       bdms_output.put_line(rec_course.c_cno||'    '||rec_course.c_cname);

end;

上例中的‘&no’表示用戶自行輸入的數據做爲c_cno的默認值

%rowtype返回一個記錄類型,例如:

declare

      c_cno course.cno%type:=&no;

      rec_course course%rowtype;                

begin

      select * into rec_course from course where cno=c_cno;   

                                                                  ----rec_course中引用了course表中知足條件的一行數據

      dbms_output.put_line(‘課程名:’||rec_course.cname||'  課程號: '||rec_course.cno);

end;

表類型

declare

  type table_type_name is table of  table_name%rowtype index by binary_integer;

  .......

begin

  .......

end;

其中:table_type_name 是表類型的名稱,table_name 是參照表的名稱,is table 表示該類型爲表類型

eg:

declare
  type sc_table is table of sc%rowtype index by binary_integer;
  w_sc sc_table;
begin
  select sno,cno,grade into w_sc(1).sno,w_sc(1).cno,w_sc(1).grade  from sc where sno='20110002' ;
  dbms_output.put_line(w_sc(1).sno||' '||w_sc(1).cno||' '||w_sc(1).grade);
end;

 注意:表類型的賦值不能直接賦值給表對象,即 select  *  into  w_sc  from sc where sno='20110001'; 這樣複製是錯誤的,應該使用下標,如以上的示例

相關文章
相關標籤/搜索