2011-09-12 2 views
9

조건부 순차 실행을 수행하는 SQL 스크립트에서 쿼리 실행 흐름을 제어하는 ​​조건부 IF를 도입 할 수있는 방법이 있습니까?MySQL 용 SQL 스크립트

이 경우 http://www.bennadel.com/blog/1340-MySQL-Does-Not-Support-IF-ELSE-Statements-In-General-SQL-Work-Flow.htm 이 실행되면 IF THEN ELSE가 SQL 스크립트에서 작동하지 않는다고 표시됩니다.

다른 방법이 있습니까?

기본적으로 특정 "select colName from table"명령을 실행하고 colName이 특정 값에 해당하는지 확인하고 싶습니다. 그렇다면 나머지 스크립트를 진행하십시오. 그렇지 않으면 실행을 중단하십시오.

알려 주시기 바랍니다.

+0

제공된 링크에서 "함수 및 저장 프로 시저에서만 허용됩니다." – user470714

+0

스크립트를 저장 프로 시저에 넣은 다음 간단히 프로 시저를 호출 할 수 있습니다. – Owen

+0

노조는 어떻습니까? – ajreal

답변

16

조건부 코드가 허용되는 절차에서 SQL 스크립트를 래핑하기 만하면됩니다. 당신이 진술을 남겨 두지 않고 싶다면 끝내면 절차를 생략 할 수 있습니다. 예를 들면 다음과 같습니다.

delimiter // 

create procedure insert_games() 

begin 

    set @platform_id := (select id from platform where name = 'Nintendo DS'); 

    -- Only insert rows if the platform was found 
    if @platform_id is not null then 

     insert into game(name, platform_id) values('New Super Mario Bros', @platform_id); 
     insert into game(name, platform_id) values('Mario Kart DS', @platform_id); 

    end if; 

end; 

// 

delimiter ; 

-- Execute the procedure 
call insert_games(); 

-- Drop the procedure 
drop procedure insert_games; 

절차를 사용하지 않은 경우 "구분 기호"키워드에 대한 설명이 필요할 수 있습니다. 첫 번째 줄은 구분 기호를 "//"로 전환하여 MySQL이 프로 시저 정의에 세미콜론을 포함 할 수 있도록합니다. 일단 프로 시저가 생성되면 구분 기호를 다시 ";"로 전환합니다. 평소와 같이 명령문을 실행할 수 있습니다.

0

몇 가지 연구를 한 후에이 문제를 해결할 방법을 찾은 것 같습니다. 스크립트가 이미 대상 데이터베이스에 대해 실행되었는지 확인하는 방법을 찾고있었습니다. 이것은 주로 데이터베이스의 버전 관리를위한 것입니다. 나는 실행 된 스크립트를 추적하기 위해 생성 된 테이블을 가지고 있으며 스크립트 내에서 실행하기 전에 테이블을 먼저 확인하기 위해 일부 흐름을 원했습니다. 아직 문제를 완전히 해결하지는 못했지만 기본적으로 필요한 작업을 수행하는 간단한 스크립트를 만들었습니다. DDL을 변수 값에 따라 선택 항목으로 묶어야합니다.

1 단계 - 설정 결과를 저장하는 비트 변수 2 단계 - 당신의 선택을하고 변수를 설정 결과이 발견되면 3 단계 - 당신이 잘못된 결과에해야 할 일을 수행 4 단계 - 무엇을합니까 당신이 진정한 결과 여기

에해야 할 것은 예제 스크립트를

설정 @schemachangeid = 0;

@schemachangeid : = 1 from SchemaChangeLog 여기서 scriptname = '1_create_tables.sql';

이중에서 'scriptalreadyran'을 선택하십시오. 여기서 @schemachangeid = 1;

이중에서 'scriptnotran'을 선택하십시오. 여기서 @schemachangeid = 0;

나는 또한 이것이 오래된 쓰레드라는 것을 알고 있지만 어쩌면 저와 같은 저장 프로 시저 외부에서 이런 종류의 일을하려고하는 누군가를 도울 것입니다.