最近需要做cs模式软件的一个报表的优化,由于软件跨平台,有三个数据库版本mysql、sqlserver、oracle,所以我要写三份功能相同的存储过程,其中表名作为变量调用proc
假设有变量 tablename 作为表名变量 ,表结构如下
接下来以求平均值为例,表名变量为tablename
mysql
SET @sqlStmt = CONCAT('SELECT avg(val) INTO @avg FROM ',tablename);
PREPARE stmt FROM @sqlStmt;
EXECUTE stmt;
--使用concat连接后再执行
sqlserver
DECLARE @cmd AS NVARCHAR(255);
SET @cmd = N'SELECT @avg=avg(val) FROM ' + @tablename;
EXEC sp_executesql @cmd,N'@avg float out',@avg out;
--declare是在begin前声明的 declare @avg float;
oracle
--在as后声明了变量v_sql varchar2(512);avg BINARY_FLOAT;
v_sql:= 'select avg("val") from "'||tablename||'"';
EXECUTE IMMEDIATE v_sql into avg;
--注意 如果建表的时候表名没打""此处表名不要加双引号
下一章解释表名作为变量如何建立游标