- 浏览: 29384 次
- 性别:
- 来自: 北京
最新评论
11.1.2 在SELECT语句中使用记录
1.使用%ROWTYPE属性定义记录
例11.1_1
SET SERVEROUTPUT ON
DECLARE
v_student Students%ROWTYPE;
BEGIN
SELECT * INTO v_student
FROM Students WHERE student_id = 10201;
DBMS_OUTPUT.PUT_LINE ('姓名 性别 专业');
DBMS_OUTPUT.PUT_LINE
(v_student.name||' '||v_student.sex||' '||v_student.specialty);
END;
例11.1_2
CREATE VIEW Students_view AS
SELECT * FROM Students
WHERE sex='男';
SET SERVEROUTPUT ON
DECLARE
v_student Students_view%ROWTYPE;
BEGIN
SELECT * INTO v_student
FROM Students_view WHERE student_id = 10201;
DBMS_OUTPUT.PUT_LINE ('姓名 性别 专业');
DBMS_OUTPUT.PUT_LINE
(v_student.name||' '||v_student.sex||' '||v_student.specialty);
END;
例11.1_3
SET SERVEROUTPUT ON
DECLARE
CURSOR students_cur
IS
SELECT name,dob
FROM Students
WHERE specialty = '计算机';
v_student students_cur%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE ('序号 学生姓名 出生日期');
FOR Students_record IN Students_cur LOOP
v_student.name := Students_record.name;
v_student.dob := Students_record.dob;
DBMS_OUTPUT.PUT_LINE (Students_cur%ROWCOUNT||' '||v_student.name||' '||v_student.dob);
END LOOP;
END;
2.使用显式方法定义记录
例11.1_4
SET SERVEROUT ON
DECLARE
TYPE s_record IS RECORD
(name Students.name%TYPE,
sex Students.sex%TYPE,
dob Students.dob%TYPE);
students_record s_record;
v_id Students.student_id%TYPE;
BEGIN
v_id := &student_id;
DBMS_OUTPUT.PUT_LINE ('学生姓名 性别 出生日期');
SELECT name,sex,dob INTO students_record
FROM Students WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE (students_record.name||' '||Students_record.sex||' '||Students_record.dob);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (sqlcode||sqlerrm);
END;
3.使用记录成员
例11.1_5
SET SERVEROUT ON
DECLARE
TYPE s_record IS RECORD
(name Students.name%TYPE,
sex Students.sex%TYPE,
dob Students.dob%TYPE);
students_record s_record;
v_specialty Students.specialty%TYPE;
i INT := 0;
BEGIN
v_specialty := '&specialty';
DBMS_OUTPUT.PUT_LINE ('序号 学生姓名 性别 出生日期');
FOR students_row
IN (SELECT * FROM Students WHERE specialty=v_specialty) LOOP
i:=i+1;
students_record.name := students_row.name;
students_record.sex := students_row.sex;
students_record.dob := students_row.dob;
DBMS_OUTPUT.PUT_LINE (i||' '||students_record.name||' '||Students_record.sex||' '||Students_record.dob);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (sqlcode||sqlerrm);
END;
11.1.3 在DML语句中使用记录
1.在UPDATE语句中
例11.1_6
DECLARE
TYPE s_record IS RECORD
(id Students.student_id%TYPE,
dob Students.dob%TYPE);
students_record s_record;
BEGIN
students_record.id := 10101;
students_record.dob := '25-11月-1990';
UPDATE Students SET dob = students_record.dob
WHERE student_id = students_record.id;
END;
例11.1_7
DECLARE
TYPE s_record IS RECORD
(id Students.student_id%TYPE,
monitor_id Students.monitor_id%TYPE,
name Students.name%TYPE,
sex Students.sex%TYPE,
dob Students.dob%TYPE,
specialty Students.specialty%TYPE);
students_record s_record;
BEGIN
students_record.id := 10288;
students_record.monitor_id := 10205;
students_record.name := '王天仪';
students_record.sex := '男';
students_record.dob := '25-11月-1990';
students_record.specialty := '自动化';
UPDATE Students SET ROW = students_record
WHERE student_id = 10103;
END;
2.在INSERT语句中
例11.1_8
DECLARE
students_record Students%ROWTYPE;
BEGIN
students_record.student_id := 10288;
students_record.monitor_id := 10205;
students_record.name := '王一';
students_record.sex := '男';
students_record.dob := '25-11月-1990';
students_record.specialty := '自动化';
INSERT INTO Students VALUES students_record;
END;
例11.1_9
DECLARE
TYPE s_record IS RECORD
(id Departments.department_id%TYPE,
name Departments.department_name%TYPE);
departments_record s_record;
BEGIN
departments_record.id := 111;
departments_record.name := '地球物理';
INSERT INTO Departments(department_id,department_name)
VALUES (departments_record.id,departments_record.name);
END;
3.在DELETE语句中
例11.1_10
DECLARE
TYPE d_record IS RECORD
(id Departments.department_id%TYPE);
departments_record d_record;
BEGIN
departments_record.id := 111;
DELETE FROM Departments WHERE department_id = departments_record.id;
END;
11.2.2 使用记录表类型
例11.2_1
SET SERVEROUT ON
DECLARE
TYPE student_tab_type IS TABLE OF
Students%ROWTYPE INDEX BY BINARY_INTEGER;
student_tab student_tab_type;
v_id Students.student_id%TYPE;
BEGIN
v_id := &student_id;
SELECT * INTO student_tab(999)
FROM Students WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||student_tab(999).name);
DBMS_OUTPUT.PUT_LINE ('学生性别:'||student_tab(999).sex);
DBMS_OUTPUT.PUT_LINE ('出生日期:'||student_tab(999).dob);
DBMS_OUTPUT.PUT_LINE ('专 业:'||student_tab(999).specialty);
END;
例11.2_2
SET SERVEROUT ON
DECLARE
TYPE student_tab_type IS TABLE OF
students%ROWTYPE INDEX BY BINARY_INTEGER;
student_tab student_tab_type;
v_specialty students.specialty%TYPE;
CURSOR students_cur
IS
SELECT *
FROM students
WHERE specialty = v_specialty;
i INT := 1;
BEGIN
v_specialty := '&specialty';
OPEN students_cur;
DBMS_OUTPUT.PUT_LINE ('学生姓名 出生日期');
LOOP
FETCH Students_cur INTO student_tab(i);
EXIT WHEN Students_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
(student_tab(i).name||' '||student_tab(i).dob);
i := i+1;
END LOOP;
CLOSE Students_cur;
END;
例11.2_3
SET SERVEROUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
Students.name%TYPE INDEX BY BINARY_INTEGER;
sname_tab sname_tab_type;
TYPE sdob_tab_type IS TABLE OF
Students.dob%TYPE INDEX BY BINARY_INTEGER;
sdob_tab sdob_tab_type;
v_specialty Students.specialty%TYPE;
CURSOR Students_cur
IS
SELECT name,dob
FROM Students
WHERE specialty = v_specialty;
i INT:=1;
BEGIN
v_specialty := '&specialty';
OPEN Students_cur;
DBMS_OUTPUT.PUT_LINE ('学生姓名 出生日期');
LOOP
FETCH Students_cur INTO sname_tab(i),sdob_tab(i);
EXIT WHEN Students_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (sname_tab(i)||' '||sdob_tab(i));
i := i+1;
END LOOP;
CLOSE Students_cur;
END;
11.3.2 使用联合数组
例11.3_1
SET SERVEROUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
VARCHAR2(10) INDEX BY BINARY_INTEGER;
sname_tab sname_tab_type;
v_id students.student_id%TYPE;
BEGIN
v_id := &student_id;
SELECT name INTO sname_tab(-999)
FROM students WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_tab(-999));
END;
例11.3_2
SET SERVEROUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
students.name%TYPE INDEX BY BINARY_INTEGER;
sname_tab sname_tab_type;
TYPE sdob_tab_type IS TABLE OF
Students.dob%TYPE INDEX BY BINARY_INTEGER;
sdob_tab sdob_tab_type;
v_specialty students.specialty%TYPE;
CURSOR students_cur
IS
SELECT name,dob
FROM students
WHERE specialty = v_specialty;
i INT:=1;
BEGIN
v_specialty := '&specialty';
OPEN students_cur;
DBMS_OUTPUT.PUT_LINE ('学生姓名 出生日期');
LOOP
FETCH students_cur INTO sname_tab(i),sdob_tab(i);
EXIT WHEN students_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
(sname_tab(i)||' '||sdob_tab(i));
i := i+1;
END LOOP;
CLOSE students_cur;
END;
例11.3_3
SET SERVEROUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
Students.name%TYPE INDEX BY VARCHAR2(10);
sname_tab sname_tab_type;
v_id Students.student_id%TYPE;
BEGIN
v_id := &student_id;
SELECT name INTO sname_tab('学生姓名')
FROM Students WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE
('学生姓名:'||sname_tab('学生姓名'));
END;
11.4.2 使用嵌套表类型
1.嵌套表在PL/SQL块中作为数据变量
(只在PL/SQL块中使用嵌套表)
例11.4_1
SET SERVEROUT ON
DECLARE
TYPE sname_type IS TABLE OF VARCHAR2(10);
sname_table sname_type :=
sname_type(NULL,NULL,NULL,'王一');
BEGIN
DBMS_OUTPUT.PUT_LINE ('初始化学生姓名:');
FOR i IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE (sname_table(i));
END LOOP;
sname_table(1) := '赵一';
sname_table(2) := '钱二';
sname_table(3) := '孙三';
sname_table(4) := '李四';
DBMS_OUTPUT.PUT_LINE ('重新指定的学生姓名:');
FOR i IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE (sname_table(i));
END LOOP;
END;
例11.4_2
SET SERVEROUT ON
DECLARE
TYPE sname_type IS TABLE OF
students.name%TYPE NOT NULL;
sname_table sname_type := sname_type('张三','张三');
v_id Students.student_id%TYPE;
BEGIN
v_id := &student_id;
SELECT name
INTO sname_table(1)
FROM Students
WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE ('学生1姓名:'||sname_table(1));
DBMS_OUTPUT.PUT_LINE ('学生2姓名:'||sname_table(2));
END;
2.嵌套表作为表列的数据类型
CREATE TYPE sname_type IS TABLE OF VARCHAR2(10);
CREATE TABLE Mentors (
mentor_id NUMBER(5)
CONSTRAINT mentor_pk PRIMARY KEY,
mentor_name VARCHAR2(10) NOT NULL,
student_name sname_type
)NESTED TABLE student_name STORE AS sname_table;
例11.4_3
BEGIN
INSERT INTO mentors
VALUES(10101,'王彤',sname_type('王晓芳','张纯玉','刘春苹'));
END;
例11.4_4
SET SERVEROUT ON
DECLARE
sname_table sname_type;
BEGIN
SELECT student_name INTO sname_table
FROM Mentors WHERE mentor_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('王彤导师的研究生姓名:');
FOR i IN 1..sname_table.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (sname_table(i));
END LOOP;
END;
例11.4_5 修改表mentors中student_name列的数据。
DECLARE
sname_table sname_type :=
sname_type('王一','张三','刘四');
BEGIN
UPDATE Mentors
SET student_name = sname_table
WHERE mentor_name = '王彤';
END;
sname_varry_type、变长数组类型变量sname_varry
11.5.2 使用变长数组类型
1.变长数组在PL/SQL块中作为数据变量
例11.5_1
SET SERVEROUT ON
DECLARE
TYPE sname_varry_type IS VARRAY(3) OF VARCHAR2(10);
sname_varry sname_varry_type :=
sname_varry_type(NULL,NULL,'李四');
BEGIN
DBMS_OUTPUT.PUT_LINE ('初始化学生姓名:');
FOR i IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE (sname_varry(i));
END LOOP;
sname_varry(1) := '赵一';
sname_varry(2) := '钱二';
sname_varry(3) := '孙三';
DBMS_OUTPUT.PUT_LINE ('重新指定的学生姓名:');
FOR i IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE (sname_varry(i));
END LOOP;
END;
例11.5_2
SET SERVEROUT ON
DECLARE
TYPE sname_type IS VARRAY(3) OF VARCHAR2(10);
sname_varry sname_type;
v_id Students.student_id%TYPE;
BEGIN
v_id := &student_id;
sname_varry := sname_type('李四','李四');
SELECT name
INTO sname_varry(2)
FROM Students
WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE ('学生1姓名:'||sname_varry(1));
DBMS_OUTPUT.PUT_LINE ('学生2姓名:'||sname_varry(2));
END;
2.变长数组作为表列的数据类型
CREATE TYPE studname_type IS VARRAY(15) OF VARCHAR2(10);
CREATE TABLE hierophants(
hierophant_id NUMBER(5)
CONSTRAINT hierophant_pk PRIMARY KEY,
hierophant_name VARCHAR2(10) NOT NULL,
student_name studname_type
);
例11.5_3
BEGIN
INSERT INTO hierophants
VALUES(10101,'王彤',studname_type('王晓芳','张纯玉','刘春苹'));
END;
例11.5_4
SET SERVEROUT ON
DECLARE
studname_varry studname_type;
BEGIN
SELECT student_name INTO studname_varry
FROM hierophants
WHERE hierophant_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('王彤导师的研究生姓名:');
FOR i IN 1..studname_varry.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (studname_varry(i));
END LOOP;
END;
例11.5_5
DECLARE
studname_varry studname_type :=
studname_type('王一','张三','刘四');
BEGIN
UPDATE hierophants
SET student_name = studname_varry
WHERE hierophant_name = '王彤';
END;
11.6 集合操作
11.6.1 集合属性与方法
1.集合属性
(1)COUNT属性
例11.6_1
SET SERVEROUTPUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
students.name%TYPE INDEX BY BINARY_INTEGER;
sname_tab sname_tab_type;
i INT:=1;
BEGIN
FOR students_record IN
(SELECT name FROM students WHERE specialty = '计算机') LOOP
sname_tab(i) := students_record.name;
i := i+1;
END LOOP;
DBMS_OUTPUT.PUT_LINE
('计算机专业共有学生总数:'||sname_tab.COUNT||' 名。');
END;
(2)LIMIT属性
例11.6_2
SET SERVEROUT ON
DECLARE
TYPE sname_varry_type IS VARRAY(15) OF students.name%TYPE;
sname_varry sname_varry_type :=
sname_varry_type('王一','李二','张三');
BEGIN
DBMS_OUTPUT.PUT_LINE
('集合(VARRAY)变量的最大下标值:'||sname_varry.LIMIT);
DBMS_OUTPUT.PUT_LINE
('集合(VARRAY)变量的元素个数:'||sname_varry.COUNT);
END;
(3)EXIST()属性
例11.6_3
SET SERVEROUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF VARCHAR2(10);
sname_tab sname_tab_type;
v_id students.student_id%TYPE;
BEGIN
v_id := &student_id;
IF sname_tab.EXISTS(1) THEN
NULL;
ELSE
sname_tab := sname_tab_type('王一','李二','张三');
END IF;
SELECT name INTO sname_tab(1)
FROM students
WHERE student_id = v_id;
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_tab(1));
END;
(4)FIRST与 LAST属性
例11.6_4
SET SERVEROUTPUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
students.name%TYPE INDEX BY BINARY_INTEGER;
sname_tab sname_tab_type;
i INT := -10;
BEGIN
FOR students_record IN
(SELECT name FROM students WHERE specialty = '计算机') LOOP
sname_tab(i) := students_record.name;
i := i+10;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('第一个元素下标为:'||sname_tab.FIRST);
DBMS_OUTPUT.PUT_LINE ('sname_tab中元素个数:'||sname_tab.COUNT);
DBMS_OUTPUT.PUT_LINE ('最后一个元素下标为:'||sname_tab.LAST);
END;
(5)NEXT() PRIOR()
例11.6_5
SET SERVEROUTPUT ON
DECLARE
TYPE sname_tab_type IS TABLE OF
students.name%TYPE INDEX BY BINARY_INTEGER;
sname_tab sname_tab_type;
i INT := -10;
counter INT;
BEGIN
FOR students_record IN
(SELECT name FROM students WHERE specialty = '计算机') LOOP
sname_tab(i) := students_record.name;
i := i+10;
END LOOP;
counter := sname_tab.FIRST;
WHILE counter <= sname_tab.LAST LOOP
DBMS_OUTPUT.PUT_LINE
('sname_tab('||counter||') = '||sname_tab(counter));
counter := sname_tab.NEXT(counter);
END LOOP;
END;
2.集合方法
(1)DELETE方法
例11.6_6
SET SERVEROUTPUT ON
DECLARE
TYPE sname_type IS TABLE OF VARCHAR2(10);
sname_varry sname_type :=
sname_type('王一','李二','张三','赵四','周五','刘六');
BEGIN
DBMS_OUTPUT.PUT_LINE
('sname_varry初始元素个数:'||sname_varry.COUNT);
sname_varry.DELETE(2);
DBMS_OUTPUT.PUT_LINE
('DELETE(2)后sname_varry元素个数:'||sname_varry.COUNT);
sname_varry.DELETE(3,5);
DBMS_OUTPUT.PUT_LINE
('DELETE(3,5)后sname_varry元素个数:'||sname_varry.COUNT);
sname_varry.DELETE;
DBMS_OUTPUT.PUT_LINE
('DELETE后sname_tab元素个数:'||sname_varry.COUNT);
END;
(2)EXTEND方法
例11.6_7
SET SERVEROUTPUT ON
DECLARE
TYPE sname_type IS TABLE OF VARCHAR2(10);
sname_varry sname_type :=
sname_type('王一','李二','张三');
i INT:=1;
BEGIN
DBMS_OUTPUT.PUT_LINE
('sname_varry初始元素个数:'||sname_varry.COUNT);
sname_varry.EXTEND;
DBMS_OUTPUT.PUT_LINE
('EXTEND后sname_varry元素:'||sname_varry.COUNT);
sname_varry.EXTEND(2,3);
DBMS_OUTPUT.PUT_LINE
('EXTEND(2,3)后sname_varry元素个数:'||sname_varry.COUNT);
sname_varry.EXTEND(2);
DBMS_OUTPUT.PUT_LINE
('EXTEND(2)后sname_varry元素个数:'||sname_varry.COUNT);
WHILE i <= sname_varry.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_varry(i));
i := i+1;
END LOOP;
END;
(3)TRIM方法
例11.6_8
SET SERVEROUTPUT ON
DECLARE
TYPE sname_type IS TABLE OF VARCHAR2(10);
sname_varry sname_type :=
sname_type('王一','李二','张三','赵四','周五','刘六');
i INT:=1;
BEGIN
DBMS_OUTPUT.PUT_LINE
('sname_varry初始元素个数:'||sname_varry.COUNT);
sname_varry.TRIM;
DBMS_OUTPUT.PUT_LINE
('TRIM后sname_varry元素个数:'||sname_varry.COUNT);
sname_varry.TRIM(2);
DBMS_OUTPUT.PUT_LINE
('TRIM(2)后sname_varry元素个数:'||sname_varry.COUNT);
WHILE i <= sname_varry.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_varry(i));
i := i+1;
END LOOP;
END;
11.6.2 使用集合操作符
DELETE FROM mentors;
INSERT INTO mentors
VALUES(10101,'王彤',sname_type('王晓芳','张纯玉','刘春苹','王晓芳'));
INSERT INTO mentors
VALUES(10104,'孔世杰',sname_type('王天仪','韩刘','刘春苹'));
例11.6_9
SET SERVEROUT ON
DECLARE
sname_table1 sname_type;
sname_table sname_type;
BEGIN
SELECT student_name
INTO sname_table1
FROM mentors
WHERE mentor_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('集合sname_table1中的元素--');
FOR i IN 1..sname_table1.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table1(i));
END LOOP;
sname_table := SET(sname_table1);
DBMS_OUTPUT.PUT_LINE ('集合sname_table中的元素--');
FOR i IN 1..sname_table.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table(i));
END LOOP;
END;
例11.6_10
SET SERVEROUT ON
DECLARE
sname_table1 sname_type;
sname_table2 sname_type;
sname_table sname_type;
BEGIN
SELECT student_name
INTO sname_table1
FROM mentors
WHERE mentor_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('集合sname_table1中的元素--');
FOR i IN 1..sname_table1.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table1(i));
END LOOP;
SELECT student_name
INTO sname_table2
FROM Mentors
WHERE mentor_name = '孔世杰';
DBMS_OUTPUT.PUT_LINE ('集合sname_table2中的元素--');
FOR i IN 1..sname_table2.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table2(i));
END LOOP;
sname_table := sname_table1 MULTISET UNION sname_table2;
DBMS_OUTPUT.PUT_LINE ('集合sname_table中的元素--');
FOR i IN 1..sname_table.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table(i));
END LOOP;
END;
例11.6_11
SET SERVEROUT ON
DECLARE
sname_table1 sname_type;
sname_table2 sname_type;
sname_table sname_type;
BEGIN
SELECT student_name
INTO sname_table1
FROM mentors
WHERE mentor_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('集合sname_table1中的元素--');
FOR i IN 1..sname_table1.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table1(i));
END LOOP;
SELECT student_name
INTO sname_table2
FROM mentors
WHERE mentor_name = '孔世杰';
DBMS_OUTPUT.PUT_LINE ('集合sname_table2中的元素--');
FOR i IN 1..sname_table2.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table2(i));
END LOOP;
sname_table := sname_table1 MULTISET UNION DISTINCT sname_table2;
DBMS_OUTPUT.PUT_LINE ('集合sname_table中的元素--');
FOR i IN 1..sname_table.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table(i));
END LOOP;
END;
例11.6_12
SET SERVEROUT ON
DECLARE
sname_table1 sname_type;
sname_table2 sname_type;
sname_table sname_type;
BEGIN
SELECT student_name
INTO sname_table1
FROM Mentors
WHERE mentor_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('集合sname_table1中的元素--');
FOR i IN 1..sname_table1.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table1(i));
END LOOP;
SELECT student_name
INTO sname_table2
FROM Mentors
WHERE mentor_name = '孔世杰';
DBMS_OUTPUT.PUT_LINE ('集合sname_table2中的元素--');
FOR i IN 1..sname_table2.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table2(i));
END LOOP;
sname_table := sname_table1 MULTISET INTERSECT sname_table2;
DBMS_OUTPUT.PUT_LINE ('集合sname_table中的元素--');
FOR i IN 1..sname_table.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table(i));
END LOOP;
END;
例11.6_13
SET SERVEROUT ON
DECLARE
sname_table1 sname_type;
sname_table2 sname_type;
sname_table sname_type;
BEGIN
SELECT student_name
INTO sname_table1
FROM mentors
WHERE mentor_name = '王彤';
DBMS_OUTPUT.PUT_LINE ('集合sname_table1中的元素--');
FOR i IN 1..sname_table1.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table1(i));
END LOOP;
SELECT student_name
INTO sname_table2
FROM mentors
WHERE mentor_name = '孔世杰';
DBMS_OUTPUT.PUT_LINE ('集合sname_table2中的元素--');
FOR i IN 1..sname_table2.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table2(i));
END LOOP;
sname_table := sname_table1 MULTISET EXCEPT sname_table2;
DBMS_OUTPUT.PUT_LINE ('集合sname_table中的元素--');
FOR i IN 1..sname_table.COUNT LOOP
DBMS_OUTPUT.PUT_LINE ('学生姓名:'||sname_table(i));
END LOOP;
END;
发表评论
-
SQL语句 第12章 应用程序结构(过程,函数,包,触发器)
2009-12-03 17:09 112212.1 子程序 运行在服务器端,快;简化应用程序开 ... -
SQL语句 第10章 PLSQL编程基础
2009-12-03 17:08 112710.1 PL/SQL语言基础 10.1.1 PL/SQ ... -
SQL语句 第9章 数据描述语言(DDL)与数据控制语言(DCL)
2009-12-03 17:08 10299.1 数据控制语言(DCL)9.1.1 数据库权限3.用 ... -
SQL语句 第8章 SQL函数
2009-12-03 17:07 9518.1 数字函数8.1.1 数字函数概述1.ABS(x)例 ... -
SQL语句 第7章 DML语句与事物处理
2009-12-03 17:07 7797.1 数据操作语言(DML)7.1.1 插入数据(INS ... -
SQL语句 第6章 连接查询
2009-12-03 17:06 6316.1 内连接查询 6.1.1 简单内连接 ... -
SQL语句 第5章 子查询和集合操作
2009-12-03 02:37 11465.1 子查询 5.1.1 单行子查询 1.在WHE ... -
SQL语句 第4章 单表查询
2009-12-03 00:45 9414.1 简单查询 4.1.1 查询指定列 例4.1_ ... -
数据控制语言DCL和数据定义语言DDL
2009-12-02 15:48 1598数据控制语言DCL 系统权限: create sess ... -
SQL数据操作语言DML和事物控制语言TC
2009-12-01 16:34 1034数据操作语言DML 操作数据库时注意数据库的完整 ... -
数据库系统工程师试题
2009-11-24 18:06 13842004--2009数据库系统工程师试题及答案
相关推荐
PL/SQL简介(第1~2章) PL/SQL中的SQL语句(第3章) ...复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包(第19~22章) Oracle中对象类型(第23章) Oracle提供的包(第24章)
第14章 使用复合数据类型 第15章 使用游标 第16章 异常处理 . 第17章 本地动态sql 第18章 pl/sql过程 第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统...
第14章 使用复合数据类型 第15章 使用游标 第16章 异常处理 . 第17章 本地动态sql 第18章 pl/sql过程 第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统...
第11章PL/SQL基础 第12章访问Oracle 第13章编写控制结构 第14章使用复合数 据类型 第15章使用游标 第16章异常处理 . 第17章本地动态SQL 第18章PL/SQL过程 第19章PL/SQL函数 第20章PL/SQL包 第...
第14章 使用复合数据类型 第15章 使用游标 第16章 异常处理 . 第17章 本地动态sql 第18章 pl/sql过程 第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统...
第14章 使用复合数据类型 第15章 使用游标 第16章 异常处理 . 第17章 本地动态sql 第18章 pl/sql过程 第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统...
1.5.1 SQL环境介绍 1.5.2 SQL的层次结构 1.5.3 SQL环境中的对象 1.5.4 SQL环境中的程序系统 1.6 SQL语句基础 1.6.1 SQL常量 1.6.2 SQL表达式 1.6.3 SQL数据类型 1.6.4 注释符 1.6.5 批处理 1.6.6 SQL语句的执行 ...
第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第16章 使用游标 第17章 使用触发器 第18章 事务处理 ...
第11章 记录类型 297 第12章 集合 313 第13章 其他数据类型 381 第4部分 PL/SQL中的SQL 第14章 DML和事务管理 423 第15章 数据提取 444 第16章 动态SQL和动态PL/SQL 492 目 录(下册) 第5部分 构造PL/SQL应用程序 第...
第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第16章 使用游标 第17章 使用触发器 第18章 事务处理 ...
第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第16章 使用游标 第17章 使用触发器 第18章 事务处理 ...
第11章 插入数据 第12章 更新和删除数据 第13章 创建、操纵数据库和表 第14章 使用视图 第15章 使用存储过程和函数 第16章 使用游标 第17章 使用触发器 第18章 事务处理 ...
第11章 记录类型 297 第12章 集合 313 第13章 其他数据类型 381 第4部分 PL/SQL中的SQL 第14章 DML和事务管理 423 第15章 数据提取 444 第16章 动态SQL和动态PL/SQL 492 目 录(下册) 第5部分 构造PL/SQL应用程序 第...
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 A:常用source 命令 进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如...
第11章 与SQL Server环境的交互 11.1 OLE Automation对象的执行 11.1.1 sp-OACreat 11.1.2 sp-OAMetho 11.1.3 sp-OASetPropert 11.1.4 sp_OAGetPropert 11.1.5 sp-OADestro 11.1.6 sp_OAGetErrorInf 11.1.7 数据类型...
第11章 与SQL Server环境的交互 11.1 OLE Automation对象的执行 11.1.1 sp-OACreat 11.1.2 sp-OAMetho 11.1.3 sp-OASetPropert 11.1.4 sp_OAGetPropert 11.1.5 sp-OADestro 11.1.6 sp_OAGetErrorInf 11.1.7 数据类型...
编写控制结构 7.1 条件分支语句 7.2 CASE语句 7.3 循环语句 7.4 顺序控制语句 7.5 习题 第8章 使用复合数据类型 8.1 PL/SQL记录 8.1.1 定义PL/SQL记录 8.1.2 使用PL/SQL...
rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\'...
第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/...