
没懂你要问什么。
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 如果一张表的每行数据是另一个表的列名 怎么用存储过程查询此列名下的数据信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)