>데이터 베이스 >MySQL 튜토리얼 >저장 프로시저를 사용하여 MySQL 스키마를 GitHub Markdown으로 내보내려면 어떻게 해야 합니까?

저장 프로시저를 사용하여 MySQL 스키마를 GitHub Markdown으로 내보내려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-25 05:28:18843검색

How Can I Export a MySQL Schema to GitHub Markdown Using Stored Procedures?

저장 프로시저를 사용하여 MySQL 스키마를 GitHub 마크다운 형식으로 내보낼 수 있습니다. 다음은 원하는 출력을 얻기 위해 함께 연결할 수 있는 두 개의 저장 프로시저를 사용하는 예입니다.

저장 프로시저 체인

첫 번째 저장 프로시저는 보고할 데이터를 준비합니다. 출력을 격리된 상태로 유지하기 위해 세션 번호를 할당합니다.

CREATE PROCEDURE `Reporting101a`.`describeTables_v2a`(
    IN dbName varchar(100), -- the dbname to report table structures
    OUT theSession int, -- OUT parameter for session# assigned
    IN deleteSessionRows BOOL, -- true for delete rows when done from main reporting table for this session#
    IN callTheSecondStoredProc BOOL -- TRUE = output is from Pretty output in Second Stored Proc. FALSE= not so pretty output
)
BEGIN

    DECLARE thisTable CHAR(100);

    DROP TEMPORARY TABLE IF EXISTS Reporting101a.tOutput;
    CREATE TEMPORARY TABLE Reporting101a.tOutput
    (   id int auto_increment primary key,
        tblName varchar(100) not null,
        ordVal int not null,
        cField varchar(100) not null,
        cType varchar(100) not null,
        cNull varchar(100) not null,
        cKey varchar(100) not null,
        cDefault varchar(100) null,
        cExtra varchar(100) null
    );

    INSERT Reporting101a.tOutput(tblName,ordVal,cField,cType,cNull,cKey,cDefault,cExtra)
    SELECT TABLE_NAME,ORDINAL_POSITION,COLUMN_NAME AS Field, COLUMN_TYPE AS TYPE, RPAD(IS_NULLABLE,4,' ') AS 'Null', 
    RPAD(COLUMN_KEY,3,' ') AS 'Key',RPAD(COLUMN_DEFAULT,7,' ') AS 'DEFAULT',EXTRA AS Extra
    FROM information_schema.columns WHERE table_schema = dbName ORDER BY table_name,ordinal_position; 
    -- select * from information_schema.columns WHERE table_schema = '57security' order by table_name,ordinal_position; 

    ...

END$$

두 번째 저장 프로시저는 커서와 특수 테이블을 활용합니다. MySQL의 DESCRIBE 명령과 유사한 예쁜 출력을 생성합니다.

CREATE PROCEDURE `Reporting101a`.`Print_Tables_Like_Describe`(
    pSessionId INT
)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    ...

    CREATE TABLE IF NOT EXISTS Reporting101a.reportOutput
    (   lineNum INT AUTO_INCREMENT PRIMARY KEY,
        sessionId INT NOT NULL,
        lineOut varchar(100) NOT NULL
    );

    ...

END$$

사용법

필수 항목을 사용하여 첫 번째 저장 프로시저를 호출합니다. 매개변수.

SET @theOutVar =-1; -- A variable used as the OUT variable below

-- See **Note3**
-- Note: with `TRUE` as the 4th parameter, this is a one call deal. Meaning, you are done.
call Reporting101a.describeTables_v2a('stackoverflow',@theOutVar,false,true);

-- See **Note4**
-- Primarily used if the 4th parameter above is false
call Reporting101a.Print_Tables_Like_Describe(@theOutVar); -- loads data for prettier results in chunk format.

출력

출력은 reportOutput 테이블에 생성되며 다음과 같이 검색할 수 있습니다.

select lineOut as '' from Reporting101a.reportOutput where sessionId=pSessionId order by lineNum;

위 내용은 저장 프로시저를 사용하여 MySQL 스키마를 GitHub Markdown으로 내보내려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.