SQL基本语法
SQL分类
数据定义语言DDL:CREATE/DROP/ALTER/COMMENT/TRUNCATE等
数据操作语言DML:UPDATE/DELETE/INSERT/CALL/SELECT FOR UPDATE等
数据控制语言DCL:GRANT/REVOKE/COMMIT/ROLLBACK等
SELECT FOR UPDATE
SELECT FOR UPDATE锁住某个表的相关行。
如果是多表查询:
SELECT FOR UPDATE of table.column
----用来表连接时锁住其中一个表的相关行;
----否则将锁住所有表(包括from子查询,不包括条件子查询)的相关行
举例:
SELECT t1.id, t2.info
FROM test_table1 t1, test_table2 t2
WHERE t1.id = t2.id
FOR UPDATE of t1.id
LOCK TABLE
LOCK TABLE table_name IN lockmode MODE (NOWAIT)
LOCK TABLE tanjie21 IN SHARE UPDATE MODE; --同下
LOCK TABLE tanjie21 IN ROW SHARE MODE; --行共享锁,其他会话无法获得排他锁
LOCK TABLE tanjie22 IN ROW EXCLUSIVE MODE; --行排他锁,禁止SHARE锁定
--UPDATE/DELETE/INSERT自动获得
LOCK TABLE tanjie23 IN SHARE MODE; --表共享锁
LOCK TABLE tanjie24 IN EXCLUSIVE MODE; --表排他锁
LOCK TABLE tanjie25 IN SHARE ROW EXCLUSIVE MODE; --表级共享行级排他
WAIT/NOWAIT
NOWAIT --报ora-00054
WAIT integer(秒) --报ora-30006
EXECUTE IMMEDIATE
处理动态SQL的两种方式:
(1)EXECUTE IMMEDIATE
(2)OPEN-FOR, FETCH, and CLOSE
性能优化(以后再讲):BULK EXECUTE IMMEDIATE
EXECUTE IMMEDIATE的完整语法:
EXECUTE IMMEDIATE dynamic_SQL_string
[INTO defined_variable1, defined_variable2, ...]
[USING [IN | OUT | IN OUT] bind_argument1, bind_argument2, ...]
[RETURNING INTO | RETURN bind_argument1, bind_argument2, ...]
使用INTO子句确定返回的是单行查询结果(与SELECT INTO类似)
SUB QUERY
标准子查询:和主查询没有直接联系,在ORACLE中首先执行且只执行一次
关联子查询:在执行过程中需要与主查询发生联系,如子查询的条件依赖于主查询传递的条件。
单值:=
----注意要确保子查询出来的记录最多只有一条,如果没有返回记录,需要注意空的处理
----尤其是update
多值:IN/NOT IN/EXISTS/NOT EXISTS/ANY/SOME/ALL
ANY/SOME/ALL前必须加 =,<>,>=,<= 等连接符