隨筆-124  評論-49  文章-56  trackbacks-0
          --1定義標量變量
          --
          (1)定義語法
          變量名 [constant] 數據類型 [not null] [:= | default expr]
          -- constant:用于指定常量。必須指定初始值
          --
           := 用于為變量和常量指定初始值
          --
           expr初始值的pl/sql表達式,可以是文本值、變量、函數等
          --
          示例1:
          v_name varchar2(10);
          v_rate constant 
          number(3,2) := 5.5;
          v_valid boolean 
          not null default false;
          --(2)使用
          --
          變量賦值使用等號前加冒號(:=)
          --
          示例2:
          declare
          v_name 
          varchar2(10);
          v_money 
          number(6,2);
          c_tax_rate constant 
          number(3,2) := -0.03;
          v_tax_money 
          number(6,2);
          begin
           
          select user_name,game_money into v_name,v_money 
           
          from user_info where user_id = 100000;
           v_tax_money :
          = v_money*c_tax_rate;
           dbms_output.put_line(
          'name:'||v_name);
           dbms_output.put_line(
          'money:'||v_money);
           dbms_output.put_line(
          'rate:'||v_tax_money);
          end
          --(3)使用%TYPE屬性
          v_name user_info.user_name%TYPE;
          v_money user_info.game_money
          %TYPE;
          c_tax_rate constant 
          number(3,2) := -0.03;
          v_tax_money v_money
          %TYPE;
          --變量v_name,v_money與user_info表的user_name,game_money列的類型和長度完全一致
          --
          變量v_tax_money與變是v_money的類型和長度完全一致

          --2復合變量
          --
          (1)pl/sql記錄(類似于結構)
          --
           在定義部分定義記錄類型和記錄變量,在執行部分引用該記錄變量
          --
           引用記錄成員時必須要加記錄變量作為前綴(記錄變量。記錄成員)
          --
          示例3:
          declare
          TYPE record_type 
          IS RECORD(
            v_name user_info.
          user_name%TYPE,
            v_money user_info.game_money
          %TYPE
          );
          emp_record record_type;
          begin
           
          select user_name,game_money into emp_record 
           
          from user_info where user_id = 100000;
           dbms_output.put_line(
          'name:'||emp_record.v_name);
           dbms_output.put_line(
          'money:'||emp_record.v_money);
          end
          --(2)pl/sql表(類似于數組)
          --
           pl/sql表與數組區別:下標沒有上下限,個數年沒有限制,下票可以為負值
          --
           必須先在定義部分定義pl/sql表類型和pl/sql表變量,在執行部分引用該pl/sql表變量
          --
          示例4:
          declare
          TYPE name_table_type 
          IS TABLE OF user_info.user_name%TYPE 
            
          INDEX BY BINARY_INTEGER;
          v_name name_table_type;
          begin
           
          select user_name into v_name(-1
           
          from user_info where user_id = 100000;
           dbms_output.put_line(
          'name:'||v_name(-1));
          end
          --(3)嵌套表
          --
          (4)VARRAY(變長數組)

          --3 參照變量
          --
           用于存放數值指針的變量。
          --
          (1)游標變量(REF CURSOR)
          --
           靜態游標:需要在定義游標時指定相應的select語句
          --
           示例5:
          declare
            type c1 
          is ref cursor;--c1為ref cursor類型
            emp_cursor c1;--emp_cursor為游標變量
            v_name user_info.user_name%TYPE;
            v_money user_info.game_money
          %TYPE;
          begin
            
          open emp_cursor for --打開游標變量時指定了對應的select語句
            select user_name,game_money from user_info where  user_id = 100000;
            loop
              
          fetch emp_cursor into v_name,v_money;
              
          exit when emp_cursor%notfound;
              dbms_output.put_line(v_name);
            
          end loop;
          end;
          -- 動態游標:在定義游標變量時不要需指定相應的select語句,而是打開游標時指定select語句
          --
          (2)對象類型變量(REF obj_type)
          --
           是指向對象實例的指針
          --
           示例6:
          create or replace type home_type as object(--建立對象類型
            street varchar2(50),city varchar2(20),
            state 
          varchar2(20),zipcode varchar2(6),
            owner 
          varchar2(10)
          );
          create table homes of home_type;--建表
          insert into homes values('上海路100號','上海','200000','junly');
          commit;
          --對象表homes存放家庭地址及戶主姓名,如每個家庭有四口人,為了同一家庭成員共享家庭地址,
          --
          可使用REF引用home_type對象類型,從而降低占用空間。
          create table person(
            id 
          number(6primary key,
            name 
          varchar2(10),
            addr ref home_type
          );
          insert into person select 1,'junly',ref(p) from homes p where p.owner='junly'
          insert into person select 2,'junl2',ref(p) from homes p where p.owner='junly'
          --person表插入數據時,addr列將存入指向homes表相應數據的地址指針

          --4 LOB變量
          /*用于存儲大批量數據的變量
          (1)內部LOB
           CLOB    支技事務操作   存儲數據庫中   用于存儲大批量字符數據
           BLOB    支技事務操作   存儲數據庫中   用于存儲大批量二進制數據
           NCLOB   支技事務操作   存儲數據庫中   用于存儲大批量字符數據
          (2)外部LOB
           BFILE   不支技事務     存在OS文件中   存儲指向OS文件的指針
          */


          --5非PL/SQL變量
          posted on 2010-07-28 12:01 junly 閱讀(1109) 評論(0)  編輯  收藏 所屬分類: oracle/mysql/sql
          主站蜘蛛池模板: 来宾市| 镇安县| 饶河县| 英德市| 兴隆县| 信丰县| 新丰县| 马尔康县| 仙居县| 重庆市| 弥渡县| 固原市| 西青区| 荃湾区| 高要市| 乐安县| 沁水县| 阿合奇县| 都安| 错那县| 佳木斯市| 和硕县| 个旧市| 辽阳县| 鸡东县| 富顺县| 乌审旗| 荔浦县| 阳高县| 陆丰市| 家居| 抚顺县| 宜都市| 平昌县| 陇南市| 离岛区| 湾仔区| 布尔津县| 略阳县| 佛坪县| 习水县|