标签: table-functions

为什么表值函数的性能优于select direct语句?

一只忙碌的猫

我使用AdventureWorks2012进行测试.和我的问题:为什么SELECT语句直接性能低于表值函数.我只将SELECT statemnt放入表值函数和完全相反的性能.

CREATE FUNCTION [dbo].[atest1]
(
    @iBusinessEntityID  INT
)
RETURNS @t TABLE
(
    [BusinessEntityID]  INT
  , [NationalIDNumber]  NVARCHAR(15)
  , [JobTitle]          NVARCHAR(50)
)
AS
    BEGIN
        INSERT INTO @t
               SELECT 
                   [e].[BusinessEntityID]
                 , [e].[NationalIDNumber]
                 , [e].[JobTitle]
               FROM [HumanResources].[Employee] [e]
               INNER JOIN [Person].[Person] [p]
                    ON [p].[BusinessEntityID] = [e].[BusinessEntityID]
               WHERE [e].[BusinessEntityID] = @iBusinessEntityID;
        RETURN;
    END;

--TEST PERFORMANCE
SELECT 
    *
FROM [dbo].[atest1](5);
GO
SELECT 
    [e].[BusinessEntityID]
  , [e].[NationalIDNumber]
  , [e].[JobTitle]
FROM [HumanResources].[Employee] [e]
INNER JOIN [Person].[Person] [p]
     ON [p].[BusinessEntityID] = [e].[BusinessEntityID]
WHERE [e].[BusinessEntityID] = 5;
Run Code Online (Sandbox Code Playgroud)

sql-server user-defined-functions inline-functions table-functions

4
推荐指数
1
解决办法
86
查看次数

有没有办法与案件联系

有没有办法与案件联系?

就像是

select * from abba 
   case when a=b then 
      join acdc on abba.id=acdc.id
   when b=c then 
      join bebop on abba.id=bebop.id 
   end
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

最好的问候乔

sql-server function sql-server-2000 table-functions

1
推荐指数
1
解决办法
52
查看次数

在PL/SQL中,如何从用户定义函数返回查询结果?

我从SQL Server来到Oracle 11g,我正在尝试使用SQL Developer创建一个简单的函数(getIDs),它将返回一个查询结果(SELECT id FROM employee).我在互联网上找到的任何东西似乎都没有用.这是我正在尝试的代码:

test_pkg:

CREATE OR REPLACE PACKAGE test_pkg AS 

    TYPE number_table IS TABLE OF NUMBER;

    FUNCTION getIDs RETURN number_table;

END TEST_PKG;
Run Code Online (Sandbox Code Playgroud)

test_pkg正文:

CREATE OR REPLACE PACKAGE BODY test_pkg AS

    FUNCTION getIDs RETURN number_table AS
        ids number_table;
    BEGIN
        SELECT id  BULK COLLECT INTO ids 
        FROM employee;
        RETURN ids;
    END getIDs;

END test_pkg;
Run Code Online (Sandbox Code Playgroud)

SQL Developer工作表:

SELECT * 
FROM TABLE(test_pkg.getIDs());

-- The above gives 
-- ORA-00902: invalid datatype


DECLARE
    nums test_pkg.number_table;
BEGIN
    SELECT column_value BULK COLLECT INTO nums …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle-sqldeveloper table-functions

1
推荐指数
1
解决办法
413
查看次数