隨筆-9  評(píng)論-168  文章-266  trackbacks-0
          存儲(chǔ)過(guò)程
          注 : 
          (1)在procedure中想用ddl,就必須用execute   immediat 'create table text1(id int not null primary key)';
          且必須顯授權(quán)(grant create any table to 用戶名),否則報(bào)'insufficient privileges',無(wú)權(quán)限.
          (2)每條語(yǔ)句都需以';'結(jié)尾.
          1.基本語(yǔ)法 : 創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,如果存在就覆蓋.  (注:as/is沒(méi)區(qū)別,只是兼容別的SQL而已)
          create or replace procedure  過(guò)程名(參數(shù)1 in number ,參數(shù)2 in number) is
          變量1 integer:=0;
          變量2 date;
          exp   exception;  --定義異常
          begin
              --存儲(chǔ)過(guò)程中調(diào)用DDL,必須用動(dòng)態(tài)SQL方法
              execute  immediate ' create table testtable (testid int not null primary key,testname varchar2(10) ) ';
              execute   immediate   'insert   into   testtable values(1,110) '; 
             raise   exp;    --拋出異常
          exception        --異常處理
              when   exp   then 
              dbms_output.put_line( '執(zhí)行成功1 ');    --控制臺(tái)打印
              when   others   then 
              dbms_output.put_line( '執(zhí)行失敗0 '); 
          end;
          2.基本語(yǔ)句:
          (1)變量賦值
          <1>變量初始化賦值:=值;
          <2>變量賦值: select ....into... from ....;     --select ... from ... 方法在存儲(chǔ)過(guò)程中時(shí)的格式
          select name1,name2 into var1,var2 from table1 
          (2)For 循環(huán)
          For ... in ... LOOP
          --執(zhí)行語(yǔ)句
          end LOOP;
          <1>循環(huán)遍歷游標(biāo)
          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>循環(huán)遍歷數(shù)組
           create or replace procedure test(varArray in myPackage.TestArray) as
          --(輸入?yún)?shù)varArray 是自定義的數(shù)組類型,定義方式見(jiàn)標(biāo)題6)
          i number;
          begin
          i := 1;  --存儲(chǔ)過(guò)程數(shù)組是起始位置是從1開(kāi)始的,與java、C、C++等語(yǔ)言不同。因?yàn)樵贠racle中本是沒(méi)有數(shù)組
          的概念的,數(shù)組其實(shí)就是一張
          --表(Table),每個(gè)數(shù)組元素就是表中的一個(gè)記錄,所以遍歷數(shù)組時(shí)就相當(dāng)于從表中的第一條記錄開(kāi)始遍歷
          for i in 1..varArray.count LOOP     
          dbms_output.putline(&apos;The No.&apos;|| i || &apos;record in varArray is:&apos;||varArray(i));   
           end LOOP;
          end test;
          3.代碼拋出異常用raise (異常名);
          4.游標(biāo) : 
          (1)系統(tǒng)級(jí)游標(biāo):cursor SYS_REFCURSOR;只能通過(guò)open方法打開(kāi)和賦值
          OPEN cursor FOR select name1,name2 from table1 where a='1';  --sql語(yǔ)法
          LOOP
              FETCH cursor INTO name1,name2;    --只能通過(guò)fetch into 打開(kāi)和遍歷
              exit when cursor%NOTFOUND;         --可用三個(gè)狀態(tài):%NOTFOUND(未找到記錄);%FOUND(找到記
          錄);%ROWCOUNT(當(dāng)前游標(biāo)指向的行位置)
               dbms_output.putline(name1||name2);
          END LOOP;
          5.連接運(yùn)算符 : || ,即'ABC'||'123' : ABC123
          6.單行注釋: --;多行:/**/;
          posted on 2011-06-20 17:12 紫蝶∏飛揚(yáng)↗ 閱讀(998) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)
          主站蜘蛛池模板: 巨野县| 宜都市| 清流县| 清水河县| 大宁县| 新绛县| 上犹县| 周至县| 西城区| 井冈山市| 民乐县| 缙云县| 广宁县| 平昌县| 洛扎县| 金堂县| 威宁| 刚察县| 临武县| 宜昌市| 宝清县| 图片| 常德市| 平顶山市| 界首市| 原平市| 沙田区| 古蔺县| 磴口县| 岑巩县| 永清县| 贵港市| 中卫市| 龙口市| 连山| 阿拉尔市| 华安县| 昌乐县| 昌邑市| 涡阳县| 罗源县|