PL/SQL developer基礎語法學習(一)之變量

PL/SQL中的變量

1)、聲明

--變量名 類型 :=初始值   v_str varchar2(10):='abc'; 

注意:變量必須在declare語句塊中聲明。

2)、簡單類型

  • number:數字
  • varchar2:變長字符串
  • boolean: 不能輸出 true false null
  • date: 日期 to_date to_char
  • char:定長字符串
  • binary_integer: 計數整數
  • long:2G字符串

3)、標識符規則

a、第一個字符必須是字母(v_)

b、變量名最多包含30個字符

c、不要與數據庫的表或者列同名

d、每一行只能聲明一個變量

e、變量名不能夠使用保留字,如 from、select 等

4)、賦值 :=

I、字符類型必須使用單引號;

II、不可以使用group by;

III、可以使用數學操作符或字符串連接操作符。

5)&

接收客戶端的輸入 。 爲佔位符

6)、實例

declare
--聲明一個字符串
v_str varchar2(20) :='shsxt';
--聲明一個整數
v_num number(5) :=10;
--聲明一個日期
v_date date :=sysdate;
v_date2 date :=to_date('2017-3-9','yyyy-MM-dd');
--聲明一個布爾
v_flag  boolean :=null;
begin
--拼接字符串
dbms_output.put_line(v_str||'-->'||v_num||'-->'||to_char(v_date2,'yyyy-MM-dd'));
--不能輸出布爾    
end;

輸出結果:
shsxt–>10–>2017-03-09


二、複雜類型

1)、%type :字段類型

獲取與指定的字段一致類型,
如 v_empno emp.empno%type;
v_empno2 v_empno%type;
等同於:
v_empno number(4);

2)、%rowtype:行類型

與表結構完全一致,如 v_dept dept%rowtype

實例

/**
數據類型
1、%type -->字段類型
2、%rowtype -->記錄類型
*/
declare
      --定義字符串 存儲 ename的值
      v_ename varchar2(20) :='smith';
      --不用關注字段的類型 與長度 (簡化)
      v_name emp.ename%type :='sss';
      --存儲一條記錄(存在很多 字段)
      v_emp emp%rowtype ;
begin
      v_emp.empno :=100;
      v_emp.sal :=9999;
      dbms_output.put_line('僱員名爲:'||v_name||'編號爲:'||v_emp.empno||'工資'||v_emp.sal);
end;

3)、table (類似於js數組)

a)、創建類型
集中存放:  type 自定義的類型名 is table of 數據類型
散列存放:  type 自定義的類型名 is table of 數據類型 index by binary_integer

b)、聲明變量
集中存放:     變量名  自定義的類型名:= 自定義的類型名(值列表);
散列存放:   變量名  自定義的類型名

實例
(1).散列

declare 
   --1、創建類型
   type t_table is table of dept.dname%type index by binary_integer;
   --2、聲明變量
   v_table t_table;   

begin
   --3、使用變量
   v_table(-1) :='shsxt';
   v_table(5) :='bjsxt';
  --v_table('a') :='bjsxt2';
   dbms_output.put_line( v_table(5)||'-->'|| v_table(-1));

end;

(2).集中

declare 
   --集中存儲
   --定義類型
   type t_table_deptno is table of dept.deptno%type;
   type t_table_empno is table of emp.empno%type;

   --聲明變量
   v_deptno t_table_deptno:=t_table_deptno(20,30,40);
   v_empno t_table_empno :=t_table_empno();
begin
   --使用變量
   dbms_output.put_line(v_deptno(1));
   --訪問第四個元素
   v_deptno.extend;
   v_deptno(4):=50;

   --v_empno.extend;
   --v_empno(1):=7898;
   dbms_output.put_line(v_empno(1));
end;

4)、record(結構體)

類似於結構體,由多個不同類型組合而成複雜類型,與 table 相同“先創建結構體後定 義聲明變量”。

a)、先創建類型
type 類型名 is record(
字段名1 類型1,
字段名2 類型2,
…..
);
b)、再聲明變量
變量名 類型名;

實例:

declare 
     --創建類型
     type t_rec is record(
          empno number(5),
          ename varchar2(20),
          dname dept.dname%type
     );
     --聲明變量
     v_rec t_rec;
begin
     --使用變量
     v_rec.empno :=1000;
     v_rec.ename :='xshuaiwen';
     v_rec.dname :='上海';

     dbms_output.put_line(v_rec.dname||'-->'||v_rec.ename);

end;

5)、遊標
遊標指向結果集的 指針,通過遊標 遍歷操作結果集

1)、分類
- a.隱式遊標(dml語句中)
- b.顯式遊標(靜態遊標、ref遊標)

2)、標準步驟

1)、創建遊標
(2)、聲明遊標
(3)、打開遊標
(4)、使用遊標
(5)、關閉遊標

3)、四個屬性

%rowcount :記錄數
%isopen :是否打開
%found: 存在記錄
%notfound:沒有記錄

4)、實例

declare
  --1、創建並聲明遊標(靜態遊標)
  cursor cur_emp is select * from emp where sal>3000 order by sal desc;
  v_emp emp%rowtype;

begin 
  --3、打開遊標
   open cur_emp;
  --4、使用遊標 (獲取數據)
   fetch cur_emp into v_emp;
   dbms_output.put_line(v_emp.empno||'-->'||v_emp.ename||'-->'||v_emp.sal);

  --5、關閉遊標
  close cur_emp;
exception 
   when  no_data_found then
        dbms_output.put_line('數據未找到'||sqlcode||'-->'||sqlerrm);  
   when too_many_rows then
        dbms_output.put_line('數據超出'||sqlcode||'-->'||sqlerrm);  
   when others then
        dbms_output.put_line('其他異常'||sqlcode||'-->'||sqlerrm);  
end;

後續遊標請看下一篇—————————>>>>>>>>>>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章