日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游标练习

發布時間:2024/1/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游标练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


record類型示例(%type):
set serveroutput on
declare
v_empno emp.empno%type;
type? emp_record is record
(ename? emp.ename%type,
sal???? emp.sal%type,
deptno? emp.deptno%type);
v_emp_rec? emp_record;
begin
? select ename,sal,deptno into v_emp_rec from emp where empno=&v_empno;
? dbms_output.put_line('Employees name is: '||v_emp_rec.ename);
? dbms_output.put_line('Employees salary is: '||v_emp_rec.sal);
? dbms_output.put_line('Employees deptno is: '||v_emp_rec.deptno);
end;
/

declare
? type emp_record is record(ename emp.ename%type, sal emp.sal%type, deptno emp.deptno%type);
? v_emp_rec emp_record;
begin
? select ename, sal, deptno into v_emp_rec from emp where empno = #
? dbms_output.put_line(v_emp_rec.ename || ' ' || v_emp_rec.sal || ' ' || v_emp_rec.deptno);
end;
/




record類型示例(%rowtype)
declare
? v_emp_rec? emp%rowtype;

begin
? select * into v_emp_rec from emp where empno=#
? dbms_output.put_line('Employees name is: '||v_emp_rec.ename);
? dbms_output.put_line('Employees salary is: '||v_emp_rec.sal);
? dbms_output.put_line('Employees deptno is: '||v_emp_rec.deptno);
? dbms_output.put_line('Employees hiredate is: '||v_emp_rec.hiredate);
end;
/

record類型示例(%rowtype),如果日期類型不對,可以用to_char函數轉換
declare
? v_emp_rec? emp%rowtype;

begin
? select * into v_emp_rec from emp where empno=#
? dbms_output.put_line('Employees name is: '||v_emp_rec.ename);
? dbms_output.put_line('Employees salary is: '||v_emp_rec.sal);
? dbms_output.put_line('Employees deptno is: '||v_emp_rec.deptno);
? dbms_output.put_line('Employees hiredate is: '||to_char(v_emp_rec.hiredate,'yyyy-mm-dd'));
end;
/




table類型示例(只有一列數據需要顯示):
SQL> declare
? 2??? type emp_table is table of emp.ename%type index by binary_integer;
? 3??? v_emp_table emp_table;
? 4? begin
? 5??? select ename into v_emp_table(1) from emp where empno = 7788;
? 6??? select ename into v_emp_table(2) from emp where empno = 7369;
? 7??? select ename into v_emp_table(3) from emp where empno = 7499;
? 8??? dbms_output.put_line('Name is: ' || v_emp_table(1));
? 9??? dbms_output.put_line('Name is: ' || v_emp_table(2));
?10??? dbms_output.put_line('Name is: ' || v_emp_table(3));
?11? end;
?12? /
Name is: SCOTT
Name is: SMITH
Name is: ALLEN
PL/SQL procedure successfully completed

table類型示例(有多列數據需要顯示):
declare
? type emp_tab_ename is table of emp.ename%type index by binary_integer;
? type emp_tab_sal is table of emp.sal%type index by binary_integer;
? v_emp_tab_ename emp_tab_ename;
? v_emp_tab_sal?? emp_tab_sal;
begin
? select ename into v_emp_tab_ename(1) from emp where empno = 7788;
? select ename into v_emp_tab_ename(2) from emp where empno = 7369;
? select ename into v_emp_tab_ename(3) from emp where empno = 7499;
? select sal into v_emp_tab_sal(1) from emp where empno = 7788;
? select sal into v_emp_tab_sal(2) from emp where empno = 7369;
? select sal into v_emp_tab_sal(3) from emp where empno = 7499;
? dbms_output.put_line('Name is: ' || v_emp_tab_ename(1) ||' Salary is: ' || v_emp_tab_sal(1));
? dbms_output.put_line('Name is: ' || v_emp_tab_ename(2) ||' Salary is: ' || v_emp_tab_sal(2));
? dbms_output.put_line('Name is: ' || v_emp_tab_ename(3) ||' Salary is: ' || v_emp_tab_sal(3));
end;
/






