[sql] 저장 프로 시저 란 무엇입니까?

“저장된 절차” 란 무엇 이며 어떻게 작동합니까?

저장 프로 시저의 구성은 무엇입니까 (각 저장 프로 시저 여야 하는 것)?



답변

저장 프로시 저는 몇 가지 방법으로 실행할 수있는 일련의 SQL 문입니다. 대부분의 주요 DBM은 저장 프로 시저를 지원합니다. 그러나 모든 것이 아닙니다. 특정 DBMS 도움말 문서를 사용하여 세부 사항을 확인해야합니다. SQL Server에 가장 익숙하므로 샘플로 사용하겠습니다.

저장 프로 시저를 만들려면 구문이 매우 간단합니다.

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

예를 들어 :

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

저장 프로 시저의 이점은 데이터 액세스 논리를 단일 위치로 중앙 집중화하여 DBA가 쉽게 최적화 할 수 있다는 것입니다. 저장 프로시 저는 저장 프로 시저에 대한 실행 권한을 부여 할 수 있다는 점에서 보안상의 이점이 있지만 사용자는 기본 테이블에 대한 읽기 / 쓰기 권한이 필요하지 않습니다. 이것은 SQL 주입에 대한 좋은 첫 단계입니다.

저장 프로 시저에는 기본 CRUD 작업 과 관련된 유지 관리에 대한 단점이 있습니다. 삽입, 업데이트, 삭제 및 기본 키를 기준으로 한 개 이상의 선택이있는 각 테이블에 대해 각 테이블에 4 개의 프로 시저가 있음을 가정 해 봅시다. 이제 400 개의 테이블로 구성된 적당한 크기의 데이터베이스를 사용하면 1600 개의 프로 시저가 있습니다! 그리고 그것은 당신이 아마 복제본이 없다고 가정합니다.

기본 CRUD 작업을 자동 생성하기 위해 ORM 또는 다른 방법을 사용하면 많은 장점이 있습니다.


답변

스토어드 프로시 저는 특수 태스크를 수행하는 데 사용되는 사전 컴파일 된 SQL 문 세트입니다.

예 : Employee테이블 이있는 경우

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

먼저 Employee테이블을 검색 합니다.

Create Procedure Employee details
As
Begin
    Select * from Employee
End

SQL Server에서 절차를 실행하려면

Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

그런 다음 직원 테이블에 값을 삽입합니다.

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

SQL Server에서 매개 변수화 된 프로 시저를 실행하려면 다음을 수행하십시오.

Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

예: @Name Varchar(30)

에서 Employee테이블 Name컬럼의 크기를해야합니다 varchar(30).


답변

스토어드 프로시 저는 데이터베이스에서 작성되고 저장된 SQL 문 그룹입니다. 저장 프로시 저는 입력 매개 변수를 허용하므로 여러 클라이언트가 다른 입력 데이터를 사용하여 단일 프로 시저를 네트워크를 통해 사용할 수 있습니다. 저장 프로시 저는 네트워크 트래픽을 줄이고 성능을 향상시킵니다. 저장 프로 시저를 수정하면 모든 클라이언트가 업데이트 된 저장 프로 시저를받습니다.

저장 프로 시저 작성 샘플

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

저장 프로 시저 사용의 장점

  • 저장 프로시 저는 모듈 식 프로그래밍을 허용합니다.

    프로 시저를 한 번 작성하여 데이터베이스에 저장 한 후 프로그램에서 여러 번 호출 할 수 있습니다.

  • 저장 프로시 저는 더 빠른 실행을 허용합니다.

    작업에 반복적으로 수행되는 많은 양의 SQL 코드가 필요한 경우 저장 프로 시저가 더 빠를 수 있습니다. 처음 실행될 때 구문 분석 및 최적화되며 저장 프로 시저의 컴파일 된 버전은 나중에 사용하기 위해 메모리 캐시에 남아 있습니다. 즉, 저장 프로 시저를 사용할 때마다 재분석하고 다시 최적화 할 필요가 없으므로 실행 시간이 훨씬 빨라집니다.

  • 저장 프로시 저는 네트워크 트래픽을 줄일 수 있습니다.

    수백 줄의 Transact-SQL 코드가 필요한 작업은 네트워크를 통해 수백 줄의 코드를 보내지 않고 프로 시저에서 코드를 실행하는 단일 문을 통해 수행 할 수 있습니다.

  • 저장 프로시 저는 데이터를보다 안전하게 보호합니다

    프로 시저의 명령문을 직접 실행할 권한이없는 경우에도 스토어드 프로 시저를 실행할 수있는 권한을 사용자에게 부여 할 수 있습니다.

    SQL Server에는 다양한 유형의 저장 프로 시저가 있습니다.

    • 시스템 저장 프로 시저
    • 사용자 정의 저장 프로 시저
    • 확장 저장 프로 시저
  • 시스템 저장 프로시 저는 마스터 데이터베이스에 저장되며 sp_접두사로 시작 합니다. 이 절차는 시스템 테이블에서 외부 응용 프로그램 호출을위한 SQL Server 기능을 지원하기 위해 다양한 작업을 수행하는 데 사용될 수 있습니다.

    예 : sp_helptext [StoredProcedure_Name]

  • 사용자 정의 저장 프로시 저는 일반적으로 사용자 데이터베이스에 저장되며 일반적으로 사용자 데이터베이스의 작업을 완료하도록 설계되었습니다. 이러한 절차 코딩을하는 동안 사용하지 않는sp_ 우리가 사용하는 경우 때문에 접두사를 sp_처음 접두사, 그것은 마스터 데이터베이스를 확인합니다 다음은 사용자 정의 데이터베이스에 온다.

  • 확장 저장 프로시 저는 DLL 파일에서 함수를 호출하는 프로 시저입니다. 요즘에는 확장 저장 프로 시저를 사용하지 않는 것이 더 나은 이유로 확장 저장 프로 시저가 더 이상 사용되지 않습니다.


