存储过程实现集

JAVA调用sqlserver存储过程实现(返回多个结果实现 1、存储过程 USE [YZC_BI] GO /****** Object: StoredProcedure [dbo].[CalYlfwColumnData] Script Date: 08/20/2014 09:24:27 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ===================== 阅读详情

1.一个简单的存储过程(可动态实现表名的检索)
2.目录结构的父子关系打印(存储过程递归调用)
3.在存储过程中使用形参(OUTPUT类型参数)
4.将制定表的列名转化为字符串(COL1,COL2,COL3)
5.变横向表为纵向表


1.一个简单的存储过程(可动态实现表名的检索)
ALTER  PROCEDUR DoSelect(
 @tbname varchar(20))
AS 
declare @sql varchar(100)
set @sql='SELECT * FROM '+@tbname
exec (@sql)
注意此处的AS后面没有BEGIN关键字(SQL SERVER2000)

2.目录结构的父子关系打印(存储过程递归调用)
A.执行SQL文:
if object_id(N'tt','U') is not null
 drop table tt
go
create table tt(id int primary key, name nvarchar(100), father int, layer int)
go
insert tt values(1,'a',null,0);
insert tt values(2,'aa',1,1);
insert tt values(3,'ab',1,1);
insert tt values(4,'aaa',2,2);
insert tt values(5,'aba',3,2);
insert tt values(6,'abaC',5,3);

if object_id(N'fun','fn') is not null
 drop function fun
go
create function fun(@id int)
returns nvarchar(1000)
as
begin
 declare @layer int,@name nvarchar(100),@father int
 declare @result nvarchar(1000)
 select @layer = layer, @name=name, @father=father from dbo.tt where id=@id;
 if @layer = 0
  set @result = '/' + @name;
 else
  set @result = dbo.fun(@father) + '/' + @name;
 return @result
end
go
select * from tt
select id,path=dbo.fun(id) from tt
DROP table tt

执行结果:
id      name          father          layer
1  a   NULL   0
2  aa   1       1
3  ab   1      1
4  aaa   2    2
5  aba   3    2
6  abaC   5   3

id path
1 /a
2 /a/aa
3 /a/ab
4 /a/aa/aaa
5 /a/ab/aba
6 /a/ab/aba/abaC

3.在存储过程中使用形参(OUTPUT类型参数)
A.SQL文:
CREATE PROCEDURE myProc
@outparm      int      OUTPUT,
@inparm      int 
AS
set @outparm=100
set @inparm=200
return 300
GO

DECLARE @outparm INT
DECLARE @inparm INT
DECLARE @TMP INT
SET @outparm=0
SET @inparm=0
SET @TMP=0

EXEC @TMP=myProc @outparm OUTPUT,@inparm

PRINT '结果:'
PRINT @TMP
PRINT @outparm
PRINT @inparm

DROP PROCEDURE myProc
B.结果:
结果:
300
100
0

4.将制定表的列名转化为字符串(COL1,COL2,COL3)
CREATE FUNCTION TableColsNameToString
 (@TABLE_NAME VARCHAR(20))
RETURNS VARCHAR(1000)
AS
BEGIN

DECLARE @total_Cols INT
DECLARE @str_ColName VARCHAR(10)
DECLARE @str_Result VARCHAR(1000)

IF EXISTS(SELECT * FROM sysobjects WHERE name = @TABLE_NAME)
BEGIN 
 -- Create an unnamed cursor.
 DECLARE @MyCursor CURSOR
 SET @MyCursor = CURSOR LOCAL SCROLL FOR
  SELECT name FROM syscolumns WHERE id=object_id(@TABLE_NAME)
 
 OPEN @MyCursor
 
 FETCH NEXT FROM @MyCursor INTO @str_ColName
 SET @str_Result=@str_ColName

 WHILE @@fetch_status=0
 BEGIN
  FETCH NEXT FROM @MyCursor INTO @str_ColName
  SET @str_Result=@str_Result+','+@str_ColName  
 END
 
 CLOSE @MyCursor
 DEALLOCATE @MyCursor

END

RETURN @str_Result
END

5.变横向表为纵向表
A.实现SQL文:
--Declare variables
DECLARE @SQL VARCHAR(5000)
DECLARE @total INT
DECLARE @sel_result VARCHAR(3000)

--Create table for test
DECLARE @T TABLE( A INT, B INT, C INT)
DECLARE @cnt int
DECLARE @count int

SET @cnt=1
SET @count=1
WHILE  @cnt<100
BEGIN
 INSERT INTO @T SELECT @count,@count+1,@count+2
 SET @cnt=@cnt+1
 SET @count=@count+3
END

--Get the total rows about test table
SELECT @total=COUNT(*) FROM @T
EXEC CreateTableByCol 'Temp_Table',@total

--Do data insert
SET @sel_result=''
SELECT  @sel_result=@sel_result+',' + CAST(A AS VARCHAR) FROM @T
SELECT @sel_result = STUFF(@sel_result, 1, 1, '')
SET @SQL='INSERT INTO Temp_Table VALUES('+@sel_result+')'
EXEC(@SQL)

SET @sel_result=''
SELECT  @sel_result=@sel_result+',' + CAST(B AS VARCHAR) FROM @T
SELECT @sel_result = STUFF(@sel_result, 1, 1, '')
SET @SQL='INSERT INTO Temp_Table VALUES('+@sel_result+')'
EXEC(@SQL)

SET @sel_result=''
SELECT  @sel_result=@sel_result+',' + CAST(C AS VARCHAR) FROM @T
SELECT @sel_result = STUFF(@sel_result, 1, 1, '')
SET @SQL='INSERT INTO Temp_Table VALUES('+@sel_result+')'
EXEC(@SQL)

--Print the result
SELECT * FROM @T
SELECT * FROM Temp_Table
DROP TABLE Temp_Table

B.创建临时表
CREATE PROCEDURE CreateTableByCol
 (@TABLE_NAME VARCHAR(10),
 @col_cnt int)
AS
BEGIN

DECLARE @SQL VARCHAR(5000)
DECLARE @SQL_COL VARCHAR(3000)

DECLARE @count INT
SET @count=1

IF EXISTS(SELECT * FROM sysobjects WHERE name = @TABLE_NAME)
BEGIN 
 SET @SQL='DROP TABLE '+@TABLE_NAME
 EXEC(@SQL)
END

--SET @TABLE_NAME='TEST'+CAST(@col_cnt AS VARCHAR)
SET @SQL='CREATE TABLE '+@TABLE_NAME
SET @SQL_COL=' '

WHILE @count <= @col_cnt
BEGIN 
 SET @SQL_COL=@SQL_COL+'COL'+CAST(@count AS VARCHAR)+' INT,'
 SET @count = @count+1
END
SET @SQL_COL=SUBSTRING(@SQL_COL,0,LEN(@SQL_COL))

--SET @SQL=@SQL+'('+'COUNT INT,'+@SQL_COL+')'
SET @SQL=@SQL+'('+@SQL_COL+')'

EXEC(@SQL)

END

Windows 本地 PostgreSQL 忘记 postgres 密码后,如何重置密码并给 root 用户最高权限 <think>我们只需要根据内容生成摘要,不超过150字。摘要应该简明扼要概括主要问题和解决步骤。注意是中文摘要。</think>在Windows本地开发中,因root数据库账号无CREATEDB权限且忘记postgres超级管理员密码,通过临时修改pg_hba.conf为trust认证重置密码,并重启PostgreSQL服务进行登录,最后授予root用户SUPERUSER等权限,完成数据库创建 阅读详情

相关推荐

CKS-CN考试之路----03

这题不需要去生成image和生成deployment所以只需要去检测对应的值即可。编辑/cks/docker/Dockerfile,修改最后第二行的值。编辑/cks/docker/deployment.yaml。

Q先生 779

DB2,创建存储过程报错,SQLCODE=-104,SQLSTATE=42601,psm_semicolon

报错背景: DB2数据库创建存储过程时,报错,数据库编辑软件为Aqua Data Studio/DbVisualizer 存储过程如下: create or replace procedure DM.proc_test( in i_seq integer, out o_flag integer ) begin declare v_test varchar(20); end; 报错内容:...

qq_15529837的博客 1万+

多模态论文笔记——BLIP

本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:BLIP。

haopinglianlian的博客 2426

oracle存储过程调用另一个存储过程的结果实现自己的业务处理

今天业务支持需要根据物料分类保存后自动同步到编码规则中,需要获取编码规则的ID号码,而ID号码的生成是通过存储过程生成的。 之前使用过代码dia调用存储获取ID,但是没有使用存储过程中调用存储过程的结果。 经过查询发现可以使用游标来实现。 erp_ls_oidgenerate.getoid('BillPrefixRules','DRP',p_ReCursor0); Fetch p...

charly 2634

Mysql存储过程实现新增字段历史数据处理;批量结果遍历

一 基本语法 – 声明SQL语句执行结束标志符号为 $(默认是分号,不修改这里,会影响存储过程内的整体执行) delimiter $ – 创建存储过程 create PROCEDURE set_sc_student_age() begin – 这里实现存储过程的业务 end$ –  delimiter ; 恢复SQL默认结束符号为分号;               delimiter ; – 调用存储过程 call set_sc_student_age(); 二 存储实战应用 2.1 需求背景 2.1.1

YouWanJia的博客 996

Spring JdbcTemplate实现有java.sql.ResultSet结果返回的存储过程调用

一、调用存储过程 方式一: /** * 方法功能说明:通过存储过程分页,获取分页信息以及查询记录(装在list中); * List.get(0)= hsTable; //存放分页信息(tableName/token/pageNo/pageSize/recordsCount/pagesCount)--hsTable.get(key) * List.get(1)= record

hu_shengyang的专栏 1万+

Oracle存储过程实现返回多个结果 在构造函数方法中使用 dataset

原文 Oracle存储过程实现返回多个结果 在构造函数方法中使用 dataset DataSet相当你用的数据库; DataTable相当于你的表。一个 DataSet 可以包含多个 DataTable。如果用datatable只适合返回一个结果(游标)的信息。 例: public DataSet Get_TRAFeeQinfenStatus(int type, string ...

weixin_30500289的博客 198

润乾算报表实现减少存储过程

在报表应用中经常会使用存储过程实现数据源计算,但这会带来多方面的问题。首先,存储过程的包只提供一层分类,无法用树形结构,容易造成代码管理混乱。有些程序员直接在现场在线修改存储过程,也不利于代码管理。其次,升级存储过程的时候需要数据库的写权限,会对数据安全造成影响。同时,由于SQL固有的一些问题(数据无序、缺乏合、无法引用、分步不彻底)等,使得存储过程的编程比较困难。   很多情况下是为了提高性

raqreport的博客 1137

MYSQL存储过程实现遍历结果更新

drop PROCEDURE update_Product; DELIMITER // -- 创建存储过程 CREATE PROCEDURE update_Product() BEGIN -- 定义变量 DECLARE s int DEFAULT 0; DECLARE tui varchar(8); DECLARE product_id int; DE...

zsw_12345的博客 4914

报表口径不是-SQL-汇总-销售毛额-退单净额与历史重算门禁

商品销售报表不是写一条 SUM SQL 就结束。本文从销售毛额、退单金额、净销售额的口径拆分切入,讨论旧字段为什么不能静默改义,销售事实和退单事实为什么要按不同发生时间归属,历史日报、周报、月报如何级联重算,以及发布前为什么必须有 DDL、回填、前后端展示、导出和对账门禁。重点不是算出一个数字,而是让报表数字可解释、可重算、可验证。

程序员贺加贝的博客 316

PostgreSQL 并发约束实战(第 1 篇):排他约束如何挡住并发重复预约

两个用户同时预订会议室 A 的 10:00—11:00。两个请求都先查询“没有冲突”,随后各自插入一条预约,两个事务也都成功提交。SQL 没报错,唯一键没有重复,会议室却被卖了两次。PostgreSQL 真正形成差异的地方,不是比另一种数据库多几个数据类型,而是能把“同一资源的时间段不得重叠”变成提交时持续成立的数据库约束。这篇文章只证明这一个判断。它不证明 PostgreSQL 在所有 OLTP 场景都优于 MySQL,也不证明所有业务规则都应该塞进数据库。

weixin_42426485的博客 502

sql二次注入攻击原理

二次注入,又称二阶 SQL 注入(Second-Order SQL Injection),是一种特殊的 SQL 注入形式。一阶注入:攻击者提交的恶意数据,在当前请求中就被直接拼接到 SQL 语句并执行,攻击效果立即显现。二次注入:攻击者提交的恶意数据,在写入时被正确地转义、过滤或使用参数化处理,安全地存储进数据库;但当这些数据在后续的某个请求中被读取出来,并再次被拼接进新的 SQL 语句执行时,由于未做二次过滤,注入漏洞才真正被触发。"第一次存储是安全的,第二次使用时是危险的。

2303_82039857的博客 282

【好靶场】SQL 注入-布尔盲注-1

本题表面上是一个“根据用户 ID 判断用户是否存在”的功能。{"exists":true,"message":"用户存在","status":"success"}{"exists":false,"message":"用户不存在","status":"success"}这种通过响应中的真假差异来推断数据库查询结果的漏洞,就是布尔盲注。定位 /check?id= 接口↓观察 exists 字段的真假↓构造恒真、恒假条件确认注入↓确定输入需要使用 ') 闭合↓。

Sagittarius_A*的博客 225

PostgreSQL 计划缓存实战(第 10 篇):预编译 SQL 前五次都快,第六次为什么可能变慢

普通租户只有百条订单,头部租户却有九十万条。相同 prepared statement 前几次都快,某个连接复用后,头部租户突然用索引扫描九十万行;重连又恢复。直接答案是:这个会话可能在累计五个 custom plan 后开始评估 generic plan,而 generic plan 看不到本次参数,冷热租户差异便被平均分布掩盖。Custom plan 看得到本次参数,generic plan 省掉重复规划却只能按平均分布估算。参数倾斜越强,省下的规划毫秒越可能换来执行秒级退化。

weixin_42426485的博客 297

PostgreSQL 日报 | PG19 外键快速路径越界写入(8 月 30 日)

通过智能化的信息筛选、内容提炼与实践工具,PGNexus 帮助用户更高效地了解 PostgreSQL 技术动态,参与社区协作,并完成从学习到验证的完整闭环。Andrey Borodin 支持将随机化范围限制在 SPLIT_DEFAULT 叶页分裂,指出仅在等惩罚值候选位置中随机选择,既能保留现有的后缀截断行为,又能使页面占用率维持在目标附近。问题的根源在于:子查询中包含引用连接列的 CASE 表达式,子查询被上拉后,eval_const_expressions 将该 CASE 化简为…

IvorySQL的博客 226

PostgreSQL 数据正确性实战(第 4 篇):ON CONFLICT 两次都成功,旧订单为什么覆盖新状态

订单版本 105 的“已支付”先写入,版本 103 的“已取消”因网络重试后到。两次 UPSERT 都成功,结果却退回旧状态。能原子裁决“写哪一行”,不能替业务定义“哪个事件更新”。唯一键幂等、业务顺序和消息 Exactly-Once 是三种不同保证。

weixin_42426485的博客 250

PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍

排序落盘后,团队把work_mem从 4MB 全局调到 256MB。单条报表快了,BI 高峰数据库却被 OOM Killer 终止。work_mem约束的是一次 Sort、Hash 等操作的基础预算,不是一条查询、更不是整个实例的内存上限;多个操作、并行参与者与并发查询会叠加,Hash 还会乘。work_mem是许多 Sort、Hash 等操作各自的基础预算。多个节点、Hash 倍数、并行参与者和并发连接会继续相乘;允许受控落盘通常比全局追求零临时文件更安全。

weixin_42426485的博客 289

YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)

YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕业设计)YOLOv8-deepsort 实现智能车辆目标检测+车辆跟踪+车辆计数(毕

上一篇: 事务处理实现方法集
下一篇: 获取系统当前内存使用量
aqbeyond
博客等级 码龄22年 13粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值