mysql 存储过程 数据库表名字段作为参数传递给存储过程的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 '学生表'追问
set l_sql=CONCAT_WS(' ','select min(id) from',in_table); 字符串拼接完 我执行这条语句 报Unknown column 'data' in 'field list' 但我是有这个表的
追答你的表名叫field list?
追问表名就是要输入的参数啊 这里是data 你上面给的示例不适用于mysql吧
追答我看你报的错,你是试图从'field list' 这张表里去读取 'data'列啊。你再检查一下拼接后的sql语句
参考技术A 直接将数据库表名字段作为字符类型传到存储过程中,存储过程拼接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 '学生表' 参考技术B 表名字段为name的话
用POST的话就是这样取$_POST['name']
用GET同理一样 参考技术C BEGIN
SET @sqlStr:=CONCAT("select * from ",c);
PREPARE stmt from @sqlStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
c是你传进来的值的变量IN `c` varchar(100)
将数组作为参数传递给 plsql 过程
【中文标题】将数组作为参数传递给 plsql 过程【英文标题】:passing arrays as parameters to plsql procedure 【发布时间】:2016-01-20 08:31:25 【问题描述】:我需要和 sql developer 一起玩,我在这里碰壁了... 我需要对表运行一个简单的更新查询,并且我想传入一个 Id 数组并更新这些 Id 指向的所有行。
我写了下面的存储过程
PROCEDURE SAMPLE_PROCEDURE(SAMPLE_ARRAY IN NUM_ARRAY)
AS
BEGIN
UPDATE RETURNLIST_PICKLIST_MAPPING
SET PICKLIST_ID = 1111111
WHERE RETURNLIST_ID IN (SELECT * FROM TABLE(SAMPLE_ARRAY));
END SAMPLE_PROCEDURE;
NUM_ARRAY
是自定义类型,定义如下
create or replace
TYPE NUM_ARRAY
AS VARRAY(40) OF NUMBER(38, 0);
当我在 sql developer 中运行存储过程时,我想输入 SAMPLE_ARRAY 的值。我试过(2222,1111,1234)
和[2222,1111,1234]
和2222,1111,1234
,每次我得到“表达式类型错误”的错误。
我迫切需要这些人的帮助....
【问题讨论】:
【参考方案1】:您没有展示如何为您的可变数组变量赋值。但是,我相信你可以这样做:
DECLARE
V_T NUM_ARRAY;
BEGIN
V_T := NUM_ARRAY(1,2,3);
SAMPLE_PROCEDURE(V_T);
END;
/
一般情况下,您可以按如下方式定义独立的 VARRAY:
CREATE Or REPLACE TYPE varray_type_name AS VARRAY(n) OF <element_type>;
或者,在 PL/SQL 块中:
TYPE varray_type_name IS VARRAY(n) of <element_type>
更多详情请参考this
【讨论】:
如何通过ADO.net感知NUM_ARRAY? @HorribleGuy 抱歉,这超出了我的知识范围。我建议您发布另一个问题并标记 ADO以上是关于mysql 存储过程 数据库表名字段作为参数传递给存储过程的方法的主要内容,如果未能解决你的问题,请参考以下文章