답변

일반적으로 저장 프로시 저는 “SQL 함수”입니다. 그들은 가지고있다 :

-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID

이것은 T-SQL 중심의 예입니다. 저장 프로시 저는 대부분의 SQL 문을 실행하고 스칼라 및 테이블 기반 값을 반환 할 수 있으며 SQL 주입 공격을 막기 때문에보다 안전한 것으로 간주됩니다.


답변

이런 상황을 생각 해봐

  • 데이터가있는 데이터베이스가 있습니다.
  • 해당 중앙 데이터베이스에 액세스하는 데 필요한 여러 가지 응용 프로그램이 있으며 향후에는 일부 새로운 응용 프로그램도 있습니다.
  • 중앙 데이터베이스에 액세스하기 위해 인라인 데이터베이스 쿼리를 삽입하려는 경우 각 응용 프로그램의 코드 내에서 개별적으로 동일한 쿼리를 다른 응용 프로그램 코드 내에서 반복해서 복제해야합니다.
  • 이러한 상황에서는 저장 프로 시저 (SP)를 사용할 수 있습니다. 저장 프로 시저를 사용하면 여러 개의 공통 쿼리 (프로 시저)를 작성하여 중앙 데이터베이스와 함께 저장합니다.
  • 이제는 작업 중복이 발생하지 않으며 데이터 액세스 및 유지 관리가 중앙 집중식으로 수행됩니다.

노트:

  • 위의 상황에서 “모든 응용 프로그램과 상호 작용하기 위해 중앙 데이터 액세스 서버를 도입 할 수없는 이유는 무엇입니까?”
  • 이 접근 방식에 비해 SP의 주요 이점은 인라인 쿼리가있는 데이터 액세스 코드와 달리 SP가 사전 컴파일 된 명령문이므로 더 빠르게 실행됩니다. 그리고 네트워크를 통한 통신 비용은 최소가 될 것입니다.
  • 이와 반대로 SP는 데이터베이스 서버에 더 많은 부하를 추가합니다. 상황에 따라 문제가 될 경우 인라인 쿼리가있는 중앙 집중식 데이터 액세스 서버가 더 나은 선택입니다.

답변

저장 프로시 저는 주로 데이터베이스에서 특정 작업을 수행하는 데 사용됩니다. 예를 들어

  • 데이터에 대한 일부 비즈니스 로직에서 데이터베이스 결과 세트를 가져옵니다.
  • 한 번의 호출로 여러 데이터베이스 작업을 실행합니다.
  • 한 테이블에서 다른 테이블로 데이터를 마이그레이션하는 데 사용됩니다.
  • Java와 같은 다른 프로그래밍 언어를 호출 할 수 있습니다.

답변

저장 프로시 저는 단일 실행 계획으로 컴파일 된 SQL 문 그룹에 지나지 않습니다.

  1. 한 번만 만들고 n 번 호출하십시오.
  2. 네트워크 트래픽을 줄입니다

예 : 저장 프로 시저 작성

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
      SET NOCOUNT ON;

      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Employees
      WHERE EmployeeID = @EmployeeID
END
GO

저장 프로 시저를 변경하거나 수정하십시오.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT FirstName, LastName, BirthDate, City, Country
    FROM Employees
    WHERE EmployeeID = @EmployeeID
END
GO

저장 프로 시저를 삭제하거나 삭제하십시오.

DROP PROCEDURE GetEmployee