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


298

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

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

답변:


243

저장 프로시 저는 몇 가지 방법으로 실행할 수있는 일련의 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 또는 다른 방법을 사용하면 많은 장점이 있습니다.


1
당신은 데이터를 읽고 저장 프로 시저 및 의미 ORM처럼 Entity FrameworkCRUD작업을?
shaijut

2
그러나 그것은 가능한 한 가지 방법입니다. 보고서 이외의 모든 것에 ORM을 사용합니다.
JoshBerke

저장 프로 시저에 대한 자세한 내용은 내 URL techflirt.com/mysql-stored-procedure-tutorial을
Ankur Kumar Singh

150

스토어드 프로시 저는 특수 태스크를 수행하는 데 사용되는 사전 컴파일 된 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).


1
이해하기 쉬운 예
HaFiz Umer

80

스토어드 프로시 저는 데이터베이스에서 작성되고 저장된 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 파일에서 함수를 호출하는 프로 시저입니다. 요즘에는 확장 저장 프로 시저를 사용하지 않는 것이 더 나은 이유로 확장 저장 프로 시저가 더 이상 사용되지 않습니다.


37

일반적으로 저장 프로시 저는 "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 주입 공격을 막기 때문에보다 안전한 것으로 간주됩니다.


16

이런 상황을 생각 해봐

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

노트:

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

9

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

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

7

저장 프로시 저는 단일 실행 계획으로 컴파일 된 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

6

저장 프로시 저는 데이터베이스 테이블에서 데이터를 검색하고 수정하고 데이터를 삭제하는 데 사용됩니다. SQL 데이터베이스에 데이터를 삽입, 업데이트 또는 삭제할 때마다 전체 SQL 명령을 작성할 필요가 없습니다.


4
  • 저장 프로시 저는 특정 작업을 수행하는 미리 컴파일 된 하나 이상의 SQL 문 집합입니다.

  • 저장 프로시 저는 다음을 사용하여 독립 실행 형이어야합니다. EXEC

  • 저장 프로시 저는 여러 매개 변수를 반환 할 수 있습니다

  • 저장 프로 시저를 사용하여 트랜잭션을 구현할 수 있습니다.


4

"다른 저장 프로 시저 란 무엇입니까?"는 이미 다른 게시물에 있습니다. 내가 게시 할 것은 저장 프로 시저를 사용하는 덜 알려진 방법 중 하나입니다. 그것은이다 grouping stored proceduresnumbering stored procedures.

구문 참조

여기에 이미지 설명을 입력하십시오

; number

동일한 이름의 프로 시저를 그룹화하는 데 사용되는 선택적 정수입니다. 하나의 DROP PROCEDURE 문을 사용하여 이러한 그룹화 된 프로 시저를 함께 삭제할 수 있습니다.

