저장 프로시저 변환
쿼리 변환기를 사용하여 SQL 저장 프로시저를 가져오고 MongoDB 코드로 변환할 수 있습니다. 쿼리 변환기는 SQL 코드를 변환할 때 프로젝트에 정의된 매핑 규칙 및 스키마 변환을 고려합니다.
이 작업에 대하여
쿼리 변환기는 길거나 복잡한 쿼리, 트리거 또는 저장 프로시저를 변환할 수 없는 AI 기술을 사용합니다. 일부 쿼리는 올바르게 변환되지 않을 수 있고, 다른 쿼리는 전혀 변환되지 않을 수 있습니다.
쿼리 변환기는 현재 프로젝트의 관계형 스키마, MongoDB 스키마 및 매핑 규칙을 사용하여 쿼리를 변환하는 방법을 결정합니다. 쿼리가 관계형 스키마에 없는 테이블을 참고하거나 MongoDB collection에 매핑되지 않은 테이블을 참고하는 경우 변환이 실패하거나 올바르지 않을 수 있습니다.
변환된 쿼리, 트리거, 뷰 및 저장 프로시저는 프로젝트에 저장되며 프로젝트 가져오기 및 내보내기를 통해 유지됩니다.
SQL 쿼리는 40 000 텍스트 문자로 제한됩니다.
왼쪽 Query Converter 창에서 이전 전환 내역을 볼 수 있습니다. 각 변환에는 변환 결과를 나타내는 아이콘이 있습니다. 객체 옆에 아이콘이 없으면 아직 변환이 시도되지 않은 것입니다.
Icon설명Spinner이제 변환이 실행 중입니다.녹색 확인 표시전환에 성공했습니다.빨간색 느낌표마지막 시도에서 전환이 실패했습니다.
시작하기 전에
MongoDB 에는 SQL 저장 프로시저에 대한 공식 동의어 객체 유형이 없습니다. 대신 MongoDB 는 데이터베이스 로직을 호스팅하는 사용자 지정 JavaScript 및 운전자 코드를 지원합니다. 애플리케이션 현대화 과정의 일부는 애플리케이션 요구 사항에 가장 적합한 프로그래밍 언어 와 호스팅 옵션을 선택하는 것입니다. 변환된 저장 프로시저 코드를 애플리케이션 에서 또는 MongoDB App Services Functions를 사용하여 호스팅하다 할 수 있습니다.
프로덕션 환경에 배포하기 전에 항상 쿼리 변환기에서 생성된 코드를 검토하고 테스트합니다.
단계
관계형 데이터베이스에 연결
소스 데이터베이스에 대한 연결 세부 정보를 지정합니다.
자세한 내용은 관계형 데이터베이스 연결 문자열을 참조하세요.
Connect를 클릭합니다.
코드 변환 및 테스트
왼쪽 창에서 Stored Procedures 아래의 저장 프로시저 이름을 클릭합니다.
코드가 Imported Stored Procedure 창에 표시됩니다.
드롭다운에서 Target Language 을(를) 선택합니다.
쿼리 변환기는 Javascript, C# 및 Java로의 저장 프로시저 변환을 지원합니다.
Convert 버튼을 클릭합니다. 쿼리 변환기가 코드를 변환할 때까지 기다립니다.
변환된 MongoDB 코드가 Converted MongoDB Query 창에 표시됩니다.
쿼리 변환기에 오류가 있는 경우 Converted MongoDB Query 창에서 세부 정보를 볼 수 있습니다.
다음을 클릭합니다. Converted MongoDB Query 창의 아이콘을 클릭하여 MongoDB 코드를 클립보드에 복사합니다.
생성된 MongoDB 코드를 테스트하고 유효성을 검사합니다.
팁
Filter 텍스트 상자를 사용하여 객체 이름과 SQL 구문을 기준으로 쿼리, 저장 프로시저, 트리거 및 뷰를 필터링할 수 있습니다.
예시
쿼리 변환기는 저장 프로시저를 Javascript, C# 또는 Java 코드로 변환할 수 있습니다. 아래 예는 각 언어로의 변환을 보여줍니다.
JavaScript
다음 예제는 JavaScript로 변환된 MySQL 저장 프로시저를 보여줍니다.
BEGIN DECLARE v_rentals INT; DECLARE v_out INT; SELECT COUNT(*) INTO v_rentals FROM rental WHERE inventory_id = p_inventory_id; IF v_rentals = 0 THEN RETURN TRUE; END IF; SELECT COUNT(rental_id) INTO v_out FROM inventory LEFT JOIN rental USING(inventory_id) WHERE inventory.inventory_id = p_inventory_id AND rental.return_date IS NULL; IF v_out > 0 THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END
async function query(db, p_inventory_id) { const v_rentals = await db.collection('rental').countDocuments( { inventoryId: p_inventory_id } ); if (v_rentals === 0) { return true; } const v_out = await db.collection('inventory').aggregate([ { $lookup: { from: 'rental', localField: 'inventoryId', foreignField: 'inventoryId', as: 'rentalData' } }, { $match: { inventoryId: p_inventory_id, 'rentalData.returnDate': { $exists: false } } }, { $count: 'rentalId' } ]).toArray(); if (v_out.length > 0 && v_out[0].rentalId > 0) { return false; } else { return true; } }
C#
다음 예제는 C#으로 변환된 MySQL 저장 프로시저를 보여줍니다.
BEGIN DECLARE v_customer_id INT; DECLARE EXIT HANDLER FOR NOT FOUND RETURN NULL; SELECT customer_id INTO v_customer_id FROM rental WHERE return_date IS NULL AND inventory_id = p_inventory_id; RETURN v_customer_id; END
async Task<int?> Query(IMongoDatabase db) { var rentalCollection = db.GetCollection<BsonDocument>("rental"); var filter = Builders<BsonDocument>.Filter.Eq("inventoryId", p_inventory_id) & Builders<BsonDocument>.Filter.Eq("returnDate", null); var result = await rentalCollection.Find(filter).FirstOrDefaultAsync(); return result != null ? result["customerId"].AsInt32 : (int?)null; }
Java
다음 예제는 Java로 변환된 MySQL 저장 프로시저를 보여줍니다.
BEGIN SELECT inventory_id FROM inventory WHERE film_id = p_film_id AND store_id = p_store_id AND NOT inventory_in_stock(inventory_id); SELECT COUNT(*) FROM inventory WHERE film_id = p_film_id AND store_id = p_store_id AND NOT inventory_in_stock(inventory_id) INTO p_film_count; END
void query(MongoDatabase db) { int p_film_id = 0; int p_store_id = 0; int p_film_count = 0; MongoCollection<Document> inventoryCollection = db.getCollection("inventory"); Bson filter = Filters.and(Filters.eq("filmId", p_film_id), Filters.eq("storeId", p_store_id), Filters.not(inventory_in_stock("inventoryId"))); FindIterable<Document> result = inventoryCollection.find(filter); for (Document doc : result) { System.out.println(doc.getInteger("inventoryId")); } p_film_count = (int) inventoryCollection.countDocuments(filter); }