首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snowflake Javascript UDTF中的动态where子句

Snowflake Javascript UDTF中的动态where子句
EN

Stack Overflow用户
提问于 2021-07-07 20:20:23
回答 2查看 55关注 0票数 0

我正在尝试写一个UDTF与一些复杂的SQL查询,但不能这样做,因为我不知道Javascript。

我正在重复我需要帮助的案例。有人可以为此写一个UDTF,我可以参考我的用例吗?

代码语言:javascript
复制
create table emp(  
  empno    number(4,0),  
  ename    varchar(10),  
  job      varchar2(9),  
  mgr      number(4,0),  
  hiredate date,  
  sal      number(7,2),  
  comm     number(7,2),  
  deptname varchar(20)
);

我想把下面的sql查询放在UDTF中。UDTF将有两个参数'hiredate‘和'deptname’。我想让where子句在查询中成为动态的,这意味着用户可以传递hiredate或deptname,或者两者都传递。返回的输出应该是table。以下示例是针对SQL UDTF的,但我相信使用Javascript UDTF可以满足我的要求

代码语言:javascript
复制
CREATE OR REPLACE SECURE FUNCTION FN_EMP (PARAM_HIREDATE DATE, PARAM_DEPTNAME VARCHAR(20))
  RETURNS TABLE (EMPNO NUMBER,  ENAME VARCHAR(10))
  AS
  $$
    select EMPNO, ENAME 
    from emp
    where hiredate = PARAM_HIREDATE --these where clause should be applied dynamically
        and deptname = PARAM_DEPTNAME
  $$
  ;

请告诉我如何在JavaScript UDF(不是UDF)中使用If else。或者启发我如何才能满足我的需求。有人可以为此写一个UDTF,我可以参考我的用例吗?

我已经看过了3个回调函数文档,但不知道如何在Javascript UDTF中执行SQL语句。

我的需求有点类似于此,但不知道如何在Javascript UDTF中执行SQL。https://community.snowflake.com/s/question/0D50Z00009Fye3YSAR/have-you-got-an-example-of-a-udf-in-javascript-that-returns-a-table

EN

回答 2

Stack Overflow用户

发布于 2021-07-08 00:45:52

“厨房水槽”功能:

代码语言:javascript
复制
CREATE OR REPLACE SECURE FUNCTION FN_EMP (PARAM_HIREDATE DATE,
                                          PARAM_DEPTNAME VARCHAR(20))
  RETURNS TABLE (EMPNO NUMBER,  ENAME VARCHAR(10))
  AS
  $$
    select EMPNO, ENAME 
    from emp
    where (hiredate = PARAM_HIREDATE OR PARAM_HIREDATE IS NULL)
      and (deptname = PARAM_DEPTNAME OR PARAM_DEPTNAME IS NULL)
  $$
  ;

呼叫:

代码语言:javascript
复制
SELECT * FROM TABLE(FN_EMP(NULL::DATE,NULL::STIRNG));  -- no params

SELECT * FROM TABLE(FN_EMP(NULL::DATE,'<deparment>'));  -- only deparment

SELECT * FROM TABLE(FN_EMP(CURRENT_DATE, '<deparment>') -- both
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 15:07:41

@Lukasz Szozda我相信如果没有办法在SQL UDTF的输入参数中传递NULL,那么下面的方法将会起作用。但当用户不想传递任何参数时,我将不得不要求用户将其默认为'NA‘。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION FN_EMP (PARAM_HIREDATE VARCHAR(50),
                                          PARAM_DEPTNAME VARCHAR(20))
  RETURNS TABLE (EMPNO NUMBER,  ENAME VARCHAR(10))
  AS
  $$
    select EMPNO, ENAME 
    from emp
    where (hiredate = TO_DATE(PARAM_HIREDATE) OR PARAM_HIREDATE = 'NA')
      and (deptname = PARAM_DEPTNAME OR PARAM_DEPTNAME = 'NA')
  $$
  ;
  
SELECT * FROM TABLE(FN_EMP('NA','NA'));  -- no params

SELECT * FROM TABLE(FN_EMP('NA','<deparment>'));  -- only deparment

SELECT * FROM TABLE(FN_EMP('2021-07-08', '<deparment>')); -- both
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68285943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档