<think>根据用户需求,需要提供在Oracle 19c中创建表和插入数据的SQL脚本示例。结合引用内容,特别是引用[3]中提供了创建表并插入数据的示例,以及使用PL/SQL循环插入多条数据的示例。引用[1]中也有使用Python连接Oracle并执行SQL的示例,但用户明确要求SQL脚本,因此主要提供SQL脚本。
注意:在Oracle中,创建表需要先有用户和权限。假设已经创建了用户并授予了必要的权限(如引用[3]中提到的创建本地用户和授予权限)。
以下提供两个示例:
1. 基本示例:创建表并插入几条数据。
2. 进阶示例:使用PL/SQL循环插入100条数据(如引用[3]所示)。
另外,引用[4]提到在CDB环境下需要注意连接方式,但脚本本身在PDB中执行与非CDB类似。这里假设我们在PDB中操作。
示例1:基本创建表和插入数据
```sql
-- 创建表
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
age NUMBER,
email VARCHAR2(100),
created_date DATE
);
-- 插入单条数据
INSERT INTO employees (id, name, age, email, created_date)
VALUES (1, 'John Doe', 30, 'john.doe@example.com', SYSDATE);
-- 插入多条数据
INSERT INTO employees (id, name, age, email, created_date)
VALUES (2, 'Jane Smith', 28, 'jane.smith@example.com', SYSDATE);
INSERT INTO employees (id, name, age, email, created_date)
VALUES (3, 'Bob Johnson', 35, 'bob.johnson@example.com', SYSDATE);
-- 提交
COMMIT;
```
示例2:使用PL/SQL块插入100条随机数据(参考引用[3])
```sql
-- 假设已经创建了表employees
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO employees (id, name, age, email, created_date)
VALUES (
i,
'Name_' || i,
TRUNC(DBMS_RANDOM.VALUE(18, 60)), -- 生成18到60之间的随机整数年龄
'user' || i || '@example.com',
SYSDATE - DBMS_RANDOM.VALUE(0, 365) -- 随机生成一年内的日期
);
END LOOP;
COMMIT;
END;
/
```
注意:
1. 使用`DBMS_RANDOM`包生成随机数,需要确保有执行该包的权限。
2. 在运行PL/SQL块之前,确保表已创建。
如果用户没有创建表的权限,需要先创建用户并授权(如引用[3]中提到的创建用户和授权步骤):
```sql
-- 创建用户(在CDB环境下需要在PDB中创建,这里假设PDB为orclpdb)
ALTER SESSION SET CONTAINER = orclpdb;
CREATE USER db_user IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO db_user;
ALTER USER db_user QUOTA UNLIMITED ON users;
```
然后切换到该用户下创建表。
以上脚本可以直接在SQL*Plus或SQL Developer中执行。
引用说明:
[^1] 提供了使用Python连接Oracle的示例,但用户需要的是SQL脚本,因此未直接采用。
[^3] 提供了使用PL/SQL循环插入数据的示例,这里借鉴并稍作调整。
[^4] 提到了在CDB环境下安装样例数据库的注意事项,但本例中创建普通表不受影响。
根据用户需求,生成相关问题:
1. 如何在Oracle 19c中创建新用户并授予权限?
2. 如何在Oracle 19c中生成随机数据?
3. 如何在Oracle 19c中查看表结构和数据?</think>以下是在 Oracle 19c 中创建表和插入数据的 SQL 脚本示例,包含基本操作和批量插入技巧:
### 基础示例:创建表并插入数据
```sql
-- 创建用户并授权(需DBA权限)
CREATE USER demo_user IDENTIFIED BY your_password;
GRANT CONNECT, RESOURCE TO demo_user;
ALTER USER demo_user QUOTA UNLIMITED ON USERS;
-- 切换到新用户
CONNECT demo_user/your_password
-- 创建员工表
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
salary NUMBER(8,2),
hire_date DATE DEFAULT SYSDATE
);
-- 插入单条数据
INSERT INTO employees (id, name, salary)
VALUES (1, '张三', 8500.00);
-- 插入多条数据
INSERT ALL
INTO employees (id, name, salary) VALUES (2, '李四', 9200.00)
INTO employees (id, name, salary) VALUES (3, '王五', 7800.00)
SELECT * FROM dual;
-- 提交事务
COMMIT;
```
### 批量插入100条随机数据(使用PL/SQL)
```sql
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO employees (id, name, salary, hire_date)
VALUES (
i,
'员工_' || DBMS_RANDOM.STRING('U',5), -- 随机5位大写字母名字
ROUND(DBMS_RANDOM.VALUE(5000, 20000), 2), -- 随机工资
SYSDATE - DBMS_RANDOM.VALUE(0, 365*3) -- 3年内随机入职日期
);
END LOOP;
COMMIT;
END;
/
```
### 关键说明:
1. **用户创建**:需`CREATE USER`权限,建议使用`GRANT CONNECT, RESOURCE`授权基础权限[^3]
2. **表设计**:
- `NUMBER`:存储数值类型
- `VARCHAR2`:可变长度字符串
- `DATE`:日期类型,`DEFAULT SYSDATE`设置默认值
3. **批量插入**:
- 使用`INSERT ALL`语法插入多行[^1]
- 结合`DBMS_RANDOM`包生成随机数据[^3]
- `COMMIT`提交事务确保数据持久化
### 验证数据
```sql
-- 查看前10条记录
SELECT * FROM employees WHERE ROWNUM <= 10;
-- 统计信息
SELECT COUNT(*) AS total, AVG(salary) AS avg_salary FROM employees;
```
> **注意**:在CDB容器数据库中,需先切换到PDB执行:
> ```sql
> ALTER SESSION SET CONTAINER = your_pdb_name;
> ```