Ошибка процедуры SQL - PullRequest
       10

Ошибка процедуры SQL

0 голосов
/ 06 апреля 2011

Превратился в процедуру, получая синтаксическую ошибку в «ПРОЦЕДУРЕ», есть идеи?

CREATE PROCEDURE performance_Report
 @startDate DATE,
 @endDate DATE
AS
    SELECT Salesrep.Name, SUM(OrderLine.Quantity) AS Total_Sold, SUM(OrderLine.UnitSellingPrice * Orderline.Quantity) AS Total_Value
    FROM SalesRep, OrderLine, ShopOrder
    WHERE ShopOrder.SalesRepID = SalesRep.SalesRepID
    AND OrderLine.ShopOrderID = ShopOrder.ShopOrderID
    AND ShopOrder.OrderDate BETWEEN @startDate AND endDate
    GROUP BY SalesRep.SalesRepID, SalesRep.Name
    ORDER BY Total_Value DESC;

Ответы [ 6 ]

2 голосов
/ 06 апреля 2011

PostgreSQL не имеет "ПРОЦЕДУРА СОЗДАНИЯ". сообщается , что большинство необходимых вам хранимых процедур в других базах данных может быть выполнено в PostgreSQL с помощью CREATE FUNCTION .

1 голос
/ 06 апреля 2011

Нет, вы не можете этого сделать. Вы хотите, чтобы ваше представление приводило к агрегации по SalesRep.Name. Что вы хотите сделать, это отфильтровать эти суммы. У вас есть два варианта:

  1. Создание хранимой процедуры вместо представления. Таким образом, вы можете использовать начальную и конечную даты в качестве входных параметров для фильтрации.
  2. Ни в коем случае не создавайте структуру БД, просто используйте запрос и ваш исходный код заполняет параметры.

EDIT

Итак, вы изменили вопрос, и теперь вы хотите создать хранимую процедуру в PostgreSql. Возможно, вы захотите взглянуть на это: Основное введение в хранимые процедуры Postgres . Не торопитесь, чтобы прочитать это, знание, полученное в процессе, несомненно, будет полезно. И, проходя через это, вы можете переоценить и подумать, что вам действительно не нужны такие функциональные возможности для простого запроса, такого как этот. Удачи.

0 голосов
/ 05 февраля 2019

CREATE PROCEDURE была введена в PostgreSQL в версии 11, поэтому, если вы используете более раннюю версию, вы получите ERROR: syntax error at or near "PROCEDURE"

0 голосов
/ 06 апреля 2011

У вас есть AND ShopOrder.OrderDate BETWEEN @startDate AND endDate Не должно ли это быть AND ShopOrder.OrderDate BETWEEN @startDate AND @endDate?

CREATE PROCEDURE performance_Report
 @startDate DATE,
 @endDate DATE
AS
    SELECT Salesrep.Name, SUM(OrderLine.Quantity) AS Total_Sold, SUM(OrderLine.UnitSellingPrice * Orderline.Quantity) AS Total_Value
    FROM SalesRep, OrderLine, ShopOrder
    WHERE ShopOrder.SalesRepID = SalesRep.SalesRepID
    AND OrderLine.ShopOrderID = ShopOrder.ShopOrderID
    AND ShopOrder.OrderDate BETWEEN @startDate AND @endDate
    GROUP BY SalesRep.SalesRepID, SalesRep.Name
    ORDER BY Total_Value DESC;

Иначе работает ли этот запрос, если вы полностью удалите эту строку, не будучи хранимой процедурой?

0 голосов
/ 06 апреля 2011

Вы уверены, что не хотели использовать CREATE FUNCTION:

CREATE FUNCTION performance_Report(date, date)
0 голосов
/ 06 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...