如果要處理多行多列數據:
在table類型里嵌套record就可以處理多行多列
declare
?type emp_table_type is table of emp%rowtype index by binary_integer;
?v_emp_table_type? emp_table_type;
begin
? select * into v_emp_table_type(1) from emp where empno=7788;
? select * into v_emp_table_type(2) from emp where empno=7369;
? dbms_output.put_line('7788 Ename is: '||v_emp_table_type(1).ename);
? dbms_output.put_line('7788 salary is: '||v_emp_table_type(1).sal);
? dbms_output.put_line('7788 Department is: '||v_emp_table_type(1).deptno);
? dbms_output.put_line('7369 Ename is: '||v_emp_table_type(2).ename);
? dbms_output.put_line('7369 salary is: '||v_emp_table_type(2).sal);
? dbms_output.put_line('7369 Department is: '||v_emp_table_type(2).deptno);
end;
/








DML操作可以同時處理多行

pl/sql里嵌套dml操作(可能影響多行,需注意)
select 默認只能處理單行數據
dml可以處理多行數據
1 插入數據

插入數據示例:
declare
? v_id?? t1.id%type;
? v_name t1.name%type;
? v_dsc? t1.dsc%type;
? t1_rcd t1%rowtype;
begin
? v_id?? := 10;
? v_name := 'tom';
? v_dsc? := 12;
? insert into t1 values (v_id, v_name, v_dsc);
? commit;
? select * into t1_rcd from t1 where id = v_id;
? dbms_output.put_line('T1 record is : ' || t1_rcd.id || ',' ||t1_rcd.name || ',' || t1_rcd.dsc);
end;
/



插入示例:
begin
? insert into t1 select * from t1;
? commit;
end;
/




更新示例:
declare
? v_name t1.name%type := 'rose';
begin
? update t1 set name = v_name where id = 10;
? commit;
end;
/



刪除示例:
declare
? v_id t1.id%type;
begin
? v_id:=10;
? delete from t1 where id=v_id;
? commit;
end;
/



pl/sql中使用事務控制
?DECLARE
?? v_deptno dept.deptno%TYPE := 20;
?BEGIN
?? DELETE FROM dept WHERE deptno = v_deptno;
?? COMMIT;
?EXCEPTION
?? WHEN OTHERS THEN
???? ROLLBACK;
?end;






cursor游標
oracle在執行sql語句時,為sql語句所分配的一個私有的內存區域
當oracle在執行sql,會建立一個cursor(私有的內存區域)??? ?
默認:建立隱式游標(select,一次只能處理一行數據)
隱式游標特點:
1 oracle自動創建
2 自動open
3 數據處理完成自動close
4 select一次只能處理一行數據

隱式游標用于處理select insert? update? delete語句


顯示游標:由開發人員定義,可以通過循環方式處理多行數據(select)
1 開發人員按需定義
2 手工open
3 fetch取值(通過循環讀取數據)
4 手工close

顯示游標用于處理多行select語句







隱式游標:一次只能返回一行結果(不需要定義,默認)
顯示游標:需要用戶提前定義,可以通過循環的方式處理游標里的sql語句,返回多行結果

隱式游標的屬性:
sql%rowcout 統計在游標中處理的記錄數
sql%found?? 如果在游標中能找到符合條件的一條記錄,結果為true
sql%notfound 如果在游標中能找不到符合條件的一條記錄,結果為true
sql%open??? 判斷游標是否打開,在隱式游標中默認游標自動打開





隱式游標的幾個屬性:
truncate table t1;
sql%notfound屬性
declare
? v_id t1.id%type;
begin
? v_id:=10;
? update t1 set id=20 where id=v_id;
? if sql%notfound then
? insert into t1(id) values (v_id);
? commit;
? end if;
end;
/


sql%found屬性
declare
? v_id t1.id%type;
begin
? v_id:=10;
? delete from t1? where id=v_id;
? if sql%found then
? dbms_output.put_line('T1 record is delete!');
? commit;
? end if;
end;
/

轉載于:https://blog.51cto.com/duxiutemp/1875888

總結

以上是生活随笔為你收集整理的游标练习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。