Skip to content

Commit

Permalink
doc: docs/oracle.md (#617)
Browse files Browse the repository at this point in the history
  • Loading branch information
jaywcjlove committed Apr 23, 2024
1 parent 4e21fd0 commit 5c34078
Showing 1 changed file with 99 additions and 30 deletions.
129 changes: 99 additions & 30 deletions docs/oracle.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,21 @@ Oracle 备忘清单
### SELECT 语句

```sql
SELECT * FROM beverages WHERE field1 = 'Kona' AND field2 = 'coffee' AND field3 = 122;
SELECT *
FROM beverages
WHERE field1 = 'Kona'
AND field2 = 'coffee'
AND field3 = 122;
```
<!--rehype:className=wrap-text-->

### SELECT INTO 语句

```sql
SELECT name,address,phone_number INTO v_employee_name,v_employee_address,v_employee_phone_number FROM employee WHERE employee_id = 6;
SELECT name, address, phone_number
INTO v_employee_name, v_employee_address, v_employee_phone_number
FROM employee
WHERE employee_id = 6;
```
<!--rehype:className=wrap-text-->

Expand All @@ -25,24 +32,35 @@ SELECT name,address,phone_number INTO v_employee_name,v_employee_address,v_emplo
使用 VALUES 关键字插入

```sql
INSERT INTO table_name VALUES ('Value1', 'Value2', ... );
INSERT INTO table_name(Column1, Column2, ... ) VALUES ( 'Value1', 'Value2', ... );
INSERT INTO table_name
VALUES ('Value1', 'Value2', ... );

INSERT INTO table_name (Column1, Column2, ... )
VALUES ( 'Value1', 'Value2', ... );
```
<!--rehype:className=wrap-text-->

使用 SELECT 语句插入

```sql
INSERT INTO table_name(SELECT Value1, Value2, ... from table_name );
INSERT INTO table_name(Column1, Column2, ... ) ( SELECT Value1, Value2, ... from table_name );
INSERT INTO table_name
SELECT Value1, Value2, ...
FROM table_name;

INSERT INTO table_name (Column1, Column2, ...)
SELECT Value1, Value2, ...
FROM table_name;
```
<!--rehype:className=wrap-text-->

### DELETE 语句

```sql
DELETE FROM table_name WHERE some_column=some_value
DELETE FROM customer WHERE sold = 0;
DELETE FROM table_name
WHERE some_column = some_value;

DELETE FROM customer
WHERE sold = 0;
```

### UPDATE 语句
Expand Down Expand Up @@ -384,7 +402,8 @@ CREATE TABLE table_name
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]
CONSTRAINT constraint_name
CHECK (column_name condition) [DISABLE]
);
```

Expand All @@ -410,7 +429,8 @@ CREATE TABLE table_name
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT constraint_name UNIQUE (column1, column2, column_n)
CONSTRAINT constraint_name
UNIQUE (column1, column2, column_n)
);
```

