0

我正在尝试将参数传递给我创建的视图。这是我的代码。

CREATE FUNCTION param1() RETURNS VARCHAR(50) DETERMINISTIC NO SQL RETURN @param1;
CREATE VIEW `view_stats` AS SELECT * FROM `history` WHERE fullname = param1() ;

这是我的查询

SELECT st.*, mtr.max_open_trades, mtr.max_draw_down FROM `view_stats` AS ST INNER JOIN `mtrecords` AS mtr ON st.login = mtr.login WHERE st.login=?

如何将参数传递给view_stats此查询?

4

3 回答 3

1

是的,您可以通过创建一个函数以从会话变量中获取您的值,以简单的方式将参数传递给您的视图。有关该技术,请参阅https://www.stackoverflow.com/questions/14511760。这是我的创建功能的副本,您可能希望模仿。分隔符 //

CREATE FUNCTION fn_getcase_id()
RETURNS MEDIUMINT(11) DETERMINISTIC NO SQL BEGIN

请参阅 stackoverflow.com/questions/14511760 并阅读所有信息两次或更多。2017 年 4 月 13 日

RETURN @sv_case_id;

结尾//

分隔符;您将需要创建一个类似的 FN(每个变量一个)。

于 2017-10-29T12:57:42.917 回答
0

SQL 视图可以被认为只是在其他查询中包含固定子查询的简写,因此它不能做任何普通查询不能做的事情。如果参数需要在结构上更改正在运行的查询,则需要将整个查询放在某种函数中。

看起来您在这里所做的只是设置 WHERE 子句,因此您可以在视图中包含要过滤的列,并在查询时使用 WHERE 子句。

于 2013-08-26T14:24:18.573 回答
0

这是一个简单的解决方案,用于改善多个表之间的多个连接查询的慢 VIEWS 问题。

DELIMITER ;;
CREATE PROCEDURE `SP_QUERY_VIEW_WITH_PARAMETERS`(IN p_having VARCHAR(300))
    COMMENT 'Executes the statement'
BEGIN
  SET @v_having = p_having;
  SET @v_sql=CONCAT('SELECT 
                    id    AS id_emp  ,
                    user  AS emp_name,
                    .
                    .
                    .
                    FROM table1
                    UNION ALL
                    SELECT 
                    idtifier_us    AS id_emp  ,
                    description    AS emp_name,
                    .
                    .
                    .
                    FROM table2');
SET @v_sql2 = CONCAT(@v_sql,@v_having);
  PREPARE stmt FROM @v_sql2;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END ;;
DELIMITER ;


CALL `SP_QUERY_VIEW_WITH_PARAMETERS`('having id_emp=63 and emp_name like ''VANDERLEI%'' and created_at between ''2019-05-01'' and ''2019-05-17''  ')

标题

于 2019-05-19T03:08:27.070 回答