MySQL 저장 프로시저에 목록 데이터 유형이 있습니까, 아니면 이를 에뮬레이트하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/8795

  •  08-06-2019
  •  | 
  •  

문제

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

일반적으로 MySQL 저장 프로시저의 목록 작업은 어떻게 합니까?

도움이 되었습니까?

해결책

이것 저장 프로시저에서는 유효한 테이블 열 데이터 형식만 매개 변수로 허용하므로 배열을 저장 프로시저로 구문 분석하는 문제에 대한 좋은 논의가 기사에 나와 있습니다.

당신이 할 수있는 몇 가지 깔끔한 일이 있습니다 CSV mysql의 테이블 유형 - 즉, 플랫 파일을 db에 로드하는 경우입니다.

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

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

다른 팁

얼마나 복잡하게 만들고 싶은지에 따라 일반 연결 테이블을 사용할 수 있습니다.내 응용 프로그램 중 하나에는 사용자가 선택할 수 있는 여러 보고서가 있습니다. 예를 들어 콤보 상자의 단일 고객이 아닌 보고서를 실행할 고객 목록이 있습니다.2개의 필드가 있는 별도의 테이블이 있습니다.

  • 고유 ID(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      

제가 선택한 프로그래밍 언어인 C#에서는 실제로 애플리케이션 자체에서 이 작업을 수행합니다. 왜냐하면 Split() 함수와 루프는 SQL보다 C#에서 프로그래밍하기가 더 쉽기 때문입니다.

아마도 당신은 살펴 봐야 할 것입니다 하위문자열_인덱스() 기능.

예를 들어 다음은 google을 반환합니다.

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com', '.', -2), '.', 1);

이것이 SP에서 구체적으로 작동하는지 확실하지 않지만 MySQL 5에는 필요한 작업을 수행할 수 있는 ENUM 및 SET 데이터 유형이 있습니다.http://dev.mysql.com/doc/refman/5.0/en/enum.html http://dev.mysql.com/doc/refman/5.0/en/set.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top