Использование функции в операторе выбора с несколькими таблицами при создании представления - PullRequest
0 голосов
/ 14 ноября 2018

Я использую Oracle Oracle Developer, инструмент создания представления. У меня есть функция с именем LastNameFirst, которую я хочу использовать, чтобы реорганизовать имя / фамилию клиента так, чтобы фамилия была первой.

SELECT SALE.SaleID,SALE.SaleDate, CUSTOMER.LastNameFirst(LastName,FirstName), 
SALE_ITEM.SaleItemID,SALE_ITEM.ItemID,ITEM.ItemDescription, ITEM.ItemPrice

FROM SALE_ITEM
INNER JOIN SALE on SALE.SaleID = SALE_ITEM.SaleID
INNER JOIN ITEM on ITEM.ItemID = SALE_ITEM.ItemID
INNER JOIN CUSTOMER on CUSTOMER.CustomerID = SALE.CUSTOMERID;

Я получаю ошибку: ORA-00904: «ЗАКАЗЧИК». «LASTNAMEFIRST»: неверный идентификатор

Как мне вызвать функцию в этой части моего оператора select? Я не могу найти какие-либо примеры функций, вызываемых в операторах выбора, где используются объединения, кроме как каким-либо образом использовать «перекрестное применение» или «внешнее применение». Я понимаю (я думаю), что синтаксис

SELECT 'tableName'.'columnName'

и я знаю, что моя функция не является столбцом, и именно поэтому я получаю эту ошибку. Но я действительно не уверен, как настроить код. Я попытался изменить его на что-то вроде:

SELECT SALE.SaleID,SALE.SaleDate,CUSTOMER.LastName, CUSTOMER.FirstName AS LastNameFirst(LastName,FirstName),SALE_ITEM.SaleItemID,SALE_ITEM.ItemID,ITEM.ItemDescription, ITEM.ItemPrice

Но ничего подобного у меня тоже не получалось. Буду признателен за любую помощь, которую кто-нибудь может мне дать

1 Ответ

0 голосов
/ 14 ноября 2018

Функции не являются свойствами таблиц, для которых разрешено задавать период. Однако функции и таблицы среди других объектов имеют одно и то же пространство имен. Как упомянуто в документах :

Следующие объекты схемы совместно используют одно пространство имен:

  • Таблица
  • Просмотры
  • Последовательность
  • Частные синонимы
  • Автономные процедуры
  • Автономные сохраненные функции
  • Пакеты
  • Материализованные представления
  • Пользовательские типы

Поэтому просто удалите квалификатор CUSTOMER., поскольку схема неявно определена:

SELECT SALE.SaleID, 
       SALE.SaleDate, 
       LastNameFirst(LastName, FirstName) AS Customer_Name, ...

Кроме того, можно явно указать имя схемы для всех объектов таблиц и функций следующим образом: "schema"."table"."column" или "schema"."function":

SELECT myschema.SALE.SaleID, 
       myschema.SALE.SaleDate, 
       myschema.LastNameFirst(myschema.CUSTOMER.LastName, 
                              myschema.CUSTOMER.FirstName) AS Customer_Name, ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...