Перейти к содержимому

Как удалить хранимую процедуру в sql

  • автор:

Как удалить хранимую процедуру в sql

Procedures are defined using PL/SQL. Refer to Oracle Database PL/SQL Language Reference for complete information on creating, altering, and dropping procedures.

Use the DROP PROCEDURE statement to remove a standalone stored procedure from the database. Do not use this statement to remove a procedure that is part of a package. Instead, either drop the entire package using the DROP PACKAGE statement, or redefine the package without the procedure using the CREATE PACKAGE statement with the OR REPLACE clause.

The procedure must be in your own schema or you must have the DROP ANY PROCEDURE system privilege.

Specify the schema containing the procedure. If you omit schema , then Oracle Database assumes the procedure is in your own schema.

Specify the name of the procedure to be dropped.

When you drop a procedure, Oracle Database invalidates any local objects that depend upon the dropped procedure. If you subsequently reference one of these objects, then the database tries to recompile the object and returns an error message if you have not re-created the dropped procedure.

Dropping a Procedure: Example

The following statement drops the procedure remove_emp owned by the user hr and invalidates all objects that depend upon remove_emp :

Как удалить процедуру или функцию из базы данных

При разработке инструментов, которые взаимодействуют с разными СУБД, приходится учитывать много нюансов, потому что одни и теже вещи реализованы по-разному и стандарт SQL поддерживается по-разному. Если рассмотреть достаточное количество СУБД, то окажется, что нет универсального способа удалить функцию или процедуру.

В статье рассматриваются только реляционные СУБД.

PostgreSQL

В PostgreSQL можно создавать два типа функций: обычные и агрегатные. Процедуры можно создавать начиная с 11 версии, выпущенной в конце 2018 года. Поддержка функций, в том числе и агрегатных, существует с ранних версий.

Удалить любую функцию или процедуру можно с помощью запроса DROP ROUTINE . Синтаксис запроса следующий:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Могут существовать функции и процедуры с одинаковыми именами, но разными аргументами. Создание функций с одинаковым именами называется перегрузкой функций. Аргументы нужно указывать, чтобы устранить неоднозначность при удалении процедуры или функции. Если функция или процедура не имеет перегрузок, то при ее удалении можно не указывать типы аргументов:

Существуют отдельные запросы для удаления агрегатных функций, обычных функций и процедур соответственно:

Синтаксис этих запросов такой же как у DROP ROUTINE .

Запросы DROP ROUTINE и DROP PROCEDURE появились вместе с процедурами в 11 версии. Для удаления функций в ранних версиях нужно использовать запросы DROP AGGREGATE и DROP FUNCTION .

В запросе DROP AGGREGATE нужно обязательно указывать типы аргументов.

В запросе DROP FUNCTION типы аргументов необязательны для не перегруженных функций, начиная с версии 10 (дата релиза: 2017-10-05).

Oracle

Для удаления процедур в Oracle используется следующий запрос:

Для удаления функций аналогичный запрос:

Функции и процедуры могут быть самостоятельными, а могут быть объединены в коллекцию с помощью пакета. Удалить функции и процедуры из пакета можно только удалением или пересозданием пакета.

Самостоятельные функции и процедуры нельзя перегружать, поэтому при удалении не нужно указывать типы аргументов.

MySQL and MariaDB

Для удаления процедур в MySQL и MariaDB используется следующий запрос:

Для удаления функций аналогичный запрос:

MySQL и MariaDB не поддерживают перегрузку процедур и функций, поэтому при удалении указывается только имя.

В MariaDB начиная с версии 10.3.3 (23 декабря 2017) можно создавать агрегатные функции. Агрегатные функции удаляются, как и обычные, запросом DROP FUNCTION .

SQLite

SQLite не поддерживает создание процедур и функций, соответственно нет возможности их удалить.

MS SQL Server

В MS SQL Server для удаления процедур, обычных функций и агрегатных функций используются следующие запросы соответственно:

MS SQL Server не поддерживает перегрузку процедур и функций, поэтому при удалении указывается только имя.

Агрегатные функции в MS SQL Server, в отличии от процедур и обычных функций, только лишь ссылаются на внешнюю реализацию.

Netezza

В Netezza для удаления процедур, обычных функций и агрегатных функций используются следующие запросы соответственно:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Типы аргументов нужны, так как Netezza поддерживает перегрузку процедур и функций. Типы аргументов обязательны даже если нет перегрузок. Если аргументов нет, то должны быть пустые скобки.

Пример создания и удаления процедуры в Netezza:

Функции (в том числе аггрегатные), в отличии от процедур, только лишь ссылаются на внешнюю реализацию.

Informix

