国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle PL/SQL游標(biāo)的學(xué)習(xí)

2024-08-29 13:41:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
   一 游標(biāo)是什么
  
  游標(biāo)字面理解就是游動(dòng)的光標(biāo)。
  
  用數(shù)據(jù)庫(kù)語(yǔ)言來(lái)描述:游標(biāo)是映射在結(jié)果集中一行數(shù)據(jù)上的位置實(shí)體,有了游標(biāo),用戶就可以訪問(wèn)結(jié)果集中的任意一行數(shù)據(jù)了,將游標(biāo)放置到某行后,即可對(duì)該行數(shù)據(jù)進(jìn)行操作,例如提取當(dāng)前行的數(shù)據(jù)等。
  
  二 游標(biāo)的分類
  
  顯式游標(biāo)和隱式游標(biāo)
  
  顯式游標(biāo)的使用需要4步:
  
  1. 聲明游標(biāo)
  
  CURSOR mycur(vartype number) is
  select emp_no,emp_zc from cus_emp_basic
  where com_no = vartype;
  
  2. 打開(kāi)游標(biāo)
  
  open mycur(000627)
  
  注:000627是參數(shù)
  
  3. 讀取數(shù)據(jù)
  
  fetch mycur into varno, varPRice;
  
  4. 關(guān)閉游標(biāo)
  
  close mycur;
  
  三 游標(biāo)的屬性
  
  Oracle 游標(biāo)有4個(gè)屬性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。
  
  %ISOPEN判定游標(biāo)是否被打開(kāi),假如打開(kāi)%ISOPEN等于true,否則等于false;
  
  %FOUND %NOTFOUND判定游標(biāo)所在的行是否有效,假如有效,則%FOUNDD等于true,否則等于false;
  
  %ROWCOUNT返回當(dāng)前位置為止游標(biāo)讀取的記錄行數(shù)。
  
  四 示例
  
  set serveroutput on;
  declare
  varno varchar2(20);
  varprice varchar2(20);
  
  CURSOR mycur(vartype number) is
  select emp_no,emp_zc from cus_emp_basic
  where com_no = vartype;
  begin
  
  if mycur%isopen = false then
  open mycur(000627);
  end if;
  
  fetch mycur into varno,varprice;
  while mycur%found
  loop
  dbms_output.put_line(varno','varprice);
  if mycur%rowcount=2 then
  exit;
  end if;
  fetch mycur into varno,varprice;
  end loop;
  
  close mycur;
  end;
  
  PL/SQL記錄的結(jié)構(gòu)和C語(yǔ)言中的結(jié)構(gòu)體類似,是由一組數(shù)據(jù)項(xiàng)構(gòu)成的邏輯單元。
  
  PL/SQL記錄并不保存在數(shù)據(jù)庫(kù)中,它與變量一樣,保存在內(nèi)存空間中,在使用記錄時(shí)候,要首先定義記錄結(jié)構(gòu),然后聲明記錄變量。可以把PL/SQL記錄看作是一個(gè)用戶自定義的數(shù)據(jù)類型。
  
  set serveroutput on;
  declare
  
  type person is record
  (
  empno cus_emp_basic.emp_no%type,
  empzc cus_emp_basic.emp_zc%type);
  
  person1 person;
  
  cursor mycur(vartype number)is
  select emp_no,emp_zc from cus_emp_basic
  where com_no=vartype;
  
  begin
  if mycur%isopen = false then
  open mycur(000627);
  end if;
  
  loop
  fetch mycur into person1;
  exit when mycur%notfound;
  dbms_output.put_line('雇員編號(hào):'person1.empno',地址:'person1.empzc);
  end loop;
  
  close mycur;
  end;
  
  典型游標(biāo)for 循環(huán)
  
  游標(biāo)for循環(huán)示顯示游標(biāo)的一種快捷使用方式,它使用for循環(huán)依次讀取結(jié)果集中的行數(shù)據(jù),當(dāng)form循環(huán)開(kāi)始時(shí),游標(biāo)自動(dòng)打開(kāi)(不需要open),每循環(huán)一次系統(tǒng)自動(dòng)讀取游標(biāo)當(dāng)前行的數(shù)據(jù)(不需要fetch),當(dāng)退出for循環(huán)時(shí),游標(biāo)被自動(dòng)關(guān)閉(不需要使用close)。使用游標(biāo)for循環(huán)的時(shí)候不能使用open語(yǔ)句,fetch語(yǔ)句和close語(yǔ)句,否則會(huì)產(chǎn)生錯(cuò)誤。
  
  set serveroutput on;
  declare
  
  cursor mycur(vartype number)is
  select emp_no,emp_zc from cus_emp_basic
  where com_no=vartype;
  
  begin
  for person in mycur(000627) loop
  dbms_output.put_line('雇員編號(hào):'person.emp_no',地址:'person.emp_zc);
  end loop;
  end;


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 太和县| 迁西县| 郧西县| 桃源县| 阳信县| 贡嘎县| 柳河县| 安阳县| 丹巴县| 天津市| 伊宁市| 郧西县| 从江县| 吉木萨尔县| 清水县| 都匀市| 怀宁县| 惠来县| 沈丘县| 天峻县| 独山县| 芜湖县| 射洪县| 枝江市| 邮箱| 大港区| 祁东县| 西盟| 监利县| 芜湖县| 金门县| 扎囊县| 沙雅县| 内乡县| 蚌埠市| 寿阳县| 黎平县| 垣曲县| 林口县| 赤城县| 麻江县|