📜  SQL | PL/SQL 中的过程

📅  最后修改于: 2022-05-13 01:54:18.870000             🧑  作者: Mango

SQL | PL/SQL 中的过程


PL/SQL 是一种块结构语言,它使开发人员能够将 SQL 的强大功能与过程语句相结合。
PL/SQL 中的存储过程只不过是一系列可以存储在数据库目录中的声明性 SQL 语句。可以将过程视为函数或方法。它们可以通过触发器、其他过程或Java、 PHP等应用程序调用。
一个块的所有语句一次全部传递给 Oracle 引擎,这提高了处理速度并减少了流量。

好处:

  • 它们导致应用程序的性能改进。如果一个过程在单个连接中的应用程序中被频繁调用,则交付该过程的编译版本。
  • 它们减少了数据库和应用程序之间的流量,因为冗长的语句已经输入数据库,不需要通过应用程序一次又一次地发送。
  • 它们增加了代码的可重用性,类似于函数和方法在其他语言(如 C/C++ 和Java)中的工作方式。

缺点:

  • 存储过程会导致大量内存使用。数据库管理员应该决定一个上限,即有多少存储过程对于特定应用程序是可行的。
  • MySQL 不提供调试存储过程的功能。

创建存储过程的语法

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Comments --

CREATE PROCEDURE procedure_name
  = ,
  = ,
  = 

AS
BEGIN
-- Query --
END

GO

例子:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE GetStudentDetails
      @StudentID int = 0
AS
BEGIN
      SET NOCOUNT ON;
      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Students WHERE StudentID=@StudentID
END
GO

修改现有存储过程的语法

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Comments --

ALTER PROCEDURE procedure_name
  = ,
  = ,
  = 

AS
BEGIN
-- Query --
END

GO

例子:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetStudentDetails
      @StudentID int = 0
AS
BEGIN
      SET NOCOUNT ON;
      SELECT FirstName, LastName, City
      FROM Students WHERE StudentID=@StudentID
END
GO

删除过程的语法

DROP PROCEDURE procedure_name

例子:

DROP PROCEDURE GetStudentDetails