2012-12-01 2 views
0

ID가 '2'인 책과 동일한 선반에있는 책의 수를 보여주는 SQL보기입니다. 기본적으로 ID가 '2'가 아닌 책 ID를 입력 할 수있는 절차로 전환하는 간단한 방법이 있습니까? 나는 아직 절차에 모험하지 않았는데,이 특별한 절차는 많은 양의 코딩을 필요로 할까?뷰에서 프로 시저를 생성하는 SQL

하위 표는 책 테이블에 선반 ID가 있지만 책꽂이에 책 ID가 들어 있지 않기 때문입니다.

+1

왜 부질? 같은 테이블에서 두 가지를 모두 조회하고 있습니다. –

+0

게시물을 편집했습니다. 이는 서적 테이블에 서가 ID가 있지만 서적에 서적 ID가 들어 있지 않기 때문입니다. – Jaqualembo

답변

0

오라클 경우, 다음과 같은 것을 시도해보십시오

PROCEDURE GET_BOOK_COUNT(
     i_book_id   IN books.book_id%TYPE, 
     o_count    OUT NUMBER) 
     AS 
     BEGIN 
      SELECT COUNT(*) INTO o_count FROM books 
      WHERE shelf_id = 
         (SELECT shelf_id FROM books WHERE book_id = i_book_id); 
     END GET_BOOK_COUNT; 

그러나 더 나은로 procedure을 그것에게 function을 대신하기 :

 FUNCTION GET_BOOK_COUNT(
     i_book_id   IN books.book_id%TYPE) 
      RETURN NUMBER 
      IS 
      l_count Number; 
      SELECT COUNT(*) INTO l_count FROM books 
      WHERE shelf_id = 
         (SELECT shelf_id FROM books WHERE book_id = i_book_id); 
      RETURN l_count; 
     END GET_BOOK_COUNT; 
+0

이 경우에는 해당 값을 직접 반환하는 함수를 선호합니다. Out 매개 변수는 때로는 조금 까다 롭습니다. 특히 결과를 더 큰 SQL 문의 일부로 다시 사용하려는 경우가 있습니다. –

+0

@a_horse_with_no_name 동의 : OP가 절차에 대해 문의 했으므로 이에 대해 언급했습니다. 나는 지금 대답을 업데이트 할 것이다. –

0

코드는 다음과 같은 것을 볼 수 있었다 : - 당신이 원하는 저장 프로 시저를 작성해야합니다

CREATE PROCEDURE spBooks(@BookID integer) 
AS 
SELECT COUNT(*) FROM books 
    WHERE shelf_id = (SELECT shelf_id FROM books WHERE book_id = @BookID) 
GO; 

.

관련 문제