小问题 初学
DECLARE
v_Majorstudents.major%TYPE;
v_CreditIncreaseNUMBER := 3;
BEGIN
v_Major := 'History';
UPDATE students
SET current_credits = current_credits + v_CreditIncrease
WHERE major = v_Major;
END;
/
2.
DECLARE
v_StudentIDstudents.id%TYPE;
BEGIN
SELECT student_sequence.NEXTVAL
INTO v_StudentID
FROM dual;
INSERT INTO students (id, first_name, last_name)
VALUES (v_StudentID, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
END
请帮忙分析一下这两段代码分别完成什么工作 谢谢哈
[解决办法]
第一段代码:
更新students表,
第二段代码:
先取出student_sequence.NEXTVAL,存到变量v_StudentID中;
再往students 写入数据。
[解决办法]
你不会把空格写写好?定义变量能这么连着写吗?
[解决办法]
DECLARE
v_Majorstudents.major%TYPE;
v_CreditIncreaseNUMBER := 3;
BEGIN
v_Major := 'History';
UPDATE students
SET current_credits = current_credits + v_CreditIncrease
WHERE major = v_Major;
END;
--UPDATE students
SET current_credits = current_credits + 3
WHERE major = 'History';
更新 students major = 'History' 将current_credits = current_credits + 3
DECLARE
v_StudentIDstudents.id%TYPE;
BEGIN
SELECT student_sequence.NEXTVAL
INTO v_StudentID
FROM dual;
INSERT INTO students (id, first_name, last_name)
VALUES (v_StudentID, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
END
--INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
students 插入二条记录
[解决办法]
DECLARE
v_Majorstudents.major%TYPE;
v_CreditIncreaseNUMBER := 3;
BEGIN
v_Major := 'History';
UPDATE students
SET current_credits = current_credits + v_CreditIncrease
WHERE major = v_Major;
END;
--UPDATE students
SET current_credits = current_credits + 3
WHERE major = 'History';
更新 students major = 'History' 将current_credits = current_credits + 3
DECLARE
v_StudentIDstudents.id%TYPE;
BEGIN
SELECT student_sequence.NEXTVAL
INTO v_StudentID
FROM dual;
INSERT INTO students (id, first_name, last_name)
VALUES (v_StudentID, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
END
--INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
students 插入二条记录
[解决办法]
DECLARE
v_Majorstudents.major%TYPE;
v_CreditIncreaseNUMBER := 3;
BEGIN
v_Major := 'History';
UPDATE students
SET current_credits = current_credits + v_CreditIncrease
WHERE major = v_Major;
END;
--UPDATE students
SET current_credits = current_credits + 3
WHERE major = 'History';
更新 students major = 'History' 将current_credits = current_credits + 3
DECLARE
v_StudentIDstudents.id%TYPE;
BEGIN
SELECT student_sequence.NEXTVAL
INTO v_StudentID
FROM dual;
INSERT INTO students (id, first_name, last_name)
VALUES (v_StudentID, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
END
--INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
students 插入二条记录
[解决办法]
第一段代码:更新表students
第二段代码:先把sequence的值取出放到变量v_StudentID中,再向students 表中插入数据。
但是两段代码,都没有COMMIT(事务没有提交)
[解决办法]
DECLARE
v_Majorstudents.major%TYPE;
v_CreditIncreaseNUMBER := 3;
BEGIN
v_Major := 'History';
UPDATE students
SET current_credits = current_credits + v_CreditIncrease
WHERE major = v_Major;
END;
--UPDATE students
SET current_credits = current_credits + 3
WHERE major = 'History';
更新 students major = 'History' 将current_credits = current_credits + 3
DECLARE
v_StudentIDstudents.id%TYPE;
BEGIN
SELECT student_sequence.NEXTVAL
INTO v_StudentID
FROM dual;
INSERT INTO students (id, first_name, last_name)
VALUES (v_StudentID, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
END
--INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Timothy', 'Taller');
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
students 插入二条记录
[解决办法]
1)更新表students 将v_Major 为'History'的记录current_credits 增加 3
2)向students 表插入v_StudentID, 'Timothy', 'Taller'
student_sequence.NEXTVAL, 'Patrick', 'Poll'两条记录
v_StudentID的值来自student_sequence.NEXTVAL的值
student_sequence创建的一个sequence
不过2条记录的id不同
[解决办法]
DECLARE
--声明v_Majorstudents,类型为major的类型
v_Majorstudents.major%TYPE;
--v_CreditIncreaseNUMBER 为3
v_CreditIncreaseNUMBER := 3;
BEGIN
--赋值
v_Major := 'History';
--SQL 的UPDATE 语句 当major = v_Major;成立时 则current_credits = current_credits + v_CreditIncrease
UPDATE students
SET current_credits = current_credits + v_CreditIncrease
WHERE major = v_Major;
END;
/
2.
DECLARE
v_StudentIDstudents.id%TYPE;
BEGIN
--查找下一个存储位置的行号(顺序存储的),将v_Student赋值为student_sequence.NEXTVAL。IDdual是系统的伪表
SELECT student_sequence.NEXTVAL
INTO v_StudentID
FROM dual;
--SQL语句
INSERT INTO students (id, first_name, last_name)
VALUES (v_StudentID, 'Timothy', 'Taller');
--SQL语句
INSERT INTO students (id, first_name, last_name)
VALUES (student_sequence.NEXTVAL, 'Patrick', 'Poll');
END
[解决办法]
dual是系统的伪表
[解决办法]