복붙노트

[SQL] 내 SQL 동적 실행하고 저장 프로 시저에서 변수에 출력을 얻을 쿼리

SQL

내 SQL 동적 실행하고 저장 프로 시저에서 변수에 출력을 얻을 쿼리

나는 내 SQL 저장 프로 시저에서 동적 쿼리를 생성합니다. 나는 밖으로 매개 변수로이 쿼리의 결과를 얻을 싶어요. 이걸 어떻게 할까?

CREATE PROCEDURE 'searchInvoice'
(
  OUT numOfRecords INT
)
BEGIN
  DECLARE query1 TEXT; 
  DECLARE query2 TEXT; 

 SET query1 = 'SELECT COUNT(*) bla bla bla.....'; 
 // Query1 to select the count of matching tuples..

 SET query2 = 'SELECT * from bla bla bla....';
 // Query2 to select original records...

 // later part of this both queries generate dynamically according to some IN parameters..

 // now I wanna assign the output of the query1 into numOfRecords 
 // and I wanna execute the query2 as well.. like this

    SET @Sql = query2;        
    PREPARE STMT FROM @Sql; 
    EXECUTE STMT; 
    DEALLOCATE PREPARE STMT;

 // output of the query2 can be read in PHP

END

어떻게 OUT 매개 변수 (numOfRecords)에 쿼리 2의 출력을 얻을 수 ??

해결법

  1. ==============================

    1.이 예에서보세요 -

    이 예에서보세요 -

    CREATE TABLE table1(
      column1 VARCHAR(255) DEFAULT NULL,
      column2 VARCHAR(255) DEFAULT NULL,
      column3 VARCHAR(255) DEFAULT NULL
    );
    
    INSERT INTO table1 VALUES 
      ('1', 'value1', 'value2'),
      ('2', 'value3', 'value4');
    
    DELIMITER $$
    CREATE PROCEDURE procedure1(IN Param1 VARCHAR(255), OUT Param2 VARCHAR(255), OUT Param3 VARCHAR(255))
    BEGIN
      SET @c2 = '';
      SET @c3 = '';
      SET @query = 'SELECT column2, column3 INTO @c2, @c3 FROM table1 WHERE column1 = ?';
      PREPARE stmt FROM @query;
      SET @c1 = Param1;
      EXECUTE stmt USING @c1;
      DEALLOCATE PREPARE stmt;
      SET Param2 = @c2;
      SET Param3 = @c3;
    END$$
    DELIMITER ;
    
    -- Call procedure and use variables
    SET @Param1 = 2;
    SET @Param2 = '';
    SET @Param3 = '';
    CALL procedure1(@Param1, @Param2, @Param3);
    SELECT @Param2, @Param3;
    +---------+---------+
    | @Param2 | @Param3 |
    +---------+---------+
    | value3  | value4  |
    +---------+---------+
    
  2. ==============================

    2.

    select count(*) into @numOfRecords from .... 
    

    당신은 저장 프로 시저 내에서 변수를 선언 할 수있다

    제가 질문을 이해했습니다 바랍니다.

  3. from https://stackoverflow.com/questions/5591338/my-sql-dynamic-query-execute-and-get-ouput-into-a-variable-in-stored-procedure by cc-by-sa and MIT license