当前位置:Gxlcms > 数据库问题 > Oracle基础函数及对象示例学习总结

Oracle基础函数及对象示例学习总结

时间:2021-07-01 10:21:17 帮助过:33人阅读

  1. --##字符函数,大小写处理函数
  2. SELECT LOWER('ABcDe')
  3. FROM dual; -- abcde,全部转换为小写
  4. SELECT UPPER('ABcDe')
  5. FROM dual; -- ABCDE,全部转换为大写
  6. SELECT INITCAP('aBcDe')
  7. FROM dual; -- Abcde,首字母大写
  8. --##字符函数,字符串处理函数
  9. SELECT SUBSTR('ABcDe',2,2)
  10. FROM dual; -- Bc,截取字符串
  11. SELECT SUBSTR('ABcDe',2)
  12. FROM dual; -- BcDe,截取字符串
  13. SELECT SUBSTR('ABcDe',-3,2)
  14. FROM dual; -- cD,截取字符串
  15. SELECT INSTR('ABcDefgdDh','D',3,2)
  16. FROM dual; -- 9,从第三个字符串开始查询第二个字符D的位置
  17. SELECT INSTR('ABcDefgdDh','D')
  18. FROM dual; -- 4,从第一个字符串开始查询第一个字符D的位置
  19. SELECT LPAD('ABcDe',10,'D')
  20. FROM dual; -- DDDDDABcDe,左侧不足补字符串D
  21. SELECT LPAD('ABcDe',3,'D')
  22. FROM dual; -- ABc
  23. SELECT RPAD('ABcDe',10,'D')
  24. FROM dual; -- ABcDeDDDDD,右侧不足补字符串D
  25. SELECT RPAD('ABcDe',3,'D')
  26. FROM dual; -- ABc
  27. SELECT REPLACE('ABcDeEe','e',8)
  28. FROM dual; --ABcD8E8,替换字符
  29. SELECT LENGTH('ABcDe')
  30. FROM dual; -- 5,计算字符串长度
  31. SELECT CONCAT('Hello','World')
  32. FROM dual; -- HelloWorld,连接字符串
  33. SELECT TRIM('H' FROM 'HelloWorld')
  34. FROM dual; --elloWorld,去除首字母
  35. SELECT TRIM('d' FROM 'HelloWorld')
  36. FROM dual; --HelloWorl,去除尾字母
  37. SELECT TRIM('' FROM 'HelloWorld')
  38. FROM dual; --,隐藏字符
  39. --数字函数
  40. SELECT ROUND(245.1234) FROM dual; --245
  41. SELECT ROUND(245.1234,2) FROM dual; --245.12
  42. SELECT ROUND(245.6234,0) FROM dual; --246
  43. SELECT ROUND(245.1234,-2) FROM dual; --200
  44. SELECT ROUND(255.1234,-2) FROM dual; --300
  45. SELECT ROUND(-245.1234,2) FROM dual; -- -245.12
  46. SELECT ROUND(-245.6234,0) FROM dual; -- -246
  47. SELECT ROUND(-245.1234,-2) FROM dual; -- -200
  48. SELECT ROUND(-255.1234,-2) FROM dual; -- -300
  49. SELECT TRUNC(245.1234,2) FROM dual; -- 245.12
  50. SELECT TRUNC(245.6234,0) FROM dual; -- 245
  51. SELECT TRUNC(245.1234,-2) FROM dual; -- 200
  52. SELECT TRUNC(255.1234,-2) FROM dual; -- 200
  53. SELECT MOD(1600,300) FROM dual; -- 100
  54. SELECT MOD(1500,300) FROM dual; -- 0
  55. --日期函数
  56. SELECT SYSDATE
  57. FROM dual; -- 2012-05-12 12:50:18 ,当前日期
  58. SELECT MONTHS_BETWEEN('15-4月-2012','01-1月-2012')
  59. FROM dual; -- 3.45161290322581,两个日期之间的月数
  60. SELECT ADD_MONTHS(SYSDATE,2)
  61. FROM dual; --2012-07-12 14:23:32,添加月份到日期字段中
  62. SELECT NEXT_DAY('15-4月-2012',3)
  63. FROM dual; --2012-04-17 ,添加天数到日期字段中
  64. SELECT NEXT_DAY(SYSDATE,'星期一')
  65. FROM dual;
  66. SELECT LAST_DAY(SYSDATE)
  67. FROM dual; --2012-05-31 14:25:22,本月份的最后一天
  68. SELECT ROUND(SYSDATE,'month')
  69. FROM dual; --2012-05-01,月份四舍五入
  70. SELECT ROUND(SYSDATE)
  71. FROM dual; --2012-05-13
  72. SELECT TRUNC(SYSDATE,'month')
  73. FROM dual; --月份截取
  74. SELECT TRUNC(SYSDATE,'day')
  75. FROM dual;
  76. --转化函数
  77. SELECT '123' + 123 FROM dual; --246,字符串隐式转化
  78. SELECT TO_CHAR(123456.6543,'L099,999.00') AS "Number Format"
  79. FROM dual; --若是常量数字,需在前加0
  80. SELECT TO_CHAR(123456.6543,'$099,999.00') AS "Number Format"
  81. FROM dual;
  82. SELECT TO_CHAR(SYSDATE,'DAY DD-MON-YYYY') AS "Data Format"
  83. FROM dual; --星期二 15-5月 -2012
  84. SELECT TO_DATE('12-5-2012','DD-MM-YYYY')
  85. FROM dual; --格式字符串必须有。没有意义?
  86. SELECT TO_NUMBER('5432.1234')
  87. FROM dual;
  88. SELECT TO_NUMBER('15,155,100.56','999,999,999.00')
  89. FROM dual; --变量字符串与格式字符串的格式必须一致
  90. --常规函数
  91. SELECT NVL(NULL,0) FROM dual; -- 0
  92. SELECT NVL(NULL,'N/A') FROM dual; -- N/A
  93. SELECT NVL(123,0) FROM dual; -- 123
  94. SELECT NVL('学生','N/A') FROM dual; -- 学生
  95. SELECT NVL2(NULL,0,1) FROM dual; -- 1
  96. SELECT NVL2(123,0,1) FROM dual; -- 0
  97. SELECT NULLIF(1,1) FROM dual; -- NULL
  98. SELECT NULLIF(2,1) FROM dual; -- 2
  99. SELECT NULLIF('好','不好') FROM dual; -- 好
  100. SELECT COALESCE(NULL,NULL,'不好','好') FROM dual; -- 不好,参数必须为同一数据类型
  101. --DECODE示例
  102. DECODE
  103. SELECT last_name, job_id, salary,
  104. DECODE(job_id, 'IT_PROG', 1.10*salary,
  105. 'ST_CLERK', 1.15*salary,
  106. 'SA_REP', 1.20*salary,
  107. salary) REVISED_SALARY
  108. FROM employees;
  109. --CASE THEN示例
  110. CASE
  111. WHEN THEN
  112. WHEN THEN
  113. ELSE
  114. END
  115. SELECT last_name, job_id, salary,
  116. CASE job_id
  117. WHEN 'IT_PROG' THEN 1.10*salary
  118. WHEN 'ST_CLERK' THEN 1.15*salary
  119. WHEN 'SA_REP' THEN 1.20*salary
  120. ELSE salary
  121. END "REVISED_SALARY"
  122. FROM employees;
  123. --##分组函数
  124. AVG
  125. COUNT
  126. MAX
  127. MIN
  128. SUM
  129. STDDEV
  130. VARIANCE
  131. /*
  132. IN、ANY、ALL运算符
  133. IN 等于列表中的任意一个。
  134. < ANY 意味着低于最高值;> ANY 意味着高于最低值;= ANY 等同于 IN。
  135. < ALL 意味着低于最低值;> ANY 意味着高于最高低值。
  136. 示例:
  137. SELECT employee_id, last_name, job_id, salary
  138. FROM employees
  139. WHERE salary < ANY
  140. (SELECT salary
  141. FROM employees
  142. WHERE job_id = 'IT_PROG')
  143. AND job_id <> 'IT_PROG';
  144. */
  145. --创建脚本示例
  146. INSERT INTO departments (department_id, department_name, location_id)
  147. VALUES (&"Department Id",'&"Department Name"',&Location_Id);
  148. /*
  149. MERGE语句
  150. 提供有条件地在数据表中更新或插入数据的功能。
  151. 如果该行存在就执行UPDATE,如果是新行则执行INSERT
  152. 示例:在COPY_EMP表中插入或更新行,以便与EMPLOYEES表匹配
  153. MERGE INTO copy_emp c
  154. USING employees e
  155. ON (c.employee_id = e.employee_id)
  156. WHEN MATCHED THEN
  157. UPDATE SET
  158. c.first_name = e.first_name,
  159. c.last_name = e.last_name,
  160. ...
  161. c.department_id = e.department_id
  162. WHEN NOT MATCHED THEN
  163. INSERT VALUES(e.employee_id, e.first_name, e.last_name,
  164. e.email, e.phone_number, e.hire_date, e.job_id,
  165. e.salary, e.commission_pct, e.manager_id,
  166. e.department_id);
  167. */
  168. --显式事务控制语句
  169. COMMIT
  170. ROLLBACK
  171. SAVEPOINT name_values
  172. ROLLBACK TO SAVEPOINT name_values
  173. --ALTER TABLE语句示例
  174. ALTER TABLE dept80
  175. ADD (job_id VARCHAR2(9));
  176. ALTER TABLE dept80
  177. MODIFY (last_name VARCHAR2(30));
  178. ALTER TABLE dept80
  179. DROP COLUMN job_id;
  180. --SET UNUSED标记不可用与删除表全部不可用字段
  181. ALTER TABLE emp SET UNUSED(department_id)
  182. ALTER TABLE emp DROP UNUSED COLUMNS; --不能删除某一个不可用字段,若删除将全部删除。
  183. --RENAME重命名对象
  184. RENAME employees2 TO emp
  185. --COMMENT向表中添加字段
  186. COMMENT ON TABLE employees
  187. IS 'Employee Information';
  188. --约束类型
  189. NOT NULL
  190. UNIQUE
  191. PRIMARY KEY
  192. FOREIGN KEY
  193. CHECK
  194. CREATE TABLE employees(
  195. employee_id NUMBER(6),
  196. first_name VARCHAR2(20),
  197. ...
  198. job_id VARCHAR2(10) NOT NULL,
  199. CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
  200. CREATE TABLE employees(
  201. employee_id NUMBER(6),
  202. email VARCHAR2(25),
  203. ...
  204. department_id NUMBER(4),
  205. CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
  206. REFERENCES departments(department_id),
  207. CONSTRAINT emp_email_uk UNIQUE(email));
  208. CREATE TABLE employees(
  209. employee_id NUMBER(6),
  210. hire_date DATE NOT NULL,
  211. ...
  212. CONSTRAINT emp_email_uk UNIQUE(email));
  213. CREATE TABLE employees(
  214. employee_id NUMBER(6),
  215. ...
  216. salary NUMBER(2)
  217. CONSTRAINT emp_salary_min CHECK (salary > 0),...
  218. ALTER TABLE employees
  219. ADD CONSTRAINT emp_manager_fk
  220. FOREIGN KEY(manager_id)
  221. REFERENCES employees(employee_id);
  222. ALTER TABLE employees
  223. DROP CONSTRAINT emp_manager_fk;
  224. ALTER TABLE departments
  225. DROP PRIMARY KEY CASCADE; --删除departments表上的PRIMARY KEY约束,并删除employees.department_id列上关联的FOREIGN KEY约束。
  226. ALTER TABLE employees
  227. DISABLE CONSTRAINT emp_emp_id_pk CASCADE; --禁用约束
  228. ALTER TABLE employees
  229. ENABLE CONSTRAINT emp_emp_id_pk; --启用约束
  230. /*
  231. 级联约束
  232. CASCADE CONSTRAINTS子句是和 DROP COLUMN子句一起使用的。
  233. CASCADE CONSTRAINTS子句会删除涉及到在已删除列上定义的主键或唯一关键字的所有引用完整性约束。
  234. CASCADE CONSTRAINTS子句还将删除在已删除列上定义的鄋多列约束。
  235. CREATE TABLE test1 (
  236. pk NUMBER PRIMARY KEY,
  237. fk NUMBER,
  238. col1 NUMBER,
  239. col2 NUMBER,
  240. CONSTRAINT fk_constraint FOREIGN KEY (fk) REFERENCES test1,
  241. CONSTRAINT ck1 CHECK (pk > 0 and col1 > 0),
  242. CONSTRAINT ck2 CHECK (col2 > 0));
  243. ALTER TABLE test1
  244. DROP (pk) CASCADE CONSTRAINTS;
  245. ALTER TABLE test1
  246. DROP (pk, fk, col1) CASCADE CONSTRAINTS;
  247. */
  248. --视图使用WITH CHECK OPTION子句
  249. CREATE OR REPLACE VIEW empvu20
  250. AS
  251. SELECT * FROM employees
  252. WHERE department_id = 20
  253. WITH CHECK OPTION CONSTRAINT empvu20_ck --引用约束empvu20_ck
  254. --视图拒绝DML操作
  255. WITH READ ONLY
  256. --排序TOP-N分析:伪列ROWNUM关键字
  257. SELECT ROWNUM as RANK, last_name, salary
  258. FROM (SELECT last_name,salary FROM employees
  259. ORDER BY salary DESC)
  260. WHERE ROWNUM <= 3;
  261. --序列
  262. CREATE SEQUENCE dept_deptid_seq
  263. INCREMENT BY 10 --步长
  264. START WITH 120 --开始位
  265. MAXVALUE 9999 --结束位
  266. NOCACHE --
  267. NOCYCLE; --达到结束位不重新开始循环
  268. ALTER SEQUENCE dept_deptid_seq
  269. INCREMENT BY 20
  270. MAXVALUE 999999
  271. NOCACHE
  272. NOCYCLE;
  273. --序列中的伪列,
  274. NEXTVAL
  275. CURRVAL
  276. INSERT INTO departments(department_id,department_name,location_id)
  277. VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);
  278. SELECT dept_deptid_seq.CURRVAL
  279. FROM dual;
  280. --索引
  281. CREATE INDEX emp_last_name_idx
  282. ON employees(last_name);
  283. --同义词
  284. CREATE SYNONYM emp
  285. FOR employees;
  286. CREATE PUBLIC SYNONYM dept
  287. FOR departments

Oracle基础函数及对象示例学习总结

标签:oracle   基础函数   基础对象   

人气教程排行