В Informix для удаления процедур, обычных функций и агрегатных функций используются следующие запросы соответственно:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Типы аргументов не нужно указывать для агрегатных функций.

Процедуры можно перегружать, поэтому одно имя может быть у нескольких процедур. Чтобы их различать, можно, при создании процедуры, задать ей уникальное имя. То же справедливо для обычных функций. Уникальное имя можно использовать для удаления процедур и обычных функций с помощью следующих запросов:

Если процедура или обычная функция не имеет перегрузок, то при их удалении можно не указывать типы аргументов:

Следующий запрос позволяет удалить процедуру или обычную функцию:

или в случае отсутствия перегрузок:

Такой запрос пригодится, когда неизвестно, что требуется удалить, процедуру или функцию.

Кроме того, для удаления можно использовать уникальное имя:

IBM Db2

В IBM Db2 для удаления процедур и функций используются следующие запросы соответственно:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Процедуры можно перегружать, поэтому одно имя может быть у нескольких процедур. Чтобы их различать, можно, при создании процедуры, задать ей уникальное имя. То же справедливо для функций. Уникальное имя можно использовать для удаления процедур и функций с помощью следующих запросов:

Если процедура или функция не имеет перегрузок, то при ее удалении можно не указывать типы аргументов:

AWS Athena

Athena не поддерживает создание процедур и функций, соответственно нет возможности их удалить.

Teradata

В Teradata для удаления процедур и функций используются следующие запросы соответственно:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Teradata позволяет перегружать функции (но не процедуры). При перегрузке, в запросе CREATE FUNCTION, кроме имени функции, обязательно нужно указать уникальное имя функции. Функцию можно удалить, используя уникальное имя, с помощью следующего запроса:

Если функция не имеет перегрузок, то при ее удалении можно не указывать типы аргументов:

Teradata поддерживает макросы, которые чем-то похожи на процедуры. Для удаления макросов используется следующий запрос:

Vertica

Vertica позволяет создавать внешние процедуры (запрос CREATE PROCEDURE ), которые просто ссылаются на внешний исполняемый файл. Хранимые процедуры не поддреживается.

Для удаления процедур используется следующий запрос:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Процедуры можно перегружать. Типы аргументов обязательны, даже если процедура не имеет перегрузок.

Vertica поддерживает большое количество типов функций:

  • Агрегатные функции ( CREATE AGGREGATE ),
  • Аналитические функции ( CREATE ANALYTIC FUNCTION ),
  • Load filter functions ( CREATE FILTER )
  • Load parser functions ( CREATE PARSER )
  • Load source functions ( CREATE SOURCE )
  • Функции трансформации ( CREATE TRANSFORM FUNCTION )
  • Скалярные функции ( CREATE FUNCTION )
  • SQL-функции ( CREATE FUNCTION )

В скобках указаны запросы, с помощью которых создаются функции.

Все функции, кроме SQL-функций, имеют внешнюю реализацию, то есть ссылаются на внешнюю динамическую библиотеку.

SQL-функции хранятся в базе, но могут использовать только простые выражения.

Для каждого типа функций, кроме аналитических, есть соответсвующий запрос для удаления функций:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Запросом DROP FUNCTION можно удалить любую функцию, кроме агрегатной и функции трансформации. Функции можно перегружать, поэтому для удаления нужно указывать типы аргументов. Они обязательны даже если функция не имеет перегрузок.

SAP HANA

В SAP HANA для удаления процедур и функций используются следующие запросы соответственно:

Перегрузка процедур и функций не поддерживается, поэтому при удалении указывается только имя.

Apache Impala

Impala позволяет создавать функции (скалярные и агрегатные) с внешней реализацией. Скалярные функции могут быть реализованы на языках C++ и Java. Агрегатные — только на C++.

Для удаления агрегатных функций используется следующий запрос:

  • типы_аргументов — типы аргументов, перечисленные через запятую.

Запрос для удаления скалярной функции зависит от языка реализации.

Для удаления скалярных функций на C++ используется следующий запрос:

Для удаления скалярных функций на Java используется следующий запрос:

Impala позволяет перегружать функции, поэтому при удалении нужно указывать типы аргументов. Функции на Java перегружаются средствами самой Java, поэтому аргументы не нужно указывать.

Более широкие возможности по использованию процедур и функций предоставляет HPL/SQL.

Apache Hive

Hive позволяет создавать функции с внешней реализаций на Java. Функции могут быть временными и постоянными. Временные функции существуют только в текущей сессии.

Для удаления постоянных функций используется следующий запрос:

Для удаления временных функций используется следующий запрос:

Hive позволяет создавать временные макросы, которые могут содержать простые выражения. Для удаления макросов используется следующий запрос:

