源码PL/SQL从入门到精通第七章操作数据表
除了序列(Sequence)和同义词(Synonym)外,其他语句基本上都在自己创建的iTerm数据中用过了,所以这章感觉不难。
--第7章开始 --7.1.2 插入单行记录 SELECT * FROM emp; INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno ) VALUES (7890, '刘七', '副理', 7566, TO_DATE ('2001-08-15', 'YYYY-MM-DD'), 8000, 300, 20 ); INSERT INTO emp VALUES (7891, '刘七', '副理', 7566, TO_DATE ('2001-08-15', 'YYYY-MM-DD'), 8000, 300, 20); --7.1.3 插入默认值和Null值 --默认值 INSERT INTO emp (empno, ename, deptno ) VALUES (7892, '张八', 20 ); SELECT * FROM emp WHERE empno = 7892; INSERT INTO emp (empno, ename, deptno ) VALUES (7892, '张八', 20 ); INSERT INTO emp (empno, ename, deptno ) VALUES (7898, 'O''Malley', 20 ); -- 插入NUll值 SELECT * FROM emp; INSERT INTO emp VALUES(7893,'霍九',NULL,NULL,NULL,NULL,NULL,20); INSERT INTO emp VALUES(7894,'霍十','',NULL,'',NULL,NULL,20); INSERT INTO emp VALUES(7895,USER,NULL,NULL,TRUNC(SYSDATE),3000,200,20); SELECT * FROM emp WHERE empno = 7895; --7.1.4 使用子查询插入多行数据 DROP TABLE emp_copy; CREATE TABLE emp_copy AS SELECT * FROM emp WHERE 1=2; INSERT INTO emp_copy SELECT * FROM emp WHERE deptno = 20; SELECT * FROM emp; INSERT INTO emp_copy SELECT * FROM emp WHERE deptno = 20; --指定要插入数据的列名 INSERT INTO emp_copy (empno, ename, job, mgr, deptno) SELECT empno, ename, job, mgr, deptno FROM emp WHERE deptno = 30; --使用Insert插入多表数据 CREATE TABLE emp_dept_10 AS SELECT * FROM emp WHERE 1=2; CREATE TABLE emp_dept_20 AS SELECT * FROM emp WHERE 1=2; CREATE TABLE emp_dept_30 AS SELECT * FROM emp WHERE 1=2; CREATE TABLE emp_copy AS SELECT * FROM emp WHERE 1=2; INSERT FIRST WHEN deptno = 10 --如果部门编号为10 THEN INTO emp_dept_10 --则插入到emp_dept_10表 WHEN deptno = 20 --如果部门编号为20 THEN INTO emp_dept_20 --则插入到emp_dept_20表 WHEN deptno = 30 --如果部门编号为30 THEN INTO emp_dept_30 --则插入到emp_dept_30表 ELSE --如果deptno不为10、20或者是30 INTO emp_copy --则插入到emp_copy 表 SELECT * FROM emp; --查询emp表中的所有数据,插入到目标表 SELECT rowid,x.* from emp x; select * from emp_dept_20 TRUNCATE TABLE emp_dept_10 ; TRUNCATE TABLE emp_dept_20 ; TRUNCATE TABLE emp_dept_30 ; TRUNCATE TABLE emp_copy ; INSERT FIRST WHEN deptno = 10 --如果部门编号为10 THEN INTO emp_dept_10 --插入到emp_dept_10,使用VALUES指定字段 (empno, ename, sal, deptno) VALUES (empno, ename, sal, deptno) WHEN deptno = 20 --如果部门编号为20 THEN INTO emp_dept_20 --插入到emp_dept_20,使用VALUES指定字段 (empno, ename) VALUES (empno, ename) WHEN deptno = 30 --如果部门编号为30 THEN INTO emp_dept_30 --插入到emp_dept_30,使用VALUES指定字段 (empno, ename, hiredate) VALUES (empno, ename, hiredate) ELSE --如果部门编号即不为10、20或30 INTO emp_copy --插入到emp_copy,使用VALUES指定字段 (empno, ename, deptno) VALUES (empno, ename, deptno) SELECT * FROM emp; --指定插入子查询 commit; SELECT * FROM emp_dept_10; --7.2.1更新单行记录 SELECT * FROM emp; UPDATE emp SET sal=3000 WHERE empno=7369; UPDATE emp SET sal=3000,comm=200,mgr=7566 WHERE empno=7369; SELECT * FROM emp; SELECT AVG(y.sal) FROM emp y WHERE y.deptno=20; --7.2.2使用子查询更新记录 UPDATE emp x SET x.sal = (SELECT AVG (y.sal) FROM emp y WHERE y.deptno = x.deptno) WHERE x.empno = 7369; UPDATE emp SET sal = (SELECT sal FROM emp WHERE empno = 7782) WHERE empno = 7369; select * from emp_history; DROP TABLE emp_history; UPDATE emp x SET (x.sal, x.comm) = (SELECT AVG (y.sal), MAX (y.comm) FROM emp y WHERE y.deptno = x.deptno) WHERE x.empno = 7369; CREATE TABLE emp_history AS SELECT * FROM emp; UPDATE emp_history x SET (x.sal, x.comm) = (SELECT sal, comm FROM emp y WHERE y.empno =x.empno ) WHERE x.empno = 7369; SELECT * FROM emp_history; SELECT * from emp; --使用多表关联的形式进行更新 UPDATE (SELECT x.sal sal, y.sal sal_history, x.comm comm, y.comm comm_history FROM emp x, emp_history y WHERE x.empno = y.empno AND x.empno = 7369) SET sal_history = sal, comm_history = comm; UPDATE /*+bypass_ujvc*/ (SELECT x.sal sal, y.sal sal_history, x.comm comm, y.comm comm_history FROM emp x, emp_history y WHERE x.empno = y.empno AND x.empno = 7369) SET sal_history = sal, comm_history = comm; DELETE FROM emp WHERE empno=7894 INSERT INTO emp VALUES(7894,'霍十','',DEFAULT,'',NULL,NULL,20); --7.2.3 使用Merge合并表行 SELECT * FROM emp_copy; SELECT * FROM emp; MERGE INTO emp_copy c --目标表 USING emp e --源表,可以是表、视图或子查询 ON (c.empno = e.empno) WHEN MATCHED THEN --当匹配时,进行UPDATE操作 UPDATE SET c.ename = e.ename, c.job = e.job, c.mgr = e.mgr, c.hiredate = e.hiredate, c.sal = e.sal, c.comm = e.comm, c.deptno = e.deptno WHEN NOT MATCHED THEN --当不匹配时,进行INSERT操作 INSERT VALUES (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno); --7.3.1 删除单行记录 DELETE FROM emp WHERE empno=7903; DELETE FROM dept WHERE deptno=20; SELECT * FROM dept; --7.3.2 使用子查询删除记录 DELETE FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE dname = '销售部'); DELETE FROM emp_copy; DELETE FROM emp x WHERE EXISTS (SELECT 1 FROM emp_copy WHERE empno = x.empno); --等价语句 DELETE FROM emp x WHERE empno IN (SELECT empno FROM emp_copy WHERE empno = x.empno); --7.3.3 使用Truncate清除表数据 TRUNCATE TABLE dept; ALTER TABLE dept ENABLE CONSTRAINT pk_dept; ALTER TABLE emp DISABLE CONSTRAINT PK_EMP; CREATE TABLE dept_copy AS SELECT * FROM dept; TRUNCATE TABLE dept; INSERT INTO dept SELECT * FROM dept_copy; ----7.5.2 创建数据序列 CREATE SEQUENCE invoice_seq INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE; SELECT object_name,object_id,object_type FROM user_objects WHERE object_name = 'INVOICE_SEQ'; SELECT sequence_name, min_value, max_value, increment_by, last_number FROM user_sequences; SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL; SELECT invoice_seq.CURRVAL FROM DUAL; SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL; CREATE TABLE invoice ( invoice_id NUMBER PRIMARY KEY, --自动编号,唯一,不为空 vendor_id NUMBER NOT NULL, --供应商ID invoice_number VARCHAR2(50) NOT NULL, --发票编号 invoice_date DATE DEFAULT SYSDATE, --发票日期 invoice_total NUMBER(9,2) NOT NULL, --发票总数 payment_total NUMBER(9,2) DEFAULT 0 --付款总数 ) select * from invoice; INSERT INTO invoice (invoice_id, vendor_id, invoice_number, invoice_total ) VALUES (invoice_seq.NEXTVAL, 10, 'INV' || invoice_seq.CURRVAL, 100 ); SELECT invoice_id, vendor_id, invoice_number, invoice_total FROM invoice; ALTER SEQUENCE invoice_seq INCREMENT BY 2 ALTER SEQUENCE invoice_seq INCREMENT BY 2 MAXVALUE 10 NOCACHE NOCYCLE; SELECT * FROM SCOTT.EMP; SELECT * FROM emp; SELECT userenv('LANG') FROM DUAL; CREATE PUBLIC SYNONYM scottemp FOR scott.emp; DROP PUBLIC SYNONYM scottemp;相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/net/10538.shtml
相关文章
热门TAG
命令 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 技巧 权重 服务器 网站流量 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows 蜘蛛 搜索引擎 网站收录 JSP 实例解析最新文章
-
如何给asp.net core写个中间
时间:2021-01-03
-
.Net微信网页开发解决用户
时间:2021-01-03
-
c++中Socket通信函数之WSAS
时间:2020-12-29
-
提高生产性工具
时间:2020-12-29
-
全新的membership框架Asp.ne
时间:2020-12-29
-
不用找了,比较全的signal
时间:2020-12-29
-
计算字符串中每种字符出
时间:2020-12-29
-
EntityFramework 5.0 CodeFirst 教
时间:2020-12-29
热门文章
-
.NET 开发环境搭建图文详解
时间:2020-12-27
-
Windows下Visual Studio 2017安装配置方法图文教
时间:2020-12-23
-
.Net微信网页开发解决用户在不同公众号或
时间:2021-01-03
-
oracle 11g rac安装之grid报错解决
时间:2020-12-28
-
ASP.NET Core 3.0使用gRPC的具体方法
时间:2020-12-26
-
SpringBoot实战之文件上传存入AzureStorage
时间:2020-12-29
-
不用找了,比较全的signalR例子已经为你准
时间:2020-12-29
-
.NET Core3.1编写混合C++程序
时间:2020-12-26
-
Oracle的卸载
时间:2020-12-28
-
计算字符串中每种字符出现的次数[Dicti
时间:2020-12-29
