programing

다른 사람이 저장 프로시저의 결과를 사용하는 방법 - MariaDB

bestprogram 2023. 8. 10. 19:01

다른 사람이 저장 프로시저의 결과를 사용하는 방법 - MariaDB

python 스크립트로 sql query를 실행해야 합니다.두 개의 MariaDB 저장 프로시저를 만들었습니다.첫 번째 전복 시작 및 월차 양도.절차 포기 시작은 DATE 변수를 반환해야 합니다.두 번째 절차 MonthlyTransfer는 AbonamentStart 결과보다 날짜가 최신인 레코드에 대해서만 TotalDay 열의 SUM을 반환해야 합니다.

Abonment Start 절차:

DELIMITER $$
CREATE DEFINER=`admin2`@`localhost` PROCEDURE `AbonamentStart`()
BEGIN
   SELECT DAYOFMONTH(CURRENT_DATE) INTO @currentday;
   SELECT MONTH(CURRENT_DATE) INTO @currentmonth;
   SELECT YEAR(CURRENT_DATE) INTO @currentyear;
   SELECT IF (@currentday < 22,1,0) INTO @plusminus;
   SELECT ADDDATE(CURRENT_DATE, INTERVAL -(@plusminus) MONTH) INTO @plusminustemp;
   SELECT DAYOFMONTH(@plusminustemp) INTO @plusminusday;
   SELECT ADDDATE(@plusminustemp, INTERVAL (22 - @plusminusday) DAY) INTO @abonamentstart;
   SELECT @abonamentstart;
END$$
DELIMITER ;

MonthlyTransfer 프로시저 - Python 스크립트별 SearchDate DATE 변수를 제공할 때 작동합니다.

DELIMITER $$
CREATE DEFINER=`admin2`@`localhost` PROCEDURE `MonthlyTransfer`(IN `SearchDate` DATE)
BEGIN
    SELECT SUM(TotalDay) 
    FROM TRANSFER
    WHERE DayDate > SearchDate;
END$$
DELIMITER ;

아래와 같이 Monthly Transfer 절차를 수정해 봤는데, 통화 절차 MariaDB에서 메시지가 반환되었습니다.

#1318 - 프로시저 라우터에 대한 인수 수가 잘못되었습니다.월별 전송, 예상되는 1, 0

어떤 단서라도 주신다면 미리 감사드립니다.

샘플을 찾았지만 완전히 이해되지는 않았습니다.'다른 저장 프로시저에서 프로시저 호출' [https://www.softwaretestinghelp.com/mysql-stored-procedure/ #MySQL_STORED_PROCEDURS_vs_FUNCTIONs][1]

DELIMITER $$
CREATE DEFINER=`admin2`@`localhost` PROCEDURE `MonthlyTransfer`(IN `@abonamentstart` DATE, OUT TotalTranfer INT)
BEGIN
    CALL AbonamentStart();
    SELECT SUM(TotalDay) 
    FROM TRANSFER
    WHERE DayDate > @abonamentstart;
END$$
DELIMITER ;

테이블 구조:

CREATE TABLE `TRANSFER` (
  `Id` int(11) NOT NULL,
  `Download` bigint(15) NOT NULL,
  `Upload` bigint(15) NOT NULL,
  `DownloadDay` bigint(15) DEFAULT NULL,
  `DownloadNight` bigint(15) DEFAULT NULL,
  `UploadDay` bigint(15) DEFAULT NULL,
  `UploadNight` bigint(15) DEFAULT NULL,
  `TotalDay` bigint(15) DEFAULT NULL,
  `TotalNight` bigint(15) DEFAULT NULL,
  `DayDate` date DEFAULT NULL,
  `DayHour` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

서버 버전: 10.5.15-MariaDB-0+deb11u1 Raspbian 11

언급URL : https://stackoverflow.com/questions/72705254/how-use-results-of-stored-procedure-by-another-one-mariadb