Более широкие возможности по использованию процедур и функций предоставляет HPL/SQL.

MySQL DROP PROCEDURE

Summary: in this tutorial, you will learn how to use the MySQL DROP PROCEDURE statement to drop a stored procedure.

Introduction to the MySQL DROP PROCEDURE statement

The DROP PROCEDURE statement deletes a stored procedure created by the CREATE PROCEDURE statement.

The following shows the syntax of the DROP PROCEDURE statement:

  • First, specify the name of the stored procedure that you want to remove after the DROP PROCEDURE keywords.
  • Second, use IF EXISTS option to conditionally drop the stored procedure if it exists.

When you drop a procedure that does not exist without using the IF EXISTS option, MySQL issues an error. In this case, if you use the IF EXISTS option, MySQL issues a warning instead.

Note that you need to have the ALTER ROUTINE privilege of the stored procedure in order to remove it.

MySQL DROP PROCEDURE examples

Let’s take some examples of using the DROP PROCEDURE statement.

1) Using MySQL DROP PROCEDURE example

First, create a new stored procedure that returns employee and office information:

Second, use the DROP PROCEDURE to delete the GetEmployees() stored procedure:

2) Using MySQL DROP PROCEDURE with the IF EXISTS option example

The following example drops a stored procedure that does not exist:

MySQL issued the following error:

This statement drops the same non-existing stored procedure, but with IF EXISTS option:

This time MySQL issued a warning.

The statement SHOW WARNINGS shows the warning:

Here is the output:

Dropping a stored procedure using MySQL Workbench

This statement creates a new stored procedure named GetPayments() that returns the customer and payment information:

To drop the stored procedure using MySQL Workbench, you follow these steps:

First, right-click the name of the stored procedure that you want to remove and choose Drop Stored Procedure… option.

MySQL Workbench will display a confirmation window.

Second, click Review SQL to review the SQL statement that MySQL Workbench will apply to the database, or click the Drop Now if you want to immediately remove the stored procedure.

Third, review the SQL code and click the Execute button to drop the stored procedure.

Как удалить хранимую процедуру в sql

DROP PROCEDURE removes the definition of one or more existing procedures. To execute this command the user must be the owner of the procedure(s). The argument types to the procedure(s) usually must be specified, since several different procedures can exist with the same name and different argument lists.

Parameters

Do not throw an error if the procedure does not exist. A notice is issued in this case.

The name (optionally schema-qualified) of an existing procedure.

The mode of an argument: IN , OUT , INOUT , or VARIADIC . If omitted, the default is IN (but see below).

The name of an argument. Note that DROP PROCEDURE does not actually pay any attention to argument names, since only the argument data types are used to determine the procedure’s identity.

The data type(s) of the procedure’s arguments (optionally schema-qualified), if any. See below for details.

Automatically drop objects that depend on the procedure, and in turn all objects that depend on those objects (see Section 5.14).

Refuse to drop the procedure if any objects depend on it. This is the default.

Notes

If there is only one procedure of the given name, the argument list can be omitted. Omit the parentheses too in this case.

In PostgreSQL , it’s sufficient to list the input (including INOUT ) arguments, because no two routines of the same name are allowed to share the same input-argument list. Moreover, the DROP command will not actually check that you wrote the types of OUT arguments correctly; so any arguments that are explicitly marked OUT are just noise. But writing them is recommendable for consistency with the corresponding CREATE command.

For compatibility with the SQL standard, it is also allowed to write all the argument data types (including those of OUT arguments) without any argmode markers. When this is done, the types of the procedure’s OUT argument(s) will be verified against the command. This provision creates an ambiguity, in that when the argument list contains no argmode markers, it’s unclear which rule is intended. The DROP command will attempt the lookup both ways, and will throw an error if two different procedures are found. To avoid the risk of such ambiguity, it’s recommendable to write IN markers explicitly rather than letting them be defaulted, thus forcing the traditional PostgreSQL interpretation to be used.

The lookup rules just explained are also used by other commands that act on existing procedures, such as ALTER PROCEDURE and COMMENT ON PROCEDURE .

Examples

If there is only one procedure do_db_maintenance , this command is sufficient to drop it:

Given this procedure definition:

any one of these commands would work to drop it:

However, the last example would be ambiguous if there is also, say,

Compatibility

This command conforms to the SQL standard, with these PostgreSQL extensions:

The standard only allows one procedure to be dropped per command.

The IF EXISTS option is an extension.

The ability to specify argument modes and names is an extension, and the lookup rules differ when modes are given.

See Also

Prev Up Next
DROP POLICY Home DROP PUBLICATION

Submit correction

If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Car Rental HPN Inside the Terminal