CREATE Procedure FirstTest 
(
    @InputA INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO

CREATE Procedure FirstTest;2
(
    @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

사용하다

exec FirstTest 10
exec FirstTest;2 20,30

결과

여기에 이미지 설명을 입력하십시오

또 다른 시도

CREATE Procedure SecondTest;2
(
     @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

결과

메시지 2730, 수준 11, 상태 1, 프로 시저 SecondTest, 줄 1 [배치 시작 줄 3] 이름이 같고 그룹 번호가 1 인 프로 시저가 현재 존재하지 않기 때문에 그룹 번호가 2 인 'SecondTest'프로 시저를 만들 수 없습니다. 데이터베이스. 먼저 CREATE PROCEDURE 'SecondTest'; 1을 실행해야합니다.

참고 문헌 :

  1. 숫자 구문으로 CREATE PROCEDURE
  2. SQL Server에서 번호가 매겨진 저장 프로 시저-techie-friendly.blogspot.com
  3. 저장 프로 시저 그룹화-sqlmag

주의

  1. 절차를 그룹화 한 후에는 개별적으로 삭제할 수 없습니다.
  2. 이 기능은 이후 버전의 Microsoft SQL Server에서 제거 될 수 있습니다.

0

저장 프로시 저는 명명 된 SQL 문 및 절차 논리의 모음입니다. 즉, 서버 데이터베이스에 컴파일, 확인 및 저장됩니다. 저장 프로시 저는 일반적으로 다른 데이터베이스 개체처럼 취급되며 서버 보안 메커니즘을 통해 제어됩니다.


0

DBMS에서 저장 프로시 저는 데이터베이스에 컴파일 된 형식으로 저장되어 여러 프로그램에서 공유 할 수 있도록 지정된 이름을 가진 일련의 SQL 문입니다.

저장 프로 시저를 사용하면 도움이 될 수 있습니다.

  1. 데이터에 대한 액세스 제어 제공 (최종 사용자는 데이터를 입력하거나 변경할 수는 있지만 절차를 작성할 수는 없음)

  2. 데이터 무결성 보장 (데이터는 일관된 방식으로 입력 됨)

  3. 생산성 향상 (저장 프로 시저 설명은 한 번만 작성하면 됨)


0

간단하게

저장 프로 시저가 있습니다 프로그램 저장 , 데이터베이스에 저장된 프로그램 / 기능.

각 저장된 프로그램에는 SQL 문으로 구성된 본문이 있습니다. 이 명령문은 세미콜론 (;) 문자로 구분 된 여러 명령문으로 구성된 복합 명령문 일 수 있습니다.

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;

0

SQL Server의 저장 프로시 저는 입력 매개 변수를 허용하고 여러 출력 매개 변수 값을 반환 할 수 있습니다. SQL Server에서는 데이터베이스에서 작업을 수행하고 호출 프로 시저 또는 배치에 상태 값을 반환하는 저장 프로 시저 프로그램 문입니다.

SQL Server에서 저장 프로 시저를 사용할 때의 이점

모듈 식 프로그래밍이 가능합니다. 그들은 더 빠른 실행을 허용합니다. 네트워크 트래픽을 줄일 수 있습니다. 보안 메커니즘으로 사용할 수 있습니다.

다음은 매개 변수를 가져 와서 쿼리를 실행하고 결과를 반환하는 저장 프로 시저의 예입니다. 특히, 스토어드 프로시 저는 BusinessEntityID를 매개 변수로 승인하고이를 사용하여 HumanResources.Employee 테이블의 기본 키와 일치시켜 요청 된 직원을 리턴합니다.

> create procedure HumanResources.uspFindEmployee    `*<<<---Store procedure name`*
@businessEntityID                                     `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId,              <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId     <<<---parameter used as criteria
end

나는 essential.com에서 이것을 배웠습니다 ... 매우 유용합니다.


0

저장 프로시 저는 서버에서 코드를 작성하는 데 도움이됩니다. 매개 변수를 전달하고 출력을 찾을 수 있습니다.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName

0

저장 프로 시저에서 명령문은 한 번만 작성되며 클라이언트와 서버 간의 네트워크 트래픽을 줄입니다. 또한 SQL 인젝션 공격을 피할 수 있습니다.

  • 지불 처리를 위해 응용 프로그램에서 타사 프로그램을 사용하는 경우 여기 데이터베이스는 필요한 정보와이 타사가 승인 한 활동 만 노출해야합니다.이를 통해 스토어드 프로 시저를 사용하여 권한을 설정하여 데이터 기밀성을 확보 할 수 있습니다.
  • 테이블 업데이트는 대상 테이블에만 수행해야하지만 다른 테이블은 업데이트하지 않아야합니다.이를 통해 트랜잭션 처리 및 오류 처리를 사용하여 데이터 무결성을 달성 할 수 있습니다.
  • 데이터 유형이있는 하나 이상의 항목을 리턴하려면 출력 매개 변수를 사용하는 것이 좋습니다.
  • 저장 프로 시저에서는 반환해야 할 모든 것에 대해 출력 매개 변수를 사용합니다. 정수 데이터 유형 만있는 하나의 항목 만 리턴하려면 리턴 값을 사용하는 것이 좋습니다. 실제로 리턴 값은 저장 프로 시저의 성공 또는 실패를 알리기위한 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.