https://www.cnblogs.com/accumulater/p/6088980.html--普通SQL语句可以用Exec执行
https://blog.csdn.net/qq_36482772/article/details/77815021--自定义带输入参数的存储过程
默认的SQLServer
''附近有错误,把空格都去了重新空,
一,函数
1,拼接函数
SELECT'123'+'123'AS result1;
使用 cast
select '+' cast(2 as varchar)
第二种方法:
select (stuff((select '+' + nNum from table for xml path ('')),1,1,'')) //nNum是 int类型
使用 RTRIM
select (stuff((select '+' + RTRIM(nNum) from table for xml path ('')),1,1,'')) //nNum是 int类型
MySQL的:
SELECT CONCAT(123,'123')AS result1; ---- 123123
SELECT CONCAT_WS(':','abc','def')AS result1; ------ ABC:DEF
--------------------- --------------------- -------- ------------- ---------------------
根据某字段分组拼接
shop_id fruit_name
1桃子
1梨子
2香蕉
3苹果
2草莓
从shop_id中选择t_fruit group中的shop_id,GROUP_CONCAT(fruit_name);
--------------------- --------------------- -------- ------------- ---------------------
SQLServer的:不同数据类型拼接要处理 - 数字与字符串拼接
从用户中选择'id_'+ convert(varchar(50),id)
2,截取字符串
离开(pid,17)
对(pid,1)
SUBSTRING(pid,1,17)
3,CONVERT()函数是把日期转换为新数据类型的通用函数
把20181108改成 - > 2018-11-08 CONVERT(varchar(10),CONVERT(datetime,zzrq,10),23)
--update xxcw..cbm set zzrq = CONVERT(varchar(10),CONVERT(datetime,zzrq,10),23)
其中bmh(从RES_projects中选择zw_prjcode)和zzrq <>''和zzrq不像'% - %'
如图4所示,不以字母开头的数据
select * from saap_users where user_id like '[^A-Zz-z]%'
5、去左右空格
select ltrim(rtrim(UsrName))
6、exists用法
select * from res_projects a where exists(select rp_code from aky b where a.rp_code = b.部门号) and a.rp_status is null
数据库里面就算有一列数据不相等都不能用exists判断是否存在,select查出相等列来判断exists也不奏效,这种情况要用in
7、in 用法
表1把相等用来判断同一条数据的那几列查出来,作为条件拼接not in表2,表2将这些列拼接
例:select * from (select id, name, pid from table1) a
where (convert(varchar(50), a.id)+ convert(varchar(50), a.name)+ convert(varchar(50), a.pid)) not in
(select (convert(varchar(50), id)+ convert(varchar(50), name)+ convert(varchar(50), pid)) from table2)
8、group by分组,用于去重,查询列要和group by保持一致
9、case when
CASE c.continue_flag WHEN 0 THEN '项目延续' WHEN 1 THEN '新增项目' WHEN 2 THEN '项目延续' ELSE null END as '项目类型'
10、循环语句
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
---------------
while 条件
begin
执行操作
set @i=@i+1
end
WHILE
11、左侧自动补零
例如 ‘49999’ 五位 自动补零 ‘0049999’
‘1000000’七位不变 ‘1000000’
请问怎么实现?
--> 查询结果
SELECT right('000000'+cast(id as varchar),7) as id
12、添加自然序号 从1开始递增
a.通过rownum实现即可。
sql:select rownum , * from tablename where 条件语句。
b.Row_Number()over(order by ID)
实例:
insert into
BGT_projects (fp_code,fp_type,fp_name,dpt_code,fp_status,dpt_name)
SELECT
'20191225'+ cast(right('00'+cast(Row_Number()over(order by user_id) as varchar),2) as varchar),1,'部门预算项目(二上)',depart_code,0,depart_name
FROM
SAAP_users
WHERE
SEX = 'D'
13、去空格
select ltrim(' test ') --去除左边的空格
select rtrim(' test ') --去除右边的空格
select ltrim(rtrim(' test ')) --去除首尾空格
14、分页 currentPage 第几页 pageSize 每页数据条数
mysql:limit m,n 【m:开始位置 (不包含当前位置,或者理解为从0开始)---- n:从开始位置开始一共取多少条】
limit (currentPage-1)*pageSize,pageSize
SqlServer: 【@Star:开始位置(不包含当前位置,或者理解为从0开始)----- @End:结束位置(含当前位置)】
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = (currentPage-1)*pageSize,@End = currentPage*pageSize;
WITH EmployeePage AS (SELECT *, ROW_NUMBER() OVER (ORDER BY user_id) AS RowNumber FROM Emp)
SELECT * FROM EmployeePage WHERE RowNumber > @Start AND RowNumber <= @End ORDER BY user_id
https://www.cnblogs.com/ebread/p/SQLServer.html
15、合并数据并去重(同一张表)
select * from dcms_danger_gas where cas_no = '1333-74-0'
UNION
SELECT * FROM dcms_danger_gas where '1氢气1' like CONCAT(CONCAT('%',item_name),'%')
详解:union会根据所有列来判断是否重复,只要有一列数据不一样就判断不为重复。只有列名个数、次序、名字完全一样才可以使用union合并。
mysql没有全外连接,可以使用 (左连接 union 右连接)达到全外连接的作用。下面是一个例子,题目是攻击出销售经理每天摆放的CPM客户数和非CPM客户数并在一行显示,结果列:日期,销售经理,CPM客户数,非CPM客户数
CREATE TABLE `table_test` (
`拜访时间` date DEFAULT NULL,
`销售经理` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`客户类型` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of table_test
-- ----------------------------
INSERT INTO `table_test` VALUES ('2017-05-31', '张林', '非CPM客户');
INSERT INTO `table_test` VALUES ('2017-06-06', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-11', '张林', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-11', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-11', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-11', '牛双旗', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-13', '张林', '非CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-14', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-17', '张林', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-28', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-28', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-08-28', '姚红伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-09-11', '马义华', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-09-11', '胡伟', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-09-19', '牟小东', '非CPM客户');
INSERT INTO `table_test` VALUES ('2017-09-21', '马义华', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-05-31', '张林', 'CPM客户');
INSERT INTO `table_test` VALUES ('2017-09-22', '胡伟', '非CPM客户');
SELECT 拜访CPM客户次数,拜访非CPM客户次数,a.拜访时间,a.销售经理 from
(select COUNT(拜访时间) 拜访CPM客户次数,拜访时间,销售经理,客户类型 from table_test where 客户类型='CPM客户' group by 拜访时间,销售经理,客户类型)a
left JOIN (select COUNT(拜访时间) 拜访非CPM客户次数,拜访时间,销售经理,客户类型 from table_test where 客户类型='非CPM客户' group by 拜访时间,销售经理,客户类型)b
on a.拜访时间=b.拜访时间 and a.销售经理 = b.销售经理
union
SELECT 拜访CPM客户次数,拜访非CPM客户次数,b.拜访时间,b.销售经理 from
(select COUNT(拜访时间) 拜访CPM客户次数,拜访时间,销售经理,客户类型 from table_test where 客户类型='CPM客户' group by 拜访时间,销售经理,客户类型)a
RIGHT JOIN (select COUNT(拜访时间) 拜访非CPM客户次数,拜访时间,销售经理,客户类型 from table_test where 客户类型='非CPM客户' group by 拜访时间,销售经理,客户类型)b
on a.拜访时间=b.拜访时间 and a.销售经理 = b.销售经理
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
go
create procedure query_page
@currentPage INT,
@pageSize INT
as
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = @currentPage,@End = @pageSize;
SELECT @currentPage = (@Start-1)*@End,@pageSize = @Start*@End
WITH EmployeePage AS (SELECT *, ROW_NUMBER() OVER (ORDER BY user_id) AS RowNumber FROM Emp)
SELECT * FROM EmployeePage WHERE RowNumber > @currentPage AND RowNumber <= @pageSize ORDER BY user_id
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
go
create procedure query_page2
@currentPage INT,
@pageSize INT
as
begin
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = @currentPage,@End = @pageSize;
SELECT @currentPage = (@Start-1)*@End,@pageSize = @Start*@End
WITH EmployeePage AS (SELECT *, ROW_NUMBER() OVER (ORDER BY user_id) AS RowNumber FROM Emp)
SELECT * FROM EmployeePage WHERE RowNumber > @currentPage AND RowNumber <= @pageSize ORDER BY user_id
end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
16、oracle插入多条数据:
INSERT ALL
INTO DCMS_DANGER_GAS(CAS_NO, ITEM_NAME) VALUES('7784-42-1','砷化氢')
INTO DCMS_DANGER_GAS(CAS_NO, ITEM_NAME) VALUES('25167-67-3' ,'丁烯')
INTO DCMS_DANGER_GAS(CAS_NO, ITEM_NAME) VALUES('106-99-0' ,'丁二烯')
INTO DCMS_DANGER_GAS(CAS_NO, ITEM_NAME) VALUES('865758-36-7' ,'氯化甲烷')
SELECT 1 FROM DUAL;
INSERT INTO TPP_IVT_AST.SYS_USER_FUND(F_USERID, VC_FUNDCODE)
SELECT 661,'200165' FROM DUAL
UNION ALL
SELECT 661,'200009' FROM DUAL
UNION ALL
SELECT 661,'200025' FROM DUAL
UNION ALL
SELECT 661,'200253' FROM DUAL
UNION ALL
SELECT 661,'200448' FROM DUAL
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
17、查询某库、所有表的字段注释
select TABLE_NAME 表名,COLUMN_NAME 列名, DATA_TYPE 字段类型, COLUMN_COMMENT 字段注释
from information_schema.`COLUMNS`
where TABLE_SCHEMA='uthinkcloud_prod' and TABLE_NAME in (select TABLE_NAME from information_schema.`COLUMNS` where TABLE_SCHEMA='uthinkcloud_prod' and COLUMN_COMMENT <> '')
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、删除完全重复数据
1.根据去重数据建立新表:select distinct * into temTable from xxcw..cbmfx where bmh in ('YF20180052')
2.删除旧表数据。
3.将新表数据插回到旧表。
三、查看表结构
sp_helptext:显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的文本。
sp_help:报告有关数据库对象(sysobjects 表中列出的任何对象)、用户定义数据类型或 Microsoft® SQL Server™ 所提供的数据类型的信息。
注:用sp_help可以查看主键的index_name,例:PK__SAAP_user__id,用于删除主键时使用。删除主键不是删除列名,是删除index_name。
sp_columns:可以用这个一次性获取所有列名,不用一个个手输,查看所有列的相关信息,大小
sp_tables :查看当前是表还是视图
--查询某字段类型
SELECT * FROM user_tab_cols A where A.column_name = 'ST_REGION';
--查询某表所有列 只有 表名、列明、comments字段
select * from user_col_comments t where t.table_name = 'DCMS_LAB_ITEMS';
--查询某表所有列,表名必须大写
SELECT * FROM all_tab_columns A where A.table_name = 'DCMS_LAB_ITEMS';
--查询某表所有主键列
select * from user_cons_columns
where table_name = 'DCMS_LAB_ITEMS'
and constraint_name in ( select constraint_name from user_constraints
where table_name = 'DCMS_LAB_ITEMS'
and constraint_type ='P' )
四、更新数据
1、向表中插入另一张表的数据
insert into
表名1 (列名)
select
列名
from
表名2
where
条件
-----------------------------------------------------------------------------------------------------
2、根据某表数据修改另一张表的数据
update
users
set
dept_code = d.dept_code
from
departs d, users u
where
d.dept_code = u.dept_code
五、根据源数据创建视图或表
创建视图:CREATE view 视图名 as select * from 表名
创建新表:select * into 表名 from 旧表
create table table2 as select * from table1;
视图依附表创建
2、oracle根据excel导入数据到某表
a、excel文档只留下需要导入的字段,不需要留列名。以CSV格式保存

b、新建文本文档,保存格式为ctl,例如:input.ctl,dcms_registered_labs_wan是导入到哪个表
load data
infile 'C:\Users\33189\Desktop\test.csv'
append into table dcms_registered_labs_wan fields terminated by ','
trailing nullcols(lab_name)
c、cmd运行input.ctl
->sqlldr userid=hxp_wechart/yuan@192.168.1.194:1521/orcl control=C:\Users\33189\Desktop\input.ctl

六、修改表
修改字段类型:
alter table tableName alter column columnName varchar(n)
添加字段:
alter table tableName add columnName varchar(n)
添加多个字段:
alter table tableName add columnName numeric(3) default 0,
columnName2 char(10),
columnName3 char(1) default '0'
删除字段:
alter table tableName drop column columnName
删除约束:
alter table tableName drop constraint constraintName
DF开头是默认值约束,对象'DF__BGT_categ__round__5F3414E9' 依赖于 列'round_nocur'。
alter table BGT_category drop constraint DF__BGT_categ__round__5F3414E9
--自增列不能直接修改,必须将原有ID列删除,然后重新添加一列具有identity属性的ID字段。
--删除主键
alter table EMP drop constraint PK__EMP__B9BE370F76577163
--修改列类型
alter table EMP alter column user_id int not null;
alter table EMP alter column sex varchar(2)
--设置主键
alter table EMP add primary key(user_id);
--删除列
alter table EMP drop column user_id
--添加自动增长列
alter table EMP add user_id int IDENTITY(1,1) NOT NULL
--设置字段为当前时间
alter table EMP add birthday smalldatetime default getdate();
--修改列名
EXEC sp_rename 'EMP.birthday', 'registerTime', 'COLUMN';
--修改表名
EXEC sp_rename '原有表名', '新表名';
七、SQL插入数据区分大小写,查询不区分大小写
从表中选择名称,其中name ='abc'collate Chinese_PRC_CS_AI_WS
从表中选择名称Chinese_PRC_CS_AI_WS ='abc'整理的名称
八、表连接
内连接:=包括其中的重复列
等值连接:inner join不包括重复列
外连接:left join,right join一表数据作为基准
九、存储过程
mysql:
create procedure query_top10()
begin
select top 10 * from emp;
end;
调用:call query_top10();
sqlserver:
go
create proc query_top10 as
begin
select top 10 * from emp;
end;
调用:exec query_top10;
但是jdbc里面还是写call
CallableStatement cs = DBConnection.getConn().prepareCall("{call query_top10}");
CallableStatement cs = DBConnection.getConn().prepareCall("{call query_page(?,?)}");
ORACLE:
https://www.cnblogs.com/Marydon20170307/p/9567493.html--变量声明和赋值的三种方式
https://blog.csdn.net/zhou920786312/article/details/72670049--存储过程+调用存储过程+无/带参的存储过程+in参数+out参数+int out参数+为参数设置默认值
赋值,在begin之前。变量:=和 select XX into 变量两种赋值方法
例:
1.select count(ST_ID) into V_OUT_DATA_NUM from DCMS_LAB_STORAGE
2.
as
V_ITEM_CODE CHAR(16) := '123';
V_ITEM_CODE CHAR(16) := 'select item_code from table where id = 1';
begin
循环 游标
as
--定义游标,在调用的时候执行,所以在调用游标之前的sql语句会先执行
CURSOR itemData IS SELECT lab_code, st_id, item_code, item_form, stock_limit, stock_current, item_name, catalog from DCMS_lab_items where lab_code = V_IN_LAB_CODE and st_id in (select ST_ID from DCMS_del_lab_storage where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM);--查询已删除房间的各化学品存量
调用游标:
begin
--循环开始
LOOP
IF NOT itemData%ISOPEN THEN
OPEN itemData;
END IF;
--将循环查询的数据赋值给变量,fetch需要跟查询列保持一致
FETCH itemData INTO V_LAB_CODE, V_ST_ID, V_ITEM_CODE, V_ITEM_FORM, V_STOCK_LIMIT, V_STOCK_CURRENT,V_ITEM_NAME, V_CATALOG;
--退出循环的条件
EXIT WHEN itemData%NOTFOUND OR itemData%NOTFOUND IS NULL;
END LOOP;
IF ELSE:
if()
begin
...
end
else if()
begin
...
end
else
begin
...
end
IF (V_ITEM_NUM > 0) THEN
dbms_output.put_line('存在' || '--房间号' || V_OUT_ST_ID_MIN);
update DCMS_lab_items set stock_current = stock_current + V_STOCK_CURRENT where lab_code = V_LAB_CODE and st_id = V_OUT_ST_ID_MIN and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
delete from DCMS_lab_items where lab_code = V_LAB_CODE and st_id = V_ST_ID and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
ELSE
dbms_output.put_line('不存在' || '--房间号' || V_OUT_ST_ID_MIN );
update DCMS_lab_items set st_id = V_OUT_ST_ID_MIN where lab_code = V_LAB_CODE and st_id = V_ST_ID and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
END IF;
-----------------创建存储过程
CREATE OR REPLACE PROCEDURE deleteRepeatData(
--输入参数
V_IN_LAB_CODE in CHAR, --实验室code--入参在调用的时候给大小
V_IN_ST_REGION in VARCHAR2, --校区
V_IN_ST_BUILDING in VARCHAR2, --楼宇
V_IN_ST_ROOM in VARCHAR2, --楼层及房间号
--设置返回值
V_OUT_DATA_NUM out numeric, --返回重复数据条数--输出参数不能再声明的时候赋值
V_OUT_ST_ID_MIN out numeric --返回结果最小的st_id
)
AS
V_LAB_CODE CHAR(6);--声明变量需要给大小
V_ST_ID NUMBER(22);
V_ITEM_CODE CHAR(16);
V_ITEM_FORM CHAR(1);
V_STOCK_LIMIT NUMBER(22);
V_STOCK_CURRENT NUMBER(22);
V_ITEM_NAME VARCHAR2(500);
V_CATALOG CHAR(10);
V_ITEM_NUM NUMBER(22);
--定义游标,在调用的时候执行,所以在调用游标之前的sql语句会先执行
CURSOR itemData IS
--查询已删除房间的化学品存量
SELECT lab_code, st_id, item_code, item_form, stock_limit, stock_current, item_name, catalog from DCMS_lab_items where lab_code = V_IN_LAB_CODE and st_id in (select ST_ID from DCMS_del_lab_storage where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM);
BEGIN
--查询房间个数
select count(ST_ID) into V_OUT_DATA_NUM from DCMS_LAB_STORAGE where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM;
--如果有重复列执行以下sql
IF (V_OUT_DATA_NUM > 1) THEN
--查询st_id最小一列的值
select min(ST_ID) into V_OUT_ST_ID_MIN from DCMS_LAB_STORAGE where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM;
--将需要删除的列保存到新表中
insert into DCMS_del_lab_storage(lab_code, st_id,st_region,St_Building,st_roomno) select lab_code, st_id,st_region,St_Building,st_roomno from DCMS_LAB_STORAGE where st_id <> V_OUT_ST_ID_MIN and LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM;
--删除多余条数并保存st_id最小的那一条
delete from DCMS_LAB_STORAGE where st_id <> V_OUT_ST_ID_MIN and LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM;
--修改订单表st_id=min(st_id)
update dcms_orders set st_id = V_OUT_ST_ID_MIN where lab_code = V_IN_LAB_CODE and st_id in (select ST_ID from DCMS_del_lab_storage where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM);
--修改订单表st_id=min(st_id)
update dcms_register set st_id = V_OUT_ST_ID_MIN where lab_code = V_IN_LAB_CODE and st_id in (select ST_ID from DCMS_del_lab_storage where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM);
--修改订单表st_id=min(st_id)
update dcms_history set st_id = V_OUT_ST_ID_MIN where lab_code = V_IN_LAB_CODE and st_id in (select ST_ID from DCMS_del_lab_storage where LAB_CODE = V_IN_LAB_CODE and ST_REGION = V_IN_ST_REGION and ST_BUILDING = V_IN_ST_BUILDING and ST_ROOMNO = V_IN_ST_ROOM);
--循环开始
LOOP
IF NOT itemData%ISOPEN THEN
OPEN itemData;
END IF;
FETCH itemData INTO V_LAB_CODE, V_ST_ID, V_ITEM_CODE, V_ITEM_FORM, V_STOCK_LIMIT, V_STOCK_CURRENT,V_ITEM_NAME, V_CATALOG;
--退出循环的条件
EXIT WHEN itemData%NOTFOUND OR itemData%NOTFOUND IS NULL;
V_ITEM_NUM := 0;
dbms_output.put_line('编号' || V_LAB_CODE || '--房间号' || V_ST_ID );
--检查循环是否进来
--insert into table_test (lab_code, st_id, item_code, item_form, stock_limit, stock_current,item_name,catalog) values(V_LAB_CODE, V_ST_ID, V_ITEM_CODE, V_ITEM_FORM, V_STOCK_LIMIT, V_STOCK_CURRENT,V_ITEM_NAME, V_CATALOG);
select count(lab_code) into V_ITEM_NUM from DCMS_lab_items where lab_code = V_LAB_CODE and st_id = V_OUT_ST_ID_MIN and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
--判断当前化学品在min(st_id)房间里面有没有,有的话就update存量再delete掉重复房间的数据,没有的话直接update
IF (V_ITEM_NUM > 0) THEN
dbms_output.put_line('存在' || '--房间号' || V_OUT_ST_ID_MIN);--输出区
update DCMS_lab_items set stock_current = stock_current + V_STOCK_CURRENT where lab_code = V_LAB_CODE and st_id = V_OUT_ST_ID_MIN and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
delete from DCMS_lab_items where lab_code = V_LAB_CODE and st_id = V_ST_ID and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
ELSE
dbms_output.put_line('不存在' || '--房间号' || V_OUT_ST_ID_MIN );
update DCMS_lab_items set st_id = V_OUT_ST_ID_MIN where lab_code = V_LAB_CODE and st_id = V_ST_ID and item_code = V_ITEM_CODE and item_form = V_ITEM_FORM;
END IF;
END LOOP;
END IF;
END deleteRepeatData;
-----------------调用存储过程
declare
V_IN_LAB_CODE CHAR(6) ; --实验室code
V_IN_ST_REGION VARCHAR2(20) ; --校区
V_IN_ST_BUILDING VARCHAR2(20) ; --楼宇
V_IN_ST_ROOM VARCHAR2(20) ; --所在楼层及房间号
V_OUT_DATA_NUM numeric; --数据条数
V_OUT_ST_ID_MIN numeric; --最小存放地点序号
BEGIN
DBMS_OUTPUT.ENABLE(buffer_size => null) ; --设置缓存大小
V_IN_LAB_CODE := '002166'; --赋值
V_IN_ST_REGION := '邯郸校区'; --赋值
V_IN_ST_BUILDING := '10号楼'; --赋值
V_IN_ST_ROOM := '12'; --赋值
deleteRepeatData(V_IN_LAB_CODE,V_IN_ST_REGION,V_IN_ST_BUILDING,V_IN_ST_ROOM,V_OUT_DATA_NUM,V_OUT_ST_ID_MIN); --调用存储过程,GET_QUESTIONNAIRE_CONTENT 为存储过程的名字
dbms_output.put_line(V_OUT_DATA_NUM); --输出结果
dbms_output.put_line(V_OUT_ST_ID_MIN); --输出结果
end;
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
带入参存储过程
go
create procedure query_page
@currentPage INT,
@pageSize INT
as
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = @currentPage,@End = @pageSize;
SELECT @currentPage = (@Start-1)*@End,@pageSize = @Start*@End
WITH EmployeePage AS (SELECT *, ROW_NUMBER() OVER (ORDER BY user_id) AS RowNumber FROM Emp)
SELECT * FROM EmployeePage WHERE RowNumber > @currentPage AND RowNumber <= @pageSize ORDER BY user_id
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
go
create procedure query_page2
@currentPage INT,
@pageSize INT
as
begin
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = @currentPage,@End = @pageSize;
SELECT @currentPage = (@Start-1)*@End,@pageSize = @Start*@End
WITH EmployeePage AS (SELECT *, ROW_NUMBER() OVER (ORDER BY user_id) AS RowNumber FROM Emp)
SELECT * FROM EmployeePage WHERE RowNumber > @currentPage AND RowNumber <= @pageSize ORDER BY user_id
end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--执行带参存储过程
exec query_page2 2,10;
--查询存储过程
SELECT * FROM SYSOBJECTS ORDER BY REFDATE DESC
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME = 'query_top3' OR NAME = 'query_top5')
--删除存储过程
DROP PROCEDURE query_page2
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mybatis中,IF 、CASE WHEN的用法,还有sql语句块的用法
<sql id="column">
F_ACTIONID as actionid
,F_ACTIONPID as actionpid
,VC_PIN as vcpid
,VC_ACTIONNAME as vcactionname
,VC_ACTIONCODE as vcactioncode
,VC_URL as vcurl
,VC_ICON as vcicon
,trim(VC_ACTIONTYPE) as vcactiontype
,IF(VC_STATUS='0', '启用','禁用') as vcstatus
,VC_REMARK as vcremark
,IF(VC_MODEL='0', '内部链接','外部链接') as vcmodel
,CASE WHEN VC_GROUP = '0' THEN '本系统'
WHEN VC_GROUP = '1' THEN 'fof'
WHEN VC_GROUP = '2' THEN 'biee'
ELSE 'risk' END as vcgroup
,F_ACTIONID as id
,F_ACTIONPID as pId
,VC_ACTIONNAME as name
,VC_ICON as iconClass
,VC_TEAM as vcteam
</sql>
<select id="selectList" parameterType="com.datadriver.web.menu.dto.MenuDto" resultType="com.datadriver.web.menu.model.Menu">
select
<include refid="column"></include>
from sys_action
where 1=1
order by VC_PIN
</select>
<select id="findByDto" parameterType="com.datadriver.web.menu.dto.MenuDto" resultType="com.datadriver.web.menu.model.Menu">
select
<include refid="column"/>
from SYS_ACTION
where 1=1
<if test="actionid!=null and actionid !='' ">
and F_ACTIONID = #{actionid}
</if>
</select>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mybatis中新增selectKey语句块,生成一个动态变量,供后面的语句使用
<insert id="insertEdimType" parameterType="com.datadriver.web.edim.model.Edims" >
<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="dimType">
select count(*)+1 as dimType from e_dim_conf a
</selectKey>
insert into e_dim_conf
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="dimTypename != null and dimTypename !='' " >
dim_type,
dim_typename,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="dimTypename != null and dimTypename !='' " >
#{dimType},
#{dimTypename},
</if>
</trim>
</insert>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这篇博客汇总了SQL的各种常用语句,包括函数(如拼接、截取)、字符串处理、转换函数、分组查询、循环语句、条件判断等,适用于SQLServer、MySQL和Oracle等数据库。通过实例展示了如何使用这些语句进行数据操作,对于数据库开发者和管理员非常有帮助。

3290

被折叠的 条评论
为什么被折叠?



