亚洲成A人片在线观看网站_成年网站免费视频A在线双飞_日日日日做夜夜夜夜无码_久久夜色撩人精品国产小说

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;

約束類型和代碼

類型代碼類型描述作用于級別
C檢查表Column
O在視圖上只讀Object
P首要的關鍵Object
R參考 AKA 外鍵Column
U唯一鍵Column
V檢查視圖上的選項Object

顯示約束

以下語句顯示了系統中的所有約束:

SELECT
    table_name,
    constraint_name,
    constraint_type
FROM user_constraints;

選擇參照約束

以下語句顯示了源和目標表/列對的所有引用約束(外鍵):

SELECT
    c_list.CONSTRAINT_NAME as NAME,
    c_src.TABLE_NAME as SRC_TABLE,
    c_src.COLUMN_NAME as SRC_COLUMN,
    c_dest.TABLE_NAME as DEST_TABLE,
    c_dest.COLUMN_NAME as DEST_COLUMN
FROM ALL_CONSTRAINTS c_list,
    ALL_CONS_COLUMNS c_src,
    ALL_CONS_COLUMNS c_dest
WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
    AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
    AND c_list.CONSTRAINT_TYPE = 'R'

對表設置約束

使用 CREATE TABLE 語句創建檢查約束的語法是:

CREATE TABLE table_name
(
    column1 datatype null/not null,
    column2 datatype null/not null,
    ...
    CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]
);

例如:

CREATE TABLE suppliers
(
    supplier_id  numeric(4),
    supplier_name  varchar2(50),
    CONSTRAINT check_supplier_id
    CHECK (supplier_id BETWEEN 100 and 9999)
);

表上的唯一索引

使用 CREATE TABLE 語句創建唯一約束的語法是:

CREATE TABLE table_name
(
    column1 datatype null/not null,
    column2 datatype null/not null,
    ...
    CONSTRAINT constraint_name UNIQUE (column1, column2, column_n)
);

例如:

CREATE TABLE customer
(
    id   integer not null,
    name varchar2(20),
    CONSTRAINT customer_id_constraint UNIQUE (id)
);

添加唯一約束

唯一約束的語法是:

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

例如:

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

添加外部約束

foregin 約束的語法是:

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

例如:

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

刪除約束

刪除(刪除)約束的語法是:

ALTER TABLE [table name]
    DROP CONSTRAINT [constraint name];

例如:

ALTER TABLE employee
    DROP CONSTRAINT uniqueEmployeeId;

INDEXES

創建索引

創建索引的語法是:

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

UNIQUE 表示索引列中值的組合必須是唯一的

COMPUTE STATISTICS 告訴 Oracle 在創建索引期間收集統計信息。 然后優化器使用這些統計信息來選擇執行語句時的最佳執行計劃。例如:

CREATE INDEX customer_idx
    ON customer (customer_name);

在此示例中,已在名為 customer_idx 的客戶表上創建了一個索引。它僅包含 customer_name 字段

下面創建一個包含多個字段的索引:

CREATE INDEX customer_idx
    ON supplier (customer_name, country);

以下內容在創建索引時收集統計信息:

CREATE INDEX customer_idx
    ON supplier (customer_name, country)
    COMPUTE STATISTICS;

創建基于函數的索引

Oracle 中,您不僅限于在列上創建索引。您可以創建基于函數的索引

創建基于函數的索引的語法是:

CREATE [UNIQUE] INDEX index_name
    ON table_name (function1, function2, . function_n)
    [ COMPUTE STATISTICS ];

例如:

CREATE INDEX customer_idx
    ON customer (UPPER(customer_name));
-- 已創建基于 customer_name 字段的大寫評估的索引

為確保 Oracle 優化器在執行 SQL 語句時使用此索引,請確保 UPPER(customer_name) 的計算結果不為 NULL 值。 為確保這一點,請將 UPPER(customer_name) IS NOT NULL 添加到 WHERE 子句中,如下所示:

SELECT customer_id, customer_name, UPPER(customer_name)
FROM customer
WHERE UPPER(customer_name) IS NOT NULL
ORDER BY UPPER(customer_name);

重命名索引

重命名索引的語法是:

ALTER INDEX index_name
    RENAME TO new_index_name;

例如:

ALTER INDEX customer_id
    RENAME TO new_customer_id;

在此示例中,customer_id 重命名為 new_customer_id

收集索引的統計信息

如果您需要在索引首次創建后收集統計信息或者您想要更新統計信息,您總是可以使用 ALTER INDEX 命令來收集統計信息。 您收集統計信息以便 oracle 可以有效地使用索引。 這將重新計算表大小、行數、塊數、段數并更新字典表,以便 oracle 在選擇執行計劃時可以有效地使用數據。

收集索引統計信息的語法是:

ALTER INDEX index_name
    REBUILD COMPUTE STATISTICS;

例如:

ALTER INDEX customer_idx
    REBUILD COMPUTE STATISTICS;

在此示例中,為名為 customer_idx 的索引收集統計信息

刪除索引

刪除索引的語法是:

DROP INDEX index_name;

例如:

DROP INDEX customer_idx;

在此示例中,刪除了 customer_idx

DBA 相關

創建用戶

創建用戶的語法是:

CREATE USER username IDENTIFIED BY password;

例如:

CREATE USER brian IDENTIFIED BY brianpass;

授予特權

授予權限的語法是:

GRANT privilege TO user;

例如:

GRANT dba TO brian;

更改密碼

更改用戶密碼的語法是:

ALTER USER username IDENTIFIED BY password;

例如:

ALTER USER brian IDENTIFIED BY brianpassword;

另見

  • (wikibooks.org)