ASP.NET

推荐列表 站点导航

当前位置:首页 > 脚本编程 > ASP.NET >

源码PL/SQL从入门到精通第八章记录与集合Part2

来源:网络整理  作者:网友投稿  发布时间:2020-12-29 04:04
--代码8 8使用select语句为记录赋值DECLARETYPEemp_recISRECORD(empnoNUMBER(10),enameVARCHAR2(30),jobVARCHAR2(30));--声明记录类型的变量...
--代码8.8 使用select语句为记录赋值 DECLARE TYPE emp_rec IS RECORD( empno NUMBER(10), ename VARCHAR2(30), job VARCHAR2(30)); --声明记录类型的变量 emp_info emp_rec; BEGIN --为记录类型赋值 SELECT empno, ename, job INTO emp_info FROM emp WHERE empno = 7369; --输出记录类型的值 DBMS_OUTPUT.put_line('员工编号:' || emp_info.empno || CHR(13) || '员工姓名:' || emp_info.ename || CHR(13) || '员工职别:' || emp_info.job); END; --代码8.9 在Insert语句中使用记录插入数据 DESC dept; INSERT INTO dept SELECT * FROM dept_copy; SELECT * FROM dept_copy; SELECT * FROM dept; DECLARE TYPE dept_rec IS RECORD( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); --定义2个记录类型的变量 dept_row dept%ROWTYPE; dept_norow dept_rec; BEGIN --为记录类型赋值 dept_row.deptno := 70; dept_row.dname := '工程部'; dept_row.loc := '上海'; dept_norow.deptno := 80; dept_norow.dname := '电脑部'; dept_norow.loc := '北京'; --插入%ROWTYPE定义的记录变量到表中 INSERT INTO dept VALUES dept_row; --插入普通记录变量的值到表中 INSERT INTO dept VALUES dept_norow; --向数据库提交对表的更改 COMMIT; END; SELECT * FROM dept; --代码8.10 在Update语句中使用记录更新数据 DECLARE TYPE dept_rec IS RECORD( --定义记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); dept_info dept_rec; --定义记录类型的变量 BEGIN SELECT * INTO dept_info FROM dept WHERE deptno = 80; --使用SELECT语句初始化记录类型 dept_info.dname := '信管部'; --更新记录类型的值 UPDATE dept SET ROW = dept_info WHERE deptno = dept_info.deptno; --在UPDATE中使用记录变量更新表 END; --代码8.11 在DML语句中使用Returning返回受影响的行 DECLARE TYPE dept_rec IS RECORD( --定义记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); dept_info dept_rec; --定义记录类型的变量 dept_returning dept%ROWTYPE; --定义用于返回结果的记录类型 BEGIN SELECT * INTO dept_info FROM dept WHERE deptno = 80; --使用SELECT语句初始化记录类型 dept_info.dname := '信管部'; --更新记录类型的值 UPDATE dept SET ROW = dept_info WHERE deptno = dept_info.deptno --在UPDATE中使用记录变量更新表,返回受影响的行到记录 RETURNING deptno, dname, loc INTO dept_returning; dept_info.deptno := 12; dept_info.dname := '维修部'; INSERT INTO dept --插入新的部门编号记录,返回受影响的行的记录 VALUES dept_info RETURNING deptno, dname, loc INTO dept_returning; DELETE FROM dept --删除现有的部门,返回受影响的行的记录 WHERE deptno = dept_info.deptno RETURNING deptno, dname, loc INTO dept_returning; END; --使用嵌套记录 DESC emp; DECLARE TYPE dept_rec IS RECORD( --定义部门记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); TYPE emp_rec IS RECORD( --定义员工记录类型 v_empno NUMBER, v_ename VARCHAR2(20), v_job VARCHAR2(9), v_mgr NUMBER(4), v_hiredate DATE, v_sal NUMBER(7, 2), v_comm NUMBER(7, 2), v_dept_rec dept_rec --定义嵌套的员工记录 ); emp_info emp_rec; --员工记录 dept_info dept_rec; --临时部门记录 BEGIN SELECT * --从数据库中取出员工部门的记录 INTO dept_info FROM dept WHERE deptno = (SELECT deptno FROM emp WHERE empno = 7369); emp_info.v_dept_rec := dept_info; --将部门信息记录赋给嵌套的部门记录 SELECT empno, ename, job, mgr, --为emp表赋值 hiredate, sal, comm INTO emp_info.v_empno, emp_info.v_ename, emp_info.v_job, emp_info.v_mgr, emp_info.v_hiredate, emp_info.v_sal, emp_info.v_comm FROM emp WHERE empno = 7369; --输出嵌套记录的员工所在部门信息 DBMS_OUTPUT.PUT_LINE('员工所属部门为:' || emp_info.v_dept_rec.dname); END; --8.2.2 定义索引表 -- 雇佣日期索引表集合 TYPE hiredate_idxt IS TABLE OF DATE INDEX BY PLS_INTEGER; -- 部门编号集合 TYPE deptno_idxt IS TABLE OF dept.deptno%TYPE NOT NULL INDEX BY PLS_INTEGER; --记录类型的索引表,这个结构允许在PL/SQL程序中创建本的一个本地副本 TYPE emp_idxt IS TABLE OF emp%ROWTYPE INDEX BY NATURAL; -- 由部门名称标识的部门记录的集合 TYPE deptname_idxt IS TABLE OF dept%ROWTYPE INDEX BY dept.dname%TYPE; -- 定义集合的集合 TYPE private_collection_tt IS TABLE OF deptname_idxt INDEX BY VARCHAR2(100); --代码8.13 定义并操作索引表 DECLARE TYPE idx_table IS TABLE OF VARCHAR(12) INDEX BY PLS_INTEGER; --定义索引表类型 v_emp idx_table; --定义索引表变量 BEGIN v_emp(1) := '史密斯'; --随机的为索引表赋值 v_emp(20) := '克拉克'; v_emp(40) := '史瑞克'; v_emp(-10) := '杰瑞'; IF v_emp.EXISTS(40) THEN DBMS_OUTPUT.PUT_LINE(v_emp(40)); END IF; -- EXCEPTION -- WHEN OTHERS THEN -- DBMS_OUTPUT.PUT_LINE(SQLERRM); END; --代码8.15 使用%Type类型的索引键 DECLARE --定义记录类型的索引表,以dname作为索引键类型 --dname是VARCHAR2(14)类型 TYPE idx_dept_table IS TABLE OF dept%ROWTYPE INDEX BY dept.dname%TYPE; --声明记录类型的变量 v_dept idx_dept_table; --定义一个游标,用来查询dept表 CURSOR dept_cur IS SELECT * FROM dept; BEGIN --使用游标FOR循环打开游标,检索数据 FOR deptrow IN dept_cur LOOP --为索引表中的元素赋值 v_dept(deptrow.dname) := deptrow; --输出部门的LOC列信息 DBMS_OUTPUT.put_line(v_dept(deptrow.dname).loc); END LOOP; END; SELECT * FROM dept; DECLARE --定义以VARCHAR2作为索引键的索引表 TYPE idx_deptno_table IS TABLE OF NUMBER(2) INDEX BY VARCHAR2(20); --声明记录类型的变量 v_deptno idx_deptno_table; BEGIN --为索引表赋值 v_deptno('财务部') := 10; v_deptno('研究部') := 20; v_deptno('销售部') := 30; --引用索引表的内容 DBMS_OUTPUT.put_line('销售部编号为:' || v_deptno('销售部')); END; --代码8.16 嵌套表定义和表变量声明 DECLARE TYPE dept_table IS TABLE OF dept%ROWTYPE; --部门信息嵌套表 TYPE emp_name_table IS TABLE OF VARCHAR2(20); --员工名称嵌套表 TYPE deptno_table IS TABLE OF NUMBER(2); --部门编号嵌套表 dept_info dept_table; --声明嵌套表变量 --声明并初始化嵌套表变量 emp_name_info emp_name_table := emp_name_table('张小三', '李斯特'); deptno_info deptno_table := deptno_table(20, 30, 40); BEGIN NULL; END; --代码8.17 嵌套表的初始化与访问 DECLARE TYPE emp_name_table IS TABLE OF VARCHAR2(20); --员工名称嵌套表 TYPE deptno_table IS TABLE OF NUMBER(2); --部门编号嵌套表 deptno_info deptno_table; emp_name_info emp_name_table := emp_name_table('张小三', '李斯特'); BEGIN DBMS_OUTPUT.put_line('员工1:' || emp_name_info(1)); --访问嵌套表元素 DBMS_OUTPUT.put_line('员工2:' || emp_name_info(2)); IF deptno_info IS NULL --判断嵌套表是否被初始化 THEN deptno_info := deptno_table(NULL, NULL, NULL, NULL, NULL); END IF; -- deptno_info.EXTEND(5); --扩充元素的个数 FOR i IN 1 .. 5 --循环遍历嵌套表元数个数 LOOP deptno_info(i) := i * 10; END LOOP; --显示部门个数 DBMS_OUTPUT.put_line('部门个数:' || deptno_info.COUNT); END;

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/jiaob/net/10539.shtml

