6.8 KiB
6.8 KiB
Oracle 备忘清单
入门
SELECT 语句
SELECT * FROM beverages WHERE field1 = 'Kona' AND field2 = 'coffee' AND field3 = 122;
SELECT INTO 语句
SELECT name,address,phone_number INTO v_employee_name,v_employee_address,v_employee_phone_number FROM employee WHERE employee_id = 6;
INSERT 语句
使用 VALUES 关键字插入
INSERT INTO table_name VALUES ('Value1', 'Value2', ... );
INSERT INTO table_name(Column1, Column2, ... ) VALUES ( 'Value1', 'Value2', ... );
使用 SELECT 语句插入
INSERT INTO table_name(SELECT Value1, Value2, ... from table_name );
INSERT INTO table_name(Column1, Column2, ... ) ( SELECT Value1, Value2, ... from table_name );
DELETE 语句
DELETE FROM table_name WHERE some_column=some_value
DELETE FROM customer WHERE sold = 0;
UPDATE 语句
-- 更新该表的整个列,设置 `state` 列所有值为 `CA`
UPDATE customer SET state='CA';
-- 更新表的具体记录eg:
UPDATE customer SET name='Joe' WHERE customer_id=10;
-- 当 `paid` 列大于零时,将列 `invoice` 更新为 `paid`
UPDATE movies SET invoice='paid' WHERE paid > 0;
SEQUENCES
CREATE SEQUENCE
序列的语法是
CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;
例如
CREATE SEQUENCE supplier_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
ALTER SEQUENCE
将序列增加一定数量
ALTER SEQUENCE <sequence_name> INCREMENT BY <integer>;
ALTER SEQUENCE seq_inc_by_ten INCREMENT BY 10;
改变序列的最大值
ALTER SEQUENCE <sequence_name> MAXVALUE <integer>;
ALTER SEQUENCE seq_maxval MAXVALUE 10;
设置序列循环或不循环
ALTER SEQUENCE <sequence_name> <CYCLE | NOCYCLE>;
ALTER SEQUENCE seq_cycle NOCYCLE;
配置序列以缓存值
ALTER SEQUENCE <sequence_name> CACHE <integer> | NOCACHE;
ALTER SEQUENCE seq_cache NOCACHE;
设置是否按顺序返回值
ALTER SEQUENCE <sequence_name> <ORDER | NOORDER>;
ALTER SEQUENCE seq_order NOORDER;
ALTER SEQUENCE seq_order;
从字符串生成查询
有时需要从字符串创建查询
PROCEDURE oracle_runtime_query_pcd IS
TYPE ref_cursor IS REF CURSOR;
l_cursor ref_cursor;
v_query varchar2(5000);
v_name varchar2(64);
BEGIN
v_query := 'SELECT name FROM employee WHERE employee_id=5';
OPEN l_cursor FOR v_query;
LOOP
FETCH l_cursor INTO v_name;
EXIT WHEN l_cursor%NOTFOUND;
END LOOP;
CLOSE l_cursor;
END;
这是一个如何完成动态查询的非常简单的示例
字符串操作
length( string1 );
SELECT length('hello world') FROM dual;
这将返回 11,因为参数由 11 个字符组成,包括空格
SELECT lengthb('hello world') FROM dual;
SELECT lengthc('hello world') FROM dual;
SELECT length2('hello world') FROM dual;
SELECT length4('hello world') FROM dual;
这些也返回 11
,因为调用的函数是等价的
Instr
Instr
(在字符串中)返回一个整数,该整数指定字符串中子字符串的位置。程序员可以指定他们想要检测的字符串的外观以及起始位置。不成功的搜索返回 0
instr( string1, string2, [ start_position ], [ nth_appearance ] )
instr( 'oracle pl/sql cheatsheet', '/');
这将返回 10
,因为第一次出现的 /
是第十个字符
instr( 'oracle pl/sql cheatsheet', 'e', 1, 2);
这将返回 17
,因为第二次出现的 e
是第 17
个字符
instr( 'oracle pl/sql cheatsheet', '/', 12, 1);
这将返回 0
,因为第一次出现的 /
在起点之前,即第 12
个字符
Replace
replace(string1, string_to_replace, [ replacement_string ] );
replace('i am here','am','am not');
这返回 i am not here
Substr
SELECT substr( 'oracle pl/sql cheatsheet', 8, 6) FROM dual;
返回 pl/sql
,因为 pl/sql
中的 p
在字符串中的第 8
个位置(从 oracle
中的 o
处的 1
开始计算)
SELECT substr( 'oracle pl/sql cheatsheet', 15) FROM dual;
返回 cheatsheet
,因为 c
在字符串中的第 15
个位置,t
是字符串中的最后一个字符。
SELECT substr('oracle pl/sql cheatsheet', -10, 5) FROM dual;
返回 cheat
,因为 c
是字符串中的第 10
个字符,从字符串末尾以 t
作为位置 1
开始计算。
Trim
这些函数可用于从字符串中过滤不需要的字符。默认情况下,它们会删除空格,但也可以指定要删除的字符集
trim ( [ leading | trailing | both ] [ trim-char ] from string-to-be-trimmed );
trim (' 删除两侧的空格 ');
这将返回“删除两侧的空格
”
ltrim ( string-to-be-trimmed [, trimming-char-set ] );
ltrim (' 删除左侧的空格 ');
这将返回“删除左侧的空格
”
rtrim ( string-to-be-trimmed [, trimming-char-set ] );
rtrim (' 删除右侧的空格 ');
这将返回“ 删除右侧的空格
”
DDL SQL
创建表
创建表的语法
CREATE TABLE [table name]
( [column name] [datatype], ... );
示例:
CREATE TABLE employee
(id int, name varchar(20));
添加列
添加列的语法
ALTER TABLE [table name]
ADD ( [column name] [datatype], ... );
示例:
ALTER TABLE employee
ADD (id int)
修改列
修改列的语法
ALTER TABLE [table name]
MODIFY ( [column name] [new datatype]);
ALTER
表语法和示例:
ALTER TABLE employee
MODIFY( sickHours s float );
删除列
删除列的语法
ALTER TABLE [table name]
DROP COLUMN [column name];
示例:
ALTER TABLE employee
DROP COLUMN vacationPay;
另见
- Oracle Database/SQL Cheatsheet (wikibooks.org)