数据库:一文把握 Oracle 的各种指令(Oracle指令备忘) ...

打印 上一主题 下一主题

主题 1743|帖子 1743|积分 5229

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
入门

SELECT 语句

  1. SELECT *
  2. FROM beverages
  3. WHERE field1 = 'Kona'
  4.   AND field2 = 'coffee'
  5.   AND field3 = 122;
复制代码
SELECT INTO 语句

  1. SELECT name, address, phone_number
  2. INTO v_employee_name, v_employee_address, v_employee_phone_number
  3. FROM employee
  4. WHERE employee_id = 6;
复制代码
INSERT 语句

  使用 VALUES 关键字插入
  1. INSERT INTO table_name
  2. VALUES ('Value1', 'Value2', ... );
  3. INSERT INTO table_name (Column1, Column2, ... )
  4. VALUES ( 'Value1', 'Value2', ... );
复制代码
使用 SELECT 语句插入
  1. INSERT INTO table_name
  2. SELECT Value1, Value2, ...
  3. FROM table_name;
  4. INSERT INTO table_name (Column1, Column2, ...)
  5. SELECT Value1, Value2, ...
  6. FROM table_name;
复制代码
DELETE 语句

  1. DELETE FROM table_name
  2. WHERE some_column = some_value;
  3. DELETE FROM customer
  4. WHERE sold = 0;
复制代码
UPDATE 语句

  1. -- 更新该表的整个列,设置 `state` 列所有值为 `CA`
  2. UPDATE customer SET state='CA';
  3. -- 更新表的具体记录eg:
  4. UPDATE customer SET name='Joe' WHERE customer_id=10;
  5. -- 当 `paid` 列大于零时,将列 `invoice` 更新为 `paid`
  6. UPDATE movies SET invoice='paid' WHERE paid > 0;
复制代码
SEQUENCES

CREATE SEQUENCE

序列的语法是
  1. CREATE SEQUENCE sequence_name
  2.     MINVALUE value
  3.     MAXVALUE value
  4.     START WITH value
  5.     INCREMENT BY value
  6.     CACHE value;
复制代码
例如
  1. CREATE SEQUENCE supplier_seq
  2.     MINVALUE 1
  3.     MAXVALUE 999999999999999999999999999
  4.     START WITH 1
  5.     INCREMENT BY 1
  6.     CACHE 20;
复制代码
ALTER SEQUENCE

  将序列增加肯定数量
  1. ALTER SEQUENCE <sequence_name> INCREMENT BY <integer>;
  2. ALTER SEQUENCE seq_inc_by_ten  INCREMENT BY 10;
复制代码
改变序列的最大值
  1. ALTER SEQUENCE <sequence_name> MAXVALUE <integer>;
  2. ALTER SEQUENCE seq_maxval  MAXVALUE  10;
复制代码
设置序列循环或不循环
  1. ALTER SEQUENCE <sequence_name> <CYCLE | NOCYCLE>;
  2. ALTER SEQUENCE seq_cycle NOCYCLE;
复制代码
设置序列以缓存值
  1. ALTER SEQUENCE <sequence_name> CACHE <integer> | NOCACHE;
  2. ALTER SEQUENCE seq_cache NOCACHE;
复制代码
设置是否按顺序返回值
  1. ALTER SEQUENCE <sequence_name> <ORDER | NOORDER>;
  2. ALTER SEQUENCE seq_order NOORDER;
  3. ALTER SEQUENCE seq_order;
复制代码
从字符串生成查询

  偶然需要从字符串创建查询
  1. PROCEDURE oracle_runtime_query_pcd IS
  2.     TYPE ref_cursor IS REF CURSOR;
  3.     l_cursor        ref_cursor;
  4.     v_query         varchar2(5000);
  5.     v_name          varchar2(64);
  6. BEGIN
  7.     v_query := 'SELECT name FROM employee WHERE employee_id=5';
  8.     OPEN l_cursor FOR v_query;
  9.     LOOP
  10.       FETCH l_cursor INTO v_name;
  11.       EXIT WHEN l_cursor%NOTFOUND;
  12.     END LOOP;
  13.     CLOSE l_cursor;
  14. END;
复制代码
这是一个怎样完成动态查询的非常简朴的示例
字符串操纵

  1. length( string1 );
复制代码

  1. SELECT length('hello world') FROM dual;