最新文章
如何给asp.net core写个中间 如何给asp.net core写个中间

时间:2021-01-03

.Net微信网页开发解决用户 .Net微信网页开发解决用户

时间:2021-01-03

c++中Socket通信函数之WSAS c++中Socket通信函数之WSAS

时间:2020-12-29

提高生产性工具 提高生产性工具

时间:2020-12-29

全新的membership框架Asp.ne 全新的membership框架Asp.ne

时间:2020-12-29

不用找了,比较全的signal 不用找了,比较全的signal

时间:2020-12-29

计算字符串中每种字符出 计算字符串中每种字符出

时间:2020-12-29

EntityFramework 5.0 CodeFirst 教 EntityFramework 5.0 CodeFirst 教

时间:2020-12-29

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

源码PL/SQL从入门到精通第八章记录与集合Part2

2020-12-29 编辑:网友投稿

--代码8.8 使用select语句为记录赋值 DECLARE TYPE emp_rec IS RECORD( empno NUMBER(10), ename VARCHAR2(30), job VARCHAR2(30)); --声明记录类型的变量 emp_info emp_rec; BEGIN --为记录类型赋值 SELECT empno, ename, job INTO emp_info FROM emp WHERE empno = 7369; --输出记录类型的值 DBMS_OUTPUT.put_line('员工编号:' || emp_info.empno || CHR(13) || '员工姓名:' || emp_info.ename || CHR(13) || '员工职别:' || emp_info.job); END; --代码8.9 在Insert语句中使用记录插入数据 DESC dept; INSERT INTO dept SELECT * FROM dept_copy; SELECT * FROM dept_copy; SELECT * FROM dept; DECLARE TYPE dept_rec IS RECORD( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); --定义2个记录类型的变量 dept_row dept%ROWTYPE; dept_norow dept_rec; BEGIN --为记录类型赋值 dept_row.deptno := 70; dept_row.dname := '工程部'; dept_row.loc := '上海'; dept_norow.deptno := 80; dept_norow.dname := '电脑部'; dept_norow.loc := '北京'; --插入%ROWTYPE定义的记录变量到表中 INSERT INTO dept VALUES dept_row; --插入普通记录变量的值到表中 INSERT INTO dept VALUES dept_norow; --向数据库提交对表的更改 COMMIT; END; SELECT * FROM dept; --代码8.10 在Update语句中使用记录更新数据 DECLARE TYPE dept_rec IS RECORD( --定义记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); dept_info dept_rec; --定义记录类型的变量 BEGIN SELECT * INTO dept_info FROM dept WHERE deptno = 80; --使用SELECT语句初始化记录类型 dept_info.dname := '信管部'; --更新记录类型的值 UPDATE dept SET ROW = dept_info WHERE deptno = dept_info.deptno; --在UPDATE中使用记录变量更新表 END; --代码8.11 在DML语句中使用Returning返回受影响的行 DECLARE TYPE dept_rec IS RECORD( --定义记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); dept_info dept_rec; --定义记录类型的变量 dept_returning dept%ROWTYPE; --定义用于返回结果的记录类型 BEGIN SELECT * INTO dept_info FROM dept WHERE deptno = 80; --使用SELECT语句初始化记录类型 dept_info.dname := '信管部'; --更新记录类型的值 UPDATE dept SET ROW = dept_info WHERE deptno = dept_info.deptno --在UPDATE中使用记录变量更新表,返回受影响的行到记录 RETURNING deptno, dname, loc INTO dept_returning; dept_info.deptno := 12; dept_info.dname := '维修部'; INSERT INTO dept --插入新的部门编号记录,返回受影响的行的记录 VALUES dept_info RETURNING deptno, dname, loc INTO dept_returning; DELETE FROM dept --删除现有的部门,返回受影响的行的记录 WHERE deptno = dept_info.deptno RETURNING deptno, dname, loc INTO dept_returning; END; --使用嵌套记录 DESC emp; DECLARE TYPE dept_rec IS RECORD( --定义部门记录类型 deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); TYPE emp_rec IS RECORD( --定义员工记录类型 v_empno NUMBER, v_ename VARCHAR2(20), v_job VARCHAR2(9), v_mgr NUMBER(4), v_hiredate DATE, v_sal NUMBER(7, 2), v_comm NUMBER(7, 2), v_dept_rec dept_rec --定义嵌套的员工记录 ); emp_info emp_rec; --员工记录 dept_info dept_rec; --临时部门记录 BEGIN SELECT * --从数据库中取出员工部门的记录 INTO dept_info FROM dept WHERE deptno = (SELECT deptno FROM emp WHERE empno = 7369); emp_info.v_dept_rec := dept_info; --将部门信息记录赋给嵌套的部门记录 SELECT empno, ename, job, mgr, --为emp表赋值 hiredate, sal, comm INTO emp_info.v_empno, emp_info.v_ename, emp_info.v_job, emp_info.v_mgr, emp_info.v_hiredate, emp_info.v_sal, emp_info.v_comm FROM emp WHERE empno = 7369; --输出嵌套记录的员工所在部门信息 DBMS_OUTPUT.PUT_LINE('员工所属部门为:' || emp_info.v_dept_rec.dname); END; --8.2.2 定义索引表 -- 雇佣日期索引表集合 TYPE hiredate_idxt IS TABLE OF DATE INDEX BY PLS_INTEGER; -- 部门编号集合 TYPE deptno_idxt IS TABLE OF dept.deptno%TYPE NOT NULL INDEX BY PLS_INTEGER; --记录类型的索引表,这个结构允许在PL/SQL程序中创建本的一个本地副本 TYPE emp_idxt IS TABLE OF emp%ROWTYPE INDEX BY NATURAL; -- 由部门名称标识的部门记录的集合 TYPE deptname_idxt IS TABLE OF dept%ROWTYPE INDEX BY dept.dname%TYPE; -- 定义集合的集合 TYPE private_collection_tt IS TABLE OF deptname_idxt INDEX BY VARCHAR2(100); --代码8.13 定义并操作索引表 DECLARE TYPE idx_table IS TABLE OF VARCHAR(12) INDEX BY PLS_INTEGER; --定义索引表类型 v_emp idx_table; --定义索引表变量 BEGIN v_emp(1) := '史密斯'; --随机的为索引表赋值 v_emp(20) := '克拉克'; v_emp(40) := '史瑞克'; v_emp(-10) := '杰瑞'; IF v_emp.EXISTS(40) THEN DBMS_OUTPUT.PUT_LINE(v_emp(40)); END IF; -- EXCEPTION -- WHEN OTHERS THEN -- DBMS_OUTPUT.PUT_LINE(SQLERRM); END; --代码8.15 使用%Type类型的索引键 DECLARE --定义记录类型的索引表,以dname作为索引键类型 --dname是VARCHAR2(14)类型 TYPE idx_dept_table IS TABLE OF dept%ROWTYPE INDEX BY dept.dname%TYPE; --声明记录类型的变量 v_dept idx_dept_table; --定义一个游标,用来查询dept表 CURSOR dept_cur IS SELECT * FROM dept; BEGIN --使用游标FOR循环打开游标,检索数据 FOR deptrow IN dept_cur LOOP --为索引表中的元素赋值 v_dept(deptrow.dname) := deptrow; --输出部门的LOC列信息 DBMS_OUTPUT.put_line(v_dept(deptrow.dname).loc); END LOOP; END; SELECT * FROM dept; DECLARE --定义以VARCHAR2作为索引键的索引表 TYPE idx_deptno_table IS TABLE OF NUMBER(2) INDEX BY VARCHAR2(20); --声明记录类型的变量 v_deptno idx_deptno_table; BEGIN --为索引表赋值 v_deptno('财务部') := 10; v_deptno('研究部') := 20; v_deptno('销售部') := 30; --引用索引表的内容 DBMS_OUTPUT.put_line('销售部编号为:' || v_deptno('销售部')); END; --代码8.16 嵌套表定义和表变量声明 DECLARE TYPE dept_table IS TABLE OF dept%ROWTYPE; --部门信息嵌套表 TYPE emp_name_table IS TABLE OF VARCHAR2(20); --员工名称嵌套表 TYPE deptno_table IS TABLE OF NUMBER(2); --部门编号嵌套表 dept_info dept_table; --声明嵌套表变量 --声明并初始化嵌套表变量 emp_name_info emp_name_table := emp_name_table('张小三', '李斯特'); deptno_info deptno_table := deptno_table(20, 30, 40); BEGIN NULL; END; --代码8.17 嵌套表的初始化与访问 DECLARE TYPE emp_name_table IS TABLE OF VARCHAR2(20); --员工名称嵌套表 TYPE deptno_table IS TABLE OF NUMBER(2); --部门编号嵌套表 deptno_info deptno_table; emp_name_info emp_name_table := emp_name_table('张小三', '李斯特'); BEGIN DBMS_OUTPUT.put_line('员工1:' || emp_name_info(1)); --访问嵌套表元素 DBMS_OUTPUT.put_line('员工2:' || emp_name_info(2)); IF deptno_info IS NULL --判断嵌套表是否被初始化 THEN deptno_info := deptno_table(NULL, NULL, NULL, NULL, NULL); END IF; -- deptno_info.EXTEND(5); --扩充元素的个数 FOR i IN 1 .. 5 --循环遍历嵌套表元数个数 LOOP deptno_info(i) := i * 10; END LOOP; --显示部门个数 DBMS_OUTPUT.put_line('部门个数:' || deptno_info.COUNT); END;

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/jiaob/net/10539.shtml

相关文章

风云图片

推荐阅读

返回ASP.NET频道首页