sql中执行存储过程参数如何取表中查询值

sql中执行存储过程参数如何取表中查询值,第1张

没懂你要问什么。

如果你你要给存储过程传递参数,用IN 关键字,例如:

CREATE DEFINER=`vemdm`@`%` PROCEDURE `pr_insert_softlogday`(IN ins_DNname VARCHAR(20),IN sel_DNname VARCHAR(20),IN starttime VARCHAR(20),IN endtime VARCHAR(20))

BEGIN

SET @sqlcmd = CONCAT("INSERT INTO ",ins_DNname,"(softname,softversion,citycode,s_work,usetimes,s_day)

SELECT softname,softversion,citycode,workcustom s_work,SUM(usetimes) usetimes,create_time s_day FROM (

SELECT amac,acitycode,aworkcustom,bsoftname,bsoftversion,busetimes,bcreate_time FROM

(SELECT FROM ",sel_DNname," a WHERE create_time BETWEEN '",starttime,"' AND '",endtime,"')b JOIN

(SELECT mac,citycode,workcustom FROM `terminal_unit`) a ON

amac = bmac)c GROUP BY softname,softversion,citycode,workcustom");

PREPARE temp FROM @sqlcmd;

EXECUTE temp;

END$$

DELIMITER ;

这个我传递了3个参数。

如果你你要用存储过程查结果,建议改为用视图或者函数,存储过程默认是没有返回值的。所以你拿不到结果

首先你要知道“另一个存储过程”的结果集的所有列的类型。

假设“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么就在你说的“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集

如下

create

procedure

sp2

as

declare

@t

table(a

int,b

int,c

int)

insert

into

@t(a,b,c)

exec

sp1

select

from

@t

举例说明 表A:

prjCode prjName

p1 项目1

p2 项目2

另外有一存储过程 getPrjTask,参数为prjCode; 获取表的所有prjCode,每个prjCode作为参数传入存储过程(这里传参数可以使用游标循环传参), 循环调用存储过程。

循环调用的语句如下

declare @prjCode Nvarchar(50)

DECLARE cursor1 CURSOR FOR

SELECT prjCode FROM 表A

--打开游标

OPEN cursor1

--获取数据,游标下移一行

FETCH NEXT FROM cursor1 INTO @prjCode

--检测获取数据是否成功

WHILE @@fetch_status=0

BEGIN

--显示通过游标赋值的变量

exec getPrjTask @prjCode --执行

--游标继续下移

FETCH NEXT FROM cursor1 INTO @prjCode

END

--关闭游标

CLOSE cursor1

oracle动态游标举例:

-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!

CREATE OR REPLACE PROCEDURE xue_userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)

IS

sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句

BEGIN

sqlstr := 'SELECT Id, Name, Sex, Age, Address FROM userinfo WHERE Address = :i_address'; -- 给SQL变量赋值,其 中 :i_address 是绑定变量,以提高执行效率!

OPEN o_cur FOR sqlstr USING i_address; -- 给游标变量赋值

END;

set serveroutput on;

var c_cur refcursor;

exec xue_userinfo_proc('北京',:c_cur);

print c_cur;

oracle存储过程举例:>

思路大概是这样:

实用ltrim或者rtrim函数去掉左边或右边符合条件的字符。

如果是oracle环境,看你这里都是字母在前数字在后的格式,假设旧列叫 col_old,新的字母列是col_str,新的数字列是col_num

update table1 set

col_str=rtrim(col_old,'1234567890'),

col_num=to_number(ltrim(col_old,rtrim(col_old,'1234567890')))

sql server 有没有这个函数不知道了,反正这是一个思路吧。供参考而已

sql没有这个东西,那我就给你提个思路吧,语句你自己写了,我没有环境。

用ASCII码和sql的ltrim和rtrim来做,你需要循环找到从左起每个字符都是ASCII>=65(9以上即字母)的,直到找到ASCII<=64的就结束,这样可以把这个字符部分的长度得到,在用trim函数截取一下就可以了。

楼主水平很高啊,单从问题本身来看涉及很多底层的 *** 作啊,首先得遍历所有视频设备,然后获取设备名,最后再进行捕获,如果这时候拔掉摄像头,程序肯定出错啊,所以应该找到某个函数里的一个事件来引发摄像头已经移出,然后在你的程序里捕获此事件进行处理,结束视频捕获,并等待另一个新的摄像头接入事件,才能完成预定功能。想想都很难,祝你成功。

以上就是关于sql中执行存储过程参数如何取表中查询值全部的内容,包括:sql中执行存储过程参数如何取表中查询值、怎么修改存储过程从另一个表获取数据。、oracle PL/sql 如果一张表的每行数据是另一个表的列名 怎么用存储过程查询此列名下的数据信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9319060.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存