![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL
SQL使用
雄非本熊
呆人不呆脑
展开
-
PLSQL 异常处理
模板:DECLARE -- 声明(常量/变量/显式游标)BEGIN -- 执行(条件控制/循环/隐式游标/...)EXCEPTION -- 异常处理END;通常做法:EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); ROLLBACK; END;...原创 2021-06-09 10:57:41 · 252 阅读 · 0 评论 -
shell 连接数据库进行查询和调用存储过程
#!/bin/bash# #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,此处为Shell# 设置数据库连接变量ip=xxx.xxx.xxx.xxx --数据库ipport=1521 --数据库端口sid=orcl --数据库名称username=scott --数据库用户名password=123456 --数据库密码oracle_name="${username}/${password}@${ip}:${port}/${sid}"# 连接oracle#原创 2021-06-09 10:36:35 · 1326 阅读 · 0 评论 -
Oracle 伪列lever(递归)
1.Oracle中使用connect by 来实现树状查询,其中可以使用level这个伪列来实现分层查询。2.配合dual表,生成可以计算的连续的值select .., lever, .. from dualconnect by lever<= 深度值DEMO:利用递归生成20180101到20221231,日期的年季月数据列SELECT TO_DATE(20180101, 'YYYYMMDD') + LEVEL - 1 AS DAY_CODE, TO_CHAR(TO_原创 2021-06-09 10:18:54 · 340 阅读 · 0 评论 -
PLSQL存储过程定时作业(DBMS_JOB)
格式:– 包中的存储过程DBMS_JOB.SUBMIT,参数如下DBMS_JOB.SUBMIT( JOB OUT BINARY_INTERGER, -- 用于指定作业编号 WHAT IN VARCHAR2, -- 用于指定作业要执行的操作 NEXT_DATE IN DATE DEFAULT SYSDATE, -- 用于指定该操作的下一次运行的日原创 2021-06-09 10:02:53 · 939 阅读 · 0 评论 -
PLSQL 包(PACKAGE)
SQL封装过程SQL->PL/SQL块——>过程体(PROCEDURE、FUNCTION、TRIGGER)——>包(PACKAGE)包就是把相关的存储过程、函数、变量、常量和游标等PL/SQL程序组合在一起,并赋予一定的管理功能的程序块。一个程序包由两部分组成:包定义和包体。其中包定义部分声明包内数据类型、变量、常量、游标、子程序和函数等元素,这些元素为包的共有元素。包主体则定义了包定义部分的具体实现。注意:包头声明的游标或过程体必须在包体中定义。语法格式:创建包定义(原创 2021-06-01 18:52:56 · 2070 阅读 · 0 评论 -
PLSQL 触发器(TRIGGER )
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。触发器可以分为:语句级触发器和行级触发器。1. 在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个就是删除表的操作就是触发器执行的条件了。2. 在一个表中定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执行了。–触发器语法语法:CREATE [OR REPLACE] TRIGGER TRIGGER_NAME{BEFORE原创 2021-06-01 18:33:58 · 2556 阅读 · 0 评论 -
PLSQL 自定义函数(FUNCTION)
语法格式:创建函数CREATE [OR REPLACE] FUNCTION 函数名[(参数 参数类型[IN|OUT|IN OUT] 数据类型,……)]RETURN 返回的数据类型 -- 不带数据类型长度IS|ASPL/SQL函数体; -- 里面必须要有一个RETURN子句栗子:创建-- 传入两个参数,返回最大值CREATE OR REPLACE FUNCTION FUN_MAX (P_NUM1 IN NUMBER, P_NUM2 IN NUMBER DEFAU原创 2021-06-01 18:26:35 · 3678 阅读 · 0 评论 -
PLSQL 存储过程(PROCEDURE)
语法格式:创建存储过程CREATE [OR REPLACE] PROCEDURE 过程名[(参数1 [IN|OUT|IN OUT] 数据类型, 参数2 [IN|OUT|IN OUT] 数据类型……)]IS|ASPL/SQL过程体;调用存储过程,执行过程中的命令BEGIN 过程名[(参数)];END;设置存储过程定时作业(DBMS_JOB)该过程用于建立一个新的作业,当建立作业的时候,需要通过设置相应的参数来告诉Oracle要执行的内容,要执行的时间,要原创 2021-06-01 18:20:20 · 2785 阅读 · 0 评论 -
PLSQL 动态SQL
在PL/SQL程序开发中,可以使用DML语句和事务控制语句,但是还有很多语句(比如DDL语句)不能直接在PL/SQL中执行。这些语句可以使用动态SQL来实现。语法格式:动态SQL EXECUTE IMMEDIATE 动态语句字符串 [INTO 变量列表] [USING 参数列表]BEGIN EXECUTE IMMEDIATE 'CREATE TABLE TMP_BAK AS SELECT * FROM TMP'; -- 字符串语句最后不要加分号;END;或者DECLARE原创 2021-06-01 18:04:48 · 1658 阅读 · 0 评论 -
PLSQL ROWCOUNT
SQL%ROWCOUNT 用于记录修改的条数,必须放在一个增删改等修改类语句后面执行,select语句用于查询的话无法使用,当你执行多条修改语句时,SQL%ROWCOUNT 之前执行的最后一条语句修改数为准BEGIN DELETE FROM emp; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT); -- 记录删除数据的条数 INSERT INTO emp(empno) VALUES (7777); DBMS_OUTPUT.PUT_LINE(SQL%.原创 2021-06-01 17:42:45 · 1043 阅读 · 1 评论 -
PLSQL 游标和引用数据类型
游标的类型有两种:隐式游标和显式游标说明:当进行表的数据查询操作, 一般用游标实现,查询结果为单行的可以用隐式游标select … into …,查询结果为多行的可以用显式游标cursor …;1.隐式游标(单行值写入变量可以用select … into …)对变量赋值还可以使用SELECT…INTO 语句从数据库中查询数据对变量进行赋值。**查询的结果只能是一行记录,不能是零行或者多行记录。**打印出emp中员工编号为7369的姓名和工资。 DECLARE V_ENAME VAR原创 2021-06-01 17:36:26 · 744 阅读 · 0 评论 -
PLSQL 循环结构
LOOP循环结构语法格式:LOOP --循环体END LOOP;1.循环体在LOOP和END LOOP之间,在每个LOOP循环体中,首先执行循环体中的语句序列,执行完后再重新开始执行。2.在LOOP循环中可以使用EXIT或者[EXIT WHEN 条件]的形式终止循环。否则该循环就是死循环。WHILE LOOP循环结构(先判断条件,条件成立再执行循环体)WHILE 条件 LOOP --循环体END LOOP;FRO LOOP循环结构FOR循环需要预先确定的循环次数,可通过给循环变原创 2021-05-28 10:14:06 · 258 阅读 · 0 评论 -
PL/SQL 条件控制
1. IF 语句-- IF-THENIF 条件 THEN --条件结构体END IF;-- IF-THEN-ELSEIF 条件 THEN --条件成立结构体ELSE --条件不成立结构体END IF;-- IF-THEN-ELSIFIF 条件1 THEN --条件1成立结构体ELSIF 条件2 THEN --条件2成立结构体ELSE --以上条件都不成立结构体END IF;2. CASE 语句CASE WHEN 表达式1 THEN 语句序列1;原创 2021-05-28 10:01:58 · 101 阅读 · 0 评论 -
ORACLE 增量更新Merge
语法格式(不是所有数据库都通用):MERGEMERGE INTO 目标表USING (增量) 增量表ON (匹配字段)WHEN MATCHED THEN UPDATE SET 目标表.字段1=增量表.字段1, ... 目标表.字段n=增量表.字段nWHEN NOT MATCHED THEN INSERT (目标表.字段1,..目标表.字段n)VALUES (增量表.字段1,..增量表.字段n);表DictAid1desc11001基金原创 2021-05-28 09:51:41 · 1013 阅读 · 0 评论 -
ORACLE 表分区
表分区前提:表数据量比较大的时候,查询比较慢优点:1.提高查询效率 2.增强可用性 3.维护方便(只对某些有问题分区数据维护,不用对整张表维护)缺点:2.分区表需要维护(维护创建的分区)(1)范围分区:按入职日期进行范围分区CREATE TABLE MYEMP ( EMPNO NUMBER(4) PRIMARY KEY, ENAME VARCHAR2(10), HIREDATE DATE, DEPTNO NUMBER(7) ) PARTITION BY原创 2021-05-28 09:41:33 · 113 阅读 · 0 评论 -
ORACLE 临时表
临时表创建ORACLE临时表,可以有两种类型的临时表:会话级临时表(1.其它会话查询不到数据 2.本会话关掉后也查询不到数据)事务级临时表(1.当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断2.其它会话查询不到数据3.本会话关掉后也查询不到数据)1)会话级临时表 CREATE GLOBAL TEMPORARY TABLE TABLE_NAME (COL1 TYPE1,COL2 TYPE2...) ON COMMIT PRESERVE ROWS;2)事务级临时表 CRE原创 2021-05-28 09:29:09 · 139 阅读 · 0 评论 -
Oracle 分析函数
分析函数语法格式:(<> 内的内容可以选择性省略)FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> )函数为聚合函数(AVG,SUM,COUNT)FUNCTION_NAME(<参数>,…) OVER (PARTITION BY 表达式,… ) – 分组求值FUNCTION_NAME(<参数>,…) OVER原创 2021-05-25 11:57:52 · 226 阅读 · 1 评论 -
Oracle 行列转换
行转列:表T_Y_Q_AMTYQAMT2015110020152110201531302015410020161200201621502016310020164300结果:YQ1Q2Q1Q220151001101301002016200150100300SUM(CASE WHEN … END)SELECT A.Y, SUM(CAS原创 2021-05-25 10:58:43 · 122 阅读 · 0 评论 -
Oracle exists 用法
demo:select ... from a where exists (select ... from b where ...) -- a和b在括号中的where 会有连接关系EXISTS 函数EXISTS(查询结果集):查询结果集有记录则成立,否则不成立NOT EXISTS(查询结果集):与EXISTS相反优点:一般子查询效率比较低, 可以用EXISTS函数等价改写-- 列出有员工的部门信息SELECT D.* FROM DEPT D WHERE DEPTNO IN (S原创 2021-05-25 10:06:25 · 721 阅读 · 0 评论 -
ORACLE WITH AS 用法
–对一张表查询结果取别名with tmp as (select * from tb_name)–对多张表查询结果取别名withtmp as (select * from tb_name),tmp1 as (select * from tb_name2),tmp1 as (select * from tb_name3),…–对两场表的查询结果取别名,然后连接两张表的结果(file字段为条件)witha as (select * from tmp1),b as (select * from转载 2021-05-25 10:01:20 · 672 阅读 · 0 评论 -
SQL 导出导入数据
导出查询结果生成del文件:export to xx.del of del select * from table_name (where 条件)导入.del 文件数据插入表内:import from xx.del of del insert into talble_name原创 2020-04-27 17:16:38 · 430 阅读 · 0 评论 -
SQL日常用法(二)
图一:图二:一、DDL语句1、建表根据上图二写出两个表的建表语句create table fwbzhb( wbzh char(19) not null, zh char(16) not null, khdh char(16) not null, hm varchar(16) not null);create table fnbzhb ( zh ...原创 2020-03-04 18:30:32 · 190 阅读 · 0 评论 -
SQL日常用法
简单SQL语句总结,都是在工作学习的时候,遇到的一些用法,如果有错有问题可以留言,接受修改。一、查询查询某个表的所有内容SELECT * FROM 表名查询某个表的某列的内容SELECT 列名 FROM 表名按照某些条件查询某表的某列内容(WHERE)SELECT 列名 FROM 表名 WHERE 子语句(条件)子语句(条件)-------> 列 运算符 值...原创 2020-01-13 14:25:55 · 149 阅读 · 0 评论