Expand All @@ -421,7 +441,8 @@ CREATE TABLE customer
(
id integer not null,
name varchar2(20),
CONSTRAINT customer_id_constraint UNIQUE (id)
CONSTRAINT customer_id_constraint
UNIQUE (id)
);
```

Expand All @@ -431,14 +452,18 @@ CREATE TABLE customer

```sql
ALTER TABLE [table name]
ADD CONSTRAINT [constraint name] UNIQUE( [column name] ) USING INDEX [index name];
ADD CONSTRAINT [constraint name]
UNIQUE([column name])
USING INDEX [index name];
```

例如:

```sql
ALTER TABLE employee
ADD CONSTRAINT uniqueEmployeeId UNIQUE(employeeId) USING INDEX ourcompanyIndx_tbs;
ADD CONSTRAINT uniqueEmployeeId
UNIQUE(employeeId)
USING INDEX ourcompanyIndx_tbs;
```

### 添加外部约束
Expand All @@ -447,14 +472,19 @@ foregin 约束的语法是:

```sql
ALTER TABLE [table name]
ADD CONSTRAINT [constraint name] FOREIGN KEY (column,...) REFERENCES table [(column,...)] [ON DELETE {CASCADE | SET NULL}]
ADD CONSTRAINT [constraint name]
FOREIGN KEY (column,...)
REFERENCES table [(column,...)]
[ON DELETE {CASCADE | SET NULL}];
```

例如:

```sql
ALTER TABLE employee
ADD CONSTRAINT fk_departament FOREIGN KEY (departmentId) REFERENCES departments(Id);
ADD CONSTRAINT fk_departament
FOREIGN KEY (departmentId)
REFERENCES departments(Id);
```

### 删除约束
Expand Down Expand Up @@ -482,13 +512,17 @@ INDEXES

```sql
CREATE [UNIQUE] INDEX index_name
ON table_name (column1, column2, . column_n)
ON table_name (
column1,
column2,
.
column_n
)
[ COMPUTE STATISTICS ];
```

`UNIQUE` 表示索引列中值的组合必须是唯一的

`COMPUTE STATISTICS` 告诉 Oracle 在创建索引期间收集统计信息。 然后优化器使用这些统计信息来选择执行语句时的最佳执行计划。例如:
- `UNIQUE` 表示索引列中值的组合必须是唯一的
- `COMPUTE STATISTICS` 告诉 Oracle 在创建索引期间收集统计信息。然后优化器使用这些统计信息来选择执行语句时的最佳执行计划。例如:

```sql
CREATE INDEX customer_idx
Expand Down Expand Up @@ -604,7 +638,8 @@ DBA 相关
创建用户的语法是:

```sql
CREATE USER username IDENTIFIED BY password;
CREATE USER username
IDENTIFIED BY password;
```

例如:
Expand Down Expand Up @@ -642,53 +677,87 @@ ALTER USER brian IDENTIFIED BY brianpassword;
```

### 查看表空间的名称以及大小
<!--rehype:wrap-class=col-span-2-->

```sql
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;
SELECT t.table_name,
ROUND(SUM(bytes / (1024 * 1024)), 0) AS ts_size
FROM dba_tablespaces t,
dba_data_files d
WHERE t.table_name = d.table_name
GROUP BY t.table_name;
```

### 查看还没提交的事务

```sql
select * from v$locked_object;
select * from v$transaction;
```

### 查看数据库库对象
<!--rehype:wrap-class=col-span-2-->

```sql
select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, OJIB status;
SELECT owner, object_type, status, COUNT(*) AS count#
FROM all_objects
GROUP BY owner, object_type, status;
```

### 查看数据库的版本

```sql
Select version FROM Product_component_version where SUBSTR(PRODUCT,1,6) = 'Oracle';
SELECT version
FROM Product_component_version
WHERE SUBSTR(PRODUCT, 1, 6) = 'Oracle';
```

### 查看数据库的创建日期和归档方式

```sql
select created, Log_Mode, Log_Mode From v$Database;
SELECT created, Log_Mode, Log_Mode
FROM v$Database;
```

### 查看控制文件

```sql
select name from v$controlfile;
```

### 查看日志文件

```sql
select member from v$logfile;
```

### 查看表空间的使用情況
<!--rehype:wrap-class=col-span-2-->

```sql
select sum (bytes)/(1024*1024) as free_space, tablespace_name from dba_free_space group by tablespace_name;
SELECT SUM(bytes)/(1024*1024) AS free_space,
tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;
```

### 捕捉运行很久的SOL
```sql
column username format a12
column opname format a16
column progress format a8

select username,sid,opname,round(sofar* 100 / totalwork,0) || '%' as progress,time_remaining,sqL_text from v$session_longops,v$sql where time_remaining <> 0 and sql_address = address and sql_hash_value = hash_value
```sql
COLUMN username FORMAT A12
COLUMN opname FORMAT A16
COLUMN progress FORMAT A8

SELECT username,
sid,
opname,
ROUND(sofar * 100 / totalwork, 0) || '%' AS progress,
time_remaining,
sql_text
FROM v$session_longops, v$sql
WHERE time_remaining <> 0
AND sql_address = address
AND sql_hash_value = hash_value;
```

另见
Expand Down

0 comments on commit 5c34078

Please sign in to comment.