CREATE TABLE t_order( id varchar(20) NOT NULL, SNO varchar(20) DEFAULT NULL, buy_time varchar(255) DEFAULT NULL, vic varchar(255) DEFAULT NULL, buy_money varchar(255) DEFAULT NULL, PRIMARY KEY (SNO) ); 哪有错误
时间: 2023-11-18 15:06:27 浏览: 78
这个 SQL 语句中有一个错误。表 t_order 的主键应该是 id 而不是 SNO。正确的语句应该是:
```
CREATE TABLE t_order(
id varchar(20) NOT NULL,
SNO varchar(20) DEFAULT NULL,
buy_time varchar(255) DEFAULT NULL,
vic varchar(255) DEFAULT NULL,
buy_money varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
);
```
相关问题
--1、class表 create table mr_class( clno varchar(5) primary key, dept varchar2(40) not null, grade varchar(8) not null, branch varchar2(20) not null ); --2、student表 create table mr_student( sno varchar2(5) primary key, name varchar2(12) not null, age number(2) not null, sex char(1) not null, entrance date, address varchar2(100), clno varchar2(5), constraint mr_clno foreign key(clno) references mr_class(clno) ); --3、course表 create table mr_course( cno varchar2(5) primary key, name varchar2(60) not null, score number(2) not null ); --4、teacher 表 create table mr_teacher( tno varchar2(5) primary key, name varchar2(12) not null, age number(2), cno varchar2(5) not null ); --5、学生选课表st create table mr_st( sno varchar2(5) not null, tno varchar2(5) not null, grade number(2) default 0 );用以上五个表建两个函数、一个触发器、两个存储过程
下面是基于以上五个表的两个函数、一个触发器和两个存储过程的示例:
1. 函数1:查询某个班级的学生人数
```sql
CREATE OR REPLACE FUNCTION get_student_count_by_clno(p_clno IN VARCHAR2)
RETURN NUMBER
IS
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM mr_student
WHERE clno = p_clno;
RETURN v_count;
END;
```
该函数接受一个班级编号作为参数,并返回该班级的学生人数。
2. 函数2:计算某个学生的平均成绩
```sql
CREATE OR REPLACE FUNCTION get_avg_score_by_sno(p_sno IN VARCHAR2)
RETURN NUMBER
IS
v_avg_score NUMBER;
BEGIN
SELECT AVG(grade) INTO v_avg_score
FROM mr_st
WHERE sno = p_sno;
RETURN v_avg_score;
END;
```
该函数接受一个学生编号作为参数,并返回该学生的平均成绩。
3. 触发器:在学生表上插入记录时自动计算年龄
```sql
CREATE OR REPLACE TRIGGER calc_age
BEFORE INSERT ON mr_student
FOR EACH ROW
BEGIN
:NEW.age := TRUNC(MONTHS_BETWEEN(SYSDATE, :NEW.entrance) / 12);
END;
```
该触发器在每次插入学生表时自动计算该学生的年龄,并将结果存储到 age 字段中。
4. 存储过程1:查询某个教师所教授的课程和成绩
```sql
CREATE OR REPLACE PROCEDURE get_course_and_grade_by_tno(p_tno IN VARCHAR2)
IS
BEGIN
SELECT c.name, s.grade
FROM mr_course c
JOIN mr_st s ON c.cno = s.cno
WHERE s.tno = p_tno;
END;
```
该存储过程接受一个教师编号作为参数,并返回该教师所教授的课程和成绩。
5. 存储过程2:更新某个学生的成绩
```sql
CREATE OR REPLACE PROCEDURE update_grade_by_sno(p_sno IN VARCHAR2, p_cno IN VARCHAR2, p_grade IN NUMBER)
IS
BEGIN
UPDATE mr_st
SET grade = p_grade
WHERE sno = p_sno AND cno = p_cno;
END;
```
该存储过程接受一个学生编号、一个课程编号和一个成绩作为参数,并将该学生在该课程中的成绩更新为指定值。
-- 切换到数据库 SC USE SC; -- 创建学生表 Students_8208210915 CREATE TABLE Students_8208210915 ( Sno INT PRIMARY KEY, Sname VARCHAR(20) NOT NULL, Gender CHAR(2) CHECK (Gender IN ('男', '女')), Birthday DATE NOT NULL ); -- 创建课程表 Courses_8208210915 CREATE TABLE Courses_8208210915 ( Cno INT PRIMARY KEY, Cname VARCHAR(20) NOT NULL, PCno INT, Hours INT NOT NULL, Credit INT NOT NULL, FOREIGN KEY (PCno) REFERENCES Courses_8208210915 (Cno) ); -- 创建选修表 Score_8208210915 CREATE TABLE Score_8208210915 ( Sno INT NOT NULL, Cno INT NOT NULL, Score INT NOT NULL, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Students_8208210915 (Sno), FOREIGN KEY (Cno) REFERENCES Courses_8208210915 (Cno) );
好的,以上代码是用 SQL 语言在数据库 SC 中创建了三个表:Students_8208210915、Courses_8208210915 和 Score_8208210915。Students_8208210915 表包含学生的学号、姓名、性别和出生日期信息;Courses_8208210915 表包含课程的课程号、课程名、先修课程号、学时和学分信息;Score_8208210915 表包含学生选修课程的成绩信息,其中包括学生的学号、课程的课程号和成绩。表之间通过主键和外键进行关联。
阅读全文