数据库操作与SQL应用:从基础到高级的实践指南
立即解锁
发布时间: 2025-08-20 01:15:50 阅读量: 1 订阅数: 4 

# 数据库操作与SQL应用:从基础到高级的实践指南
## 1. 数据库表创建与操作
### 1.1 自定义类型与表创建
在数据库操作中,我们可以自定义数据类型并基于此创建表。例如,对于`SALGRADES`表,它有`LOWERLIMIT`和`UPPERLIMIT`两列用于表示工资范围。我们可以定义自己的`SALRANGE_T`类型,它是一个包含两个`NUMBER(6,2)`值的可变数组(varray),并使用该类型创建替代表`SALGRADES2`。
```sql
SQL> create or replace type salrange_t
2 as varray(2) of number(6,2);
3 /
Type created.
SQL> create table salgrades2
2 ( grade number(2) constraint S2_PK
3 primary key
4 , salrange salrange_t constraint S2_RANGE_NN
5 not null
6 , bonus NUMBER(6,2) constraint S2_BONUS_NN
7 not null
8 ) ;
Table created.
```
### 1.2 数据填充
创建好表后,我们可以使用单条`INSERT`语句,利用现有的`SALGRADES`表来填充新的`SALGRADES2`表。
```sql
SQL> insert into salgrades2
2 select grade
3 , salrange_t(lowerlimit,upperlimit)
4 , bonus
5 from salgrades;
5 rows created.
SQL> col salrange format a25
SQL> select * from salgrades2;
GRADE SALRANGE BONUS
-------- ------------------------- --------
1 SALRANGE_T(700, 1200) 0
2 SALRANGE_T(1201, 1400) 50
3 SALRANGE_T(1401, 2000) 100
4 SALRANGE_T(2001, 3000) 200
5 SALRANGE_T(3001, 9999) 500
5 rows selected.
```
### 1.3 嵌套表的创建与填充
我们还可以创建包含嵌套表的表。例如,创建`TESTNEST`表,它有两列:列`X`和列`MX`。列`X`是`NUMBER(1,0)`类型,值为2, 3, 4, ..., 9;列`MX`是一个嵌套表,基于`MX_TAB_T`类型,包含所有小于或等于20的`X`的倍数。
```sql
SQL> create or replace type mx_tab_t
2 as table of number(2);
3 /
Type created.
SQL> create table testnest
2 ( x number(1,0)
3 , mx mx_tab_t
4 ) nested table mx store as mx_tab;
Table created.
```
为了高效地填充`TESTNEST`表,我们可以使用PL/SQL。
```sql
SQL> declare
2 i number;
3 j number;
4 begin
5 for i in 2..9 loop
6 insert into testnest (x, mx)
7 values (i, mx_tab_t());
8 for j in 1..20 loop
9 exit when i*j > 20;
10 insert into table (select mx from testnest where x=i)
11 values (i*j);
12 end loop;
13 end loop;
14 end;
15 /
PL/SQL procedure successfully completed.
```
查询`TESTNEST`表的内容:
```sql
SQL> col x format 9
SQL> col mx format a80
SQL> select * from testnest;
X MX
-- -----------------------
```
0
0
复制全文
相关推荐










