我正在使用创建视图工具oracle SQL 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:“客户”。“姓氏”:无效的标识符
如何在我的select语句的那部分调用函数?我似乎找不到在涉及连接的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
但是,类似的东西对我也不起作用。我会很感激任何人能给我的帮助。
答案 0 :(得分:1)
函数不是允许对其进行句号限定的表的属性。但是,其他对象之间的函数和表共享相同的名称空间。如docs中所述:
以下架构对象共享一个名称空间:
- 表格
- 观看次数
- 序列
- 私人同义词
- 独立程序
- 独立存储功能
- 包裹
- 材料化视图
- 用户定义的类型
因此,只需隐式定义架构即可删除searchSvc = searchSvc.SortBy(elastic.NewFieldSort("created_at").Asc())
限定符:
CUSTOMER.
或者,以以下方式显式限定所有表和函数对象上的模式名称:SELECT SALE.SaleID,
SALE.SaleDate,
LastNameFirst(LastName, FirstName) AS Customer_Name, ...
或"schema"."table"."column"
:
"schema"."function"