我想获取表中存在的行数,这些行数是我在运行时传递给函数的。
我已经创建了执行动态查询的过程和功能。函数将不允许动态查询,因为我正在从函数中调用过程。 该过程具有动态查询。
////////过程///////
data.columns = data.columns.map(serm.get)
df = data.sum(level=0, axis=1)
//////功能//////
CREATE PROCEDURE bizopsgolddev.`test1`(tbnm varchar(100))
begin
declare sql_text varchar(200);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT CONCAT(sql_text, ' is not valid');
END;
set sql_text=concat('select count(*) from ',tbnm);
SET @SQL := sql_text;
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end;
如果我执行此// select xyz('axpdc')//应该返回行数
谁能告诉我如何通过将表名传递给函数来获得计数(仅适用于mariadb)
答案 0 :(得分:0)
据我了解的问题,解决方案将是一个 function ,该函数返回表的行计数,并将其名称作为参数传递给该函数。
我认为可以通过查询MariaDB中的information_schema数据库来完成。一个函数可能看起来像这样:
CREATE DEFINER = 'yourUsername'@'192.168.%'
FUNCTION testDataBase.fn_GetRowCount(tableName VARCHAR(128))
RETURNS int(11)
BEGIN
-- This could be a parameter if need it to be.
DECLARE databaseName varchar(40) DEFAULT 'testDataBase';
DECLARE result int DEFAULT -1;
SELECT t.TABLE_ROWS INTO result
FROM information_schema.TABLES t
WHERE t.TABLE_NAME = tableName
AND t.TABLE_SCHEMA = databaseName;
RETURN result;
END
为使其正常工作,被称为 definer 的用户必须对TABLES
数据库中的information_schema
表具有读取特权,否则您可能< / em>出现错误(tbh,我不知道是否有必要)。
information_schema
数据库中有很多有用的信息。