2008-08-12 4 views
13

나는 목록에 인수를 취한 MySQL에서 저장 프로 시저를 만들고 싶습니다. 예를 들어 한 번의 호출로 항목에 대해 여러 개의 태그를 설정할 수있게하려면 원하는 항목의 ID와 설정할 태그 목록을 사용하는 프로 시저를 정의해야합니다. 그러나, 나는 이것을 할 어떤 방법을 찾을 수 없습니다, 내가 아는 한 목록 데이터 유형은 없습니다,하지만 그것은 어떻게 든 에뮬레이트 될 수 있습니까? 태그 목록을 쉼표로 구분 된 문자열로 묶어서 어떻게 든 분리하고 반복 할 수 있습니까?MySQL 스토어드 프로 시저에리스트 데이터 유형이 있습니까, 아니면이를 에뮬레이션 할 수 있습니까?

대개 어떻게 MySQL 저장 프로 시저의 목록을 사용합니까?

답변

8

This 문서는 좋은 토론을 가지고 내가이 개 필드를 별도의 테이블이 저장 프로 시저가 유효한 테이블 열 데이터 형식 만 매개 변수로 허용하기 때문에 저장 프로 시저에 대한 배열 구문 분석 문제.

csv 테이블 유형으로 mysql에서 할 수있는 몇 가지 사항이 있습니다. 즉, 플랫 파일을 db로로드하는 것입니다.

저장 프로 시저에 임시 테이블을 만들고 csv 목록을 반복하여 임시 테이블에 삽입 한 다음 해당 테이블의 값을 선택하는 커서를 만들 수 있습니다. 위에서 언급 한 스레드의 answer은이를 수행하는 방법을 보여줍니다.

일반적으로 나는 데이터베이스에 와서 각 항목에 대해 개별적으로 쿼리를 수행하기 전에 배열을 분할합니다.

0

SP에서 특별히 작동하지만 MySQL 5에서 필요한 데이터를 처리 할 수있는 ENUM 및 SET 데이터 유형이 있는지 확실하지 않습니다. 분할() 함수와 루프 C#을 누른 다음 SQL에서 더 쉽게 프로그래밍 할 수 있기 때문에 선택, C#을 내 프로그래밍 언어에서 http://dev.mysql.com/doc/refman/5.0/en/enum.html

+0

enums 및 set은 문자열에만 적용됩니다. 열거 형은 집합에서 하나의 값만 허용하므로 가변 개수의 값을 허용하지 마십시오. 나는 또한 SET 데이터 형이 스토어드 프로 시저에서 미리 정의되어야한다고 생각한다. 그래서 제한된 사용이된다 (어쨌든 나는 그것을 얻을 수 없다 ...) – beldaz

1

당신이 얻을하는 방법 복잡한에 따라 일반적인 연결 테이블을 사용할 수 있습니다. 내 응용 프로그램 중 하나에 대해 사용자가 선택할 수있는 여러 보고서가 있습니다 (예 : 콤보 상자의 단일 고객이 아닌 보고서를 실행할 고객 목록).

  • 을 UniqueID (GUID)
  • 항목 ID

들의 유사 코드는 다음과 같습니다 :

GUID guid = GenerateGUID() 
try 
    for each customer in customerList { INSERT(guid, customerId) } 
    ExecuteSQLPocedure(guid) 
    --the procedure can inner-join to the list table to get the list 
finally 
    DELETE WHERE UniqueID=guid  
관련 문제