当前位置:首页 » 存储配置 » mysql存储过程拼接sql

mysql存储过程拼接sql

发布时间: 2022-09-19 12:20:04

㈠ mysql 存储过程 数据库表名字段作为参数传递给存储过程的方法

直接将数据库表名字段作为字符类型传到存储过程中,存储过程拼接sql语句,再用exec执行。例如:
CREATE PROCEDURE [proc_test]
(@tablename varchar(100))
WITH
EXECUTE AS CALLER
AS
declare @sql varchar(1000);
set @sql='select * from '+@tablename
exec(@sql)
GO

再直接执行 exec proc_test '学生表'

㈡ mysql存储过程求大神(拼接字符串)

DROPPROCEDUREIFEXISTS`p_create_view`

CREATEPROCEDUREp_create_view()
BEGIN
DECLAREtableNameVARCHAR(100);
DECLAREstopFlagINT;
DECLAREsql1VARCHAR(1000);
DECLAREcursor_nameCURSORFORSELECTTABLE_NAMEFROMinformation_schema.tablesWHERETABLE_NAMELIKE'test_2014%';
'02000'SETstopFlag=1;
SET@sql1='createviewtestasselectid,namefrom';
OPENcursor_name;
REPEAT
FETCHcursor_nameINTOtableName;
SELECTCONCAT(@sql1,tableName,'UNIONALLSELECTid,nameFROM')INTO@sql1FROMDUAL;
UNTILstopFlagENDREPEAT;
CLOSEcursor_name;
SELECTSUBSTR(@sql1,1,LENGTH(@sql1)-31)INTO@sql1FROMDUAL;
PREPAREstepFROM@sql1;
EXECUTEstep;
END;

㈢ mysql使用存储过程将多条(4条以上)SQL使用 union all 合并

BEGIN
declaresel_sqlVARCHAR(100);
declareg_sqlVARCHAR(100);
declareu_sqlVARCHAR(100);
declaret_nameVARCHAR(100);
DECLAREdoneINTDEFAULTFALSE;
declaremonth__monthwhereflag=1;
=true;
setsel_sql='(selectsum(fee+fee2+fee3)Asfee,monthfromfee_detail_';/*左括号*/
setg_sql='groupbymonth)';/*右括号*/
setu_sql='unionall';/*加空格、上同*/
OPENmonth_cursor;
my_loop:loop
FETCHmonth_cursorintot_name;
ifdonethen
leavemy_loop;
endif;
ifs_sqlisnullthen
set@s_sql=CONCAT(sel_sql,t_name,g_sql);/*第一个SQL*/
else
set@s_sql=CONCAT(s_sql,u_sql,sel_sql,t_name,g_sql);/*开始Union后续SQL*/
endif;
endloop;
/*最后执行一次拼接后的SQL语句*/
PREPAREpre_s_sqlfrom@s_sql;
EXECUTEpre_s_sql;
deallocatepreparepre_s_sql;
closemonth_cursor;
END

思路修正,貌似还有不少语法问题,自行修复。

㈣ mysql存储过程能不能直接执行拼接的sql语句

prepare statement_name from 'sql_text'
execute statement_name using [ variable1,variable2]
deallocate prepare statement_name

㈤ mysql存储过程动态拼接sql时能用函数吗

能在详细点吗,没看明白,拼接过程中可以用mysql以外的函数,拼接成后 只能用mysql函数了

㈥ 存储过程拼接了两个sql,如何执行;

这个是oracle的存储过程。你只要在执行时候输入参数_tableName,v_pkKey ,v_pkValue 的值就行了,它会自动顺序执行的。

㈦ MySQL存储过程中实现执行动态SQL语句的方法

