国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 庐江县| 顺平县| 沁源县| 杭州市| 正镶白旗| 习水县| 嘉善县| 温泉县| 永寿县| 南康市| 中阳县| 奉贤区| 长垣县| 确山县| 甘谷县| 丰镇市| 如皋市| 乾安县| 紫阳县| 大足县| 子洲县| 奈曼旗| 临沂市| 香格里拉县| 顺昌县| 遵义县| 蓝田县| 阿克陶县| 锡林郭勒盟| 阿拉善左旗| 西乌珠穆沁旗| 温泉县| 安塞县| 河源市| 伊吾县| 耒阳市| 乳源| 崇明县| 黄石市| 紫金县| 洛隆县|