复制代码
这将返回 11,由于参数由 11 个字符组成,包括空格
  1. SELECT lengthb('hello world') FROM dual;
  2. SELECT lengthc('hello world') FROM dual;
  3. SELECT length2('hello world') FROM dual;
  4. SELECT length4('hello world') FROM dual;
复制代码
这些也返回 11,由于调用的函数是等价的
Instr

  Instr(在字符串中)返回一个整数,该整数指定字符串中子字符串的位置。程序员可以指定他们想要检测的字符串的表面以及起始位置。不成功的搜索返回 0
  1. instr( string1, string2, [ start_position ], [ nth_appearance ] )
复制代码

  1. instr( 'oracle pl/sql cheatsheet', '/');
复制代码
这将返回 10,由于第一次出现的 / 是第十个字符
  1. instr( 'oracle pl/sql cheatsheet', 'e', 1, 2);
复制代码
这将返回 17,由于第二次出现的 e 是第 17 个字符
  1. instr( 'oracle pl/sql cheatsheet', '/', 12, 1);
复制代码
这将返回 0,由于第一次出现的 / 在起点之前,即第 12 个字符
Replace

  1. replace(string1, string_to_replace, [ replacement_string ] );
  2. replace('i am here','am','am not');
复制代码
这返回 i am not here
Substr

  1. SELECT substr( 'oracle pl/sql cheatsheet', 8, 6) FROM dual;
复制代码
返回 pl/sql,由于 pl/sql 中的 p 在字符串中的第 8 个位置(从 oracle 中的 o 处的 1 开始盘算)
  1. SELECT substr( 'oracle pl/sql cheatsheet', 15) FROM dual;
复制代码
返回 cheatsheet,由于 c 在字符串中的第 15 个位置,t是字符串中的最后一个字符。
  1. SELECT substr('oracle pl/sql cheatsheet', -10, 5) FROM dual;
复制代码
返回 cheat,由于 c 是字符串中的第 10 个字符,从字符串末尾以 t 作为位置 1 开始盘算。
Trim

这些函数可用于从字符串中过滤不需要的字符。默认情况下,它们会删除空格,但也可以指定要删除的字符集
  1. trim ( [ leading | trailing | both ] [ trim-char ] from string-to-be-trimmed );
  2. trim ('   删除两侧的空格     ');
复制代码
这将返回“删除两侧的空格”
  1. ltrim ( string-to-be-trimmed [, trimming-char-set ] );
  2. ltrim ('   删除左侧的空格     ');
复制代码
这将返回“删除左侧的空格      ”
  1. rtrim ( string-to-be-trimmed [, trimming-char-set ] );
  2. rtrim ('   删除右侧的空格     ');
复制代码
这将返回“      删除右侧的空格”
DDL SQL

创建表

创建表的语法
  1. CREATE TABLE [table name]
  2.       ( [column name] [datatype], ... );
复制代码
示例:
  1. CREATE TABLE employee
  2.        (id int, name varchar(20));
复制代码
添加列

添加列的语法
  1. ALTER TABLE [table name]
  2.     ADD ( [column name] [datatype], ... );
复制代码
示例:
  1. ALTER TABLE employee
  2.     ADD (id int)
复制代码
修改列

修改列的语法
  1. ALTER TABLE [table name]
  2.     MODIFY ( [column name] [new datatype]);
复制代码
ALTER 表语法和示例:
  1. ALTER TABLE employee
  2.     MODIFY( sickHours s float );
复制代码
删除列

删除列的语法
  1. ALTER TABLE [table name]
  2.     DROP COLUMN [column name];
复制代码
示例:
  1. ALTER TABLE employee
  2.     DROP COLUMN vacationPay;
复制代码
约束类型和代码

类型代码类型形貌作用于级别C查抄表ColumnO在视图上只读ObjectP首要的关键ObjectR参考 AKA 外键ColumnU唯一键ColumnV查抄视图上的选项Object 表现约束

以下语句表现了体系中的所有约束:
  1. SELECT
  2.     table_name,
  3.     constraint_name,
  4.     constraint_type
  5. FROM user_constraints;
复制代码
选择参照约束