本文实例讲述了MySQL存储过程中实现执行动态SQL语句的方法。分享给大家供大家参考。具体实现方法如下:
mysql>
mysql>
delimiter
$$
mysql>
mysql>
CREATE
PROCEDURE
set_col_value
->
(in_table
VARCHAR(128),
->
in_column
VARCHAR(128),
->
in_new_value
VARCHAR(1000),
->
in_where
VARCHAR(4000))
->
->
BEGIN
->
DECLARE
l_sql
VARCHAR(4000);
->
SET
l_sql=CONCAT_ws('
',
->
'UPDATE',in_table,
->
'SET',in_column,'=',in_new_value,
->
'
WHERE',in_where);
->
SET
@sql=l_sql;
->
PREPARE
s1
FROM
@sql;
->
EXECUTE
s1;
->
DEALLOCATE
PREPARE
s1;
->
END$$
Query
OK,
0
rows
affected
(0.00
sec)
希望本文所述对大家的MySQL数据库程序设计有所帮助。

㈧ 五、MYSQL存储过程和函数

• create procere用来创建 存储过程 ,create function用来创建 函数

Delimiter命令是改变语句的结束符 ,MySQL默认的结束符为;号,由于procere和function中的;号并不代表创建的结束,所以要替换成另外的结束符以便表示创建的结束
• rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句, 通过begin…end将这多个SQL语句 包含在一起
• MySQL存储过程和函数中也可以包含类似create和drop等DDL语句
• comment子句用来写入对存储过程和函数的注释
Language子句用来表示此存储过程和函数的创建语言
存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic

相关属性短语只有咨询含义,并不是强制性的约束

• Drop procere/function语句用来 删除指定名称的存储过程或函数

• Begin…end语句通常出现在存储过程、函数和触发器中,其中 可以包含一个或多个语句 ,每个语句用;号隔开

• 标签label可以加在begin…end语句以及loop, repeat和while语句
语句中通过iterate和leave来控制流程,iterate表示返回指定标签位置,leave表示跳出标签

Declare语句通常用来声明本地变量、游标、条件或者handler
Declare语句只允许出现在begin … end语句中而且必须出现在第一行
Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler

• 本地变量可以通过declare语句进行声明
声明后的变量可以通过select … into var_list进行赋值,或者通过set语句赋值,或者通过定义游标并使用fetch … into var_list赋值
• 通过declare声明变量方法:

• MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的 流程控制语句 ,另外return语句也是函数中的特定流程控制语句

• Case语句在存储过程或函数中表明了 复杂的条件选择语句

• IF语句在存储过程或函数中表明了 基础的条件选择语句

其中在 function 里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的 function 指定一个参数。
在 MySQL 中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;

• Iterate语句 仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环

• Leave语句表明 退出指定标签的流程控制语句块
• 通常会用在begin…end,以及loop,repeat,while的循环语句中

• Loop语句是存储过程或函数中表达 循环执行 的一种方式

• repeat语句是存储过程或函数中表达 循环执行 的一种方式

• while语句是存储过程或函数中表达 循环执行 的一种方式

• Return语句用在 函数中,用来终结函数的执行并将指定值返回给调用者

• Cursor游标用来 声明一个数据集
• 游标的声明必须在变量和条件声明之后,在handler声明之前

• Cursor close语句用来 关闭之前打开的游标

• Cursor declare语句用来声明一个游标和指定游标对应的数据集合, 通常数据集合是一个select语句

• Cursor fetch语句用来获取游标指定数据集的 下一行数据 并将各个字段值赋予后面的变量

• Open cursor语句用来打开一个之前已经 声明好的游标

• Declare condition语句命名 特定的错误条件 ,而该特定错误可以在declare…handler中指定 处理方法

• 比如在MySQL中1051error code表示的是unknown table的错误,如果要对这
个错误做特殊处理,可以用三种方法:

• Declare handler语句用来声明一个handler来处理一个或多个特殊条件,当其中的某个条件满足时则触发其中的statement语句执行
• Statement可以是一个简单SQL语句,也可以是begin…end组成的多个语句

• Handler_action子句声明当执行完statement语句之后应该怎么办

Condition_value的值有以下几种:

• 当condition发生但没有声明handler时,则存储过程和函数依照如下规则处理

• create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行
• 触发器创建时需要 指定对应的表名 tbl_name

Definer关键词用来指定trigger的安全环境
• Trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的 每行数据修改前或者后 执行
• Trigger_event指定触发该触发器的具体 事件
• INSERT当新的一行数据插入表中时触发,比如通过执行insert,load data,replace语句插入新数据
• UPDATE当表的一行数据被修改时触发,比如执行update语句时
• DELETE当表的一行数据被删除时触发,比如执行delete,replace语句时
• 当执行insert into … on plicate key update语句时,当碰到重复行执行update时,则触发update下的触发器
• 从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下按照创建的时间依次执行,通过 指定FOLLOWS/PRECEDES改变执行顺序 ,即FOLLOWS时表示新创建的触发器后执行,PRECEDES则表示新触发器先执行
• Trigger_body表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段, OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示行数据被插入或修改之后的字段数据

• Drop trigger语句用来 删除一个触发器

• If exists短语用来避免删除不存在的触发器时引发报错
当你执行drop table时,表上的触发器也被drop掉了

㈨ SQL怎么拼接字符串

不同的数据库,相应的字符串拼接方式不同,通过对比加深一下记忆。

一、MySQL字符串拼接

1、CONCAT函数

语法格式:CONCAT(char c1, char c2, ..., char cn) ,其中char代表字符串,定长与不定长均可以

连接两个字符串

(9)mysql存储过程拼接sql扩展阅读

字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。

字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“a”,s[10]="j"。

而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

字符串函数的应用

1、连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.

例:concat(‘11’,'aa’)='11aa’;

2、求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

例:(‘abdag’,2,3)=’bda’

3、删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

例:s:=’abcde’;delete(s,2,3);结果s:=’ae’

4、插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置

例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’

5、求字符串长度 length(s) 例:length(‘12abc’)=5

在ASP中 求字符串长度用 len(s)例: len("abc12")=5

6、搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.

例:pos(‘ab’,’12abcd’)=3

7、字符的大写转换。Upcase(ch) 求字符ch的大写体。

例:upcase(‘a’)=’A’

8、数值转换为数串。 过程 Str(x,s) 把数值x化为数串s.

例:str(12345,s); 结果s=’12345’

9、数串转换为数值。 过程val(s,x,I) 把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数,第三个参数也可不传

例:val(‘1234’,x,I);结果 x:=1234

㈩ 创建存储过程sql语句

1)过程名
存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。
需要注意的是,名称应当尽量避免选取与MySQL内置函数相同的名称,否则会发生错误。
2)过程参数
存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的MySQL数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有1个或多个参数。
MySQL存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用IN、OUT和INOUT三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。

热点内容
linux外网访问端口映射 发布:2025-03-19 09:36:30 浏览:328
java的md5加密和解密 发布:2025-03-19 09:34:56 浏览:134
忘了id密码怎么找回 发布:2025-03-19 09:34:24 浏览:999
linux命令行ftp 发布:2025-03-19 09:25:08 浏览:311
androideclipse的项目 发布:2025-03-19 09:25:03 浏览:111
php函数this 发布:2025-03-19 09:23:41 浏览:524
javalinux路径 发布:2025-03-19 09:23:35 浏览:188
柴油乘用炮哪个配置性价比高 发布:2025-03-19 09:17:56 浏览:488
安卓如何取消鸿蒙升级提醒 发布:2025-03-19 09:17:04 浏览:622
清空本地缓存在哪 发布:2025-03-19 09:16:27 浏览:160