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 存储过程 数据库表名字段作为参数传递给存储过程的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将表名作为参数传递给存储过程?

将表中的列值作为参数传递给存储过程 sql

如何从.net代码将表值参数传递给存储过程

将参数传递给 AS400 中的存储过程以匹配 IN 键

将数组作为参数传递给 plsql 过程

将 xml 数据作为存储过程的参数传递给 s-s-rs