以下语句表现了源和目标表/列对的所有引用约束(外键):
  1. SELECT
  2.     c_list.CONSTRAINT_NAME as NAME,
  3.     c_src.TABLE_NAME as SRC_TABLE,
  4.     c_src.COLUMN_NAME as SRC_COLUMN,
  5.     c_dest.TABLE_NAME as DEST_TABLE,
  6.     c_dest.COLUMN_NAME as DEST_COLUMN
  7. FROM ALL_CONSTRAINTS c_list,
  8.     ALL_CONS_COLUMNS c_src,
  9.     ALL_CONS_COLUMNS c_dest
  10. WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
  11.     AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
  12.     AND c_list.CONSTRAINT_TYPE = 'R'
复制代码
对表设置约束

使用 CREATE TABLE 语句创建查抄约束的语法是:
  1. CREATE TABLE table_name
  2. (
  3.     column1 datatype null/not null,
  4.     column2 datatype null/not null,
  5.     ...
  6.     CONSTRAINT constraint_name
  7.     CHECK (column_name condition) [DISABLE]
  8. );
复制代码
例如:
  1. CREATE TABLE suppliers
  2. (
  3.     supplier_id  numeric(4),
  4.     supplier_name  varchar2(50),
  5.     CONSTRAINT check_supplier_id
  6.     CHECK (supplier_id BETWEEN 100 and 9999)
  7. );
复制代码
表上的唯一索引

使用 CREATE TABLE 语句创建唯一约束的语法是:
  1. CREATE TABLE table_name
  2. (
  3.     column1 datatype null/not null,
  4.     column2 datatype null/not null,
  5.     ...
  6.     CONSTRAINT constraint_name
  7.     UNIQUE (column1, column2, column_n)
  8. );
复制代码
例如:
  1. CREATE TABLE customer
  2. (
  3.     id   integer not null,
  4.     name varchar2(20),
  5.     CONSTRAINT customer_id_constraint
  6.     UNIQUE (id)
  7. );
复制代码
添加唯一约束

唯一约束的语法是:
  1. ALTER TABLE [table name]
  2.     ADD CONSTRAINT [constraint name]
  3.     UNIQUE([column name])
  4.     USING INDEX [index name];
复制代码
例如:
  1. ALTER TABLE employee
  2.     ADD CONSTRAINT uniqueEmployeeId
  3.     UNIQUE(employeeId)
  4.     USING INDEX ourcompanyIndx_tbs;
复制代码
添加外部约束

foregin 约束的语法是:
  1. ALTER TABLE [table name]
  2.     ADD CONSTRAINT [constraint name]
  3.     FOREIGN KEY (column,...)
  4.     REFERENCES table [(column,...)]
  5.     [ON DELETE {CASCADE | SET NULL}];
复制代码
例如:
  1. ALTER TABLE employee
  2.     ADD CONSTRAINT fk_departament
  3.     FOREIGN KEY (departmentId)
  4.     REFERENCES departments(Id);
复制代码
删除约束

删除(删除)约束的语法是:
  1. ALTER TABLE [table name]
  2.     DROP CONSTRAINT [constraint name];
复制代码
例如:
  1. ALTER TABLE employee
  2.     DROP CONSTRAINT uniqueEmployeeId;
复制代码
INDEXES

创建索引

创建索引的语法是:
  1. CREATE [UNIQUE] INDEX index_name
  2.     ON table_name (
  3.         column1,
  4.         column2,
  5.         .
  6.         column_n
  7.     )
  8.     [ COMPUTE STATISTICS ];
复制代码


  • UNIQUE 表现索引列中值的组合必须是唯一的
  • COMPUTE STATISTICS 告诉 Oracle 在创建索引期间网络统计信息。然后优化器使用这些统计信息来选择执行语句时的最佳执行筹划。例如:
  1. CREATE INDEX customer_idx
  2.     ON customer (customer_name);
复制代码
在此示例中,已在名为 customer_idx 的客户表上创建了一个索引。它仅包罗 customer_name 字段
下面创建一个包罗多个字段的索引:
  1. CREATE INDEX customer_idx
  2.     ON supplier (customer_name, country);
复制代码
以下内容在创建索引时网络统计信息:
  1. CREATE INDEX customer_idx
  2.     ON supplier (customer_name, country)
  3.     COMPUTE STATISTICS;
复制代码
创建基于函数的索引

  在 Oracle 中,您不但限于在列上创建索引。您可以创建基于函数的索引
创建基于函数的索引的语法是:
  1. CREATE [UNIQUE] INDEX index_name
  2.     ON table_name (function1, function2, . function_n)
  3.     [ COMPUTE STATISTICS ];
复制代码
例如:
  1. CREATE INDEX customer_idx
  2.     ON customer (UPPER(customer_name));
  3. -- 已创建基于 customer_name 字段的大写评估的索引
复制代码
为确保 Oracle 优化器在执行 SQL 语句时使用此索引,请确保 UPPER(customer_name) 的盘算结果不为 NULL 值。 为确保这一点,请将 UPPER(customer_name) IS NOT NULL 添加到 WHERE 子句中,如下所示:
  1. SELECT customer_id, customer_name, UPPER(customer_name)
  2. FROM customer
  3. WHERE UPPER(customer_name) IS NOT NULL
  4. ORDER BY UPPER(customer_name);
复制代码
重命名索引

重命名索引的语法是:
  1. ALTER INDEX index_name
  2.     RENAME TO new_index_name;
复制代码
例如:
  1. ALTER INDEX customer_id
  2.     RENAME TO new_customer_id;
复制代码
在此示例中,customer_id 重命名为 new_customer_id
网络索引的统计信息

如果您需要在索引初次创建后网络统计信息或者您想要更新统计信息,您总是可以使用 ALTER INDEX 下令来网络统计信息。 您网络统计信息以便 oracle 可以有用地使用索引。 这将重新盘算表巨细、行数、块数、段数并更新字典表,以便 oracle 在选择执行筹划时可以有用地使用数据。
网络索引统计信息的语法是:
  1. ALTER INDEX index_name
  2.     REBUILD COMPUTE STATISTICS;
复制代码
例如:
  1. ALTER INDEX customer_idx
  2.     REBUILD COMPUTE STATISTICS;
复制代码
在此示例中,为名为 customer_idx 的索引网络统计信息
删除索引

删除索引的语法是:
  1. DROP INDEX index_name;
复制代码
例如:
  1. DROP INDEX customer_idx;
复制代码
在此示例中,删除了 customer_idx
DBA 相干

创建用户

创建用户的语法是:
  1. CREATE USER username
  2.     IDENTIFIED BY password;
复制代码
例如:
  1. CREATE USER brian IDENTIFIED BY brianpass;
复制代码
授予特权

授予权限的语法是:
  1. GRANT privilege TO user;
复制代码
例如:
  1. GRANT dba TO brian;
复制代码
更改密码

更改用户密码的语法是:
  1. ALTER USER username IDENTIFIED BY password;
复制代码
例如:
  1. ALTER USER brian IDENTIFIED BY brianpassword;
复制代码
检察表空间的名称以及巨细

  1. SELECT t.table_name,
  2.        ROUND(SUM(bytes / (1024 * 1024)), 0) AS ts_size
  3. FROM dba_tablespaces t,
  4.      dba_data_files d
  5. WHERE t.table_name = d.table_name
  6. GROUP BY t.table_name;
复制代码
检察还没提交的事件

  1. select * from v$locked_object;
  2. select * from v$transaction;
复制代码
检察数据库库对象

  1. SELECT owner, object_type, status, COUNT(*) AS count#
  2. FROM all_objects
  3. GROUP BY owner, object_type, status;
复制代码
检察数据库的版本

  1. SELECT version
  2. FROM Product_component_version
  3. WHERE SUBSTR(PRODUCT, 1, 6) = 'Oracle';
复制代码
检察数据库的创建日期和归档方式

  1. SELECT created, Log_Mode, Log_Mode
  2. FROM v$Database;
复制代码
检察控制文件

  1. select name from v$controlfile;
复制代码
检察日记文件

  1. select member from v$logfile;
复制代码
检察表空间的使用情況

  1. SELECT SUM(bytes)/(1024*1024) AS free_space,
  2.        tablespace_name
  3. FROM dba_free_space
  4. GROUP BY tablespace_name;
复制代码
捕捉运行很久的SOL

  1. COLUMN username FORMAT A12
  2. COLUMN opname FORMAT A16
  3. COLUMN progress FORMAT A8
  4. SELECT username,
  5.        sid,
  6.        opname,
  7.        ROUND(sofar * 100 / totalwork, 0) || '%' AS progress,
  8.        time_remaining,
  9.        sql_text
  10. FROM v$session_longops, v$sql
  11. WHERE time_remaining <> 0
  12.   AND sql_address = address
  13.   AND sql_hash_value = hash_value;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表