【问题标题】:Change the parameter each time and run the sql script每次更改参数并运行sql脚本
【发布时间】:2021-03-19 12:54:55
【问题描述】:

我对 sql 很陌生,一直在尝试使用以下脚本对其进行参数化。

这是我的代码:

select 
    dc.deviceid,
    dc.kernel_time,
    dc.crash_time,
    dc.crash_process,
    dps.start_time,
    dps.end_time,
    dps.start_kernel_time,
    dps.end_kernel_time,
    case
        when dc.kernel_time between dps.start_kernel_time and dps.end_kernel_time then 1
        when dc.crash_time between dps.start_time and dps.end_time then 2
        else 3
    end as flag,
    ROW_NUMBER () over (partition by dc.deviceid, dc.kernel_time, 
    dc.crash_time, dc.crash_process order by flag) row_num
from dummy.dummy_crashes dc
left outer join (select *
                 from dummy.dummy_power) as dps
           on dc.deviceid = dps.deviceid
           and ((dc.kernel_time between (dps.start_kernel_time + 10000) and (dps.end_kernel_time + 10000)) or (dc.crash_time between dps.start_time and dps.end_time))
order by dc.crash_time;

我需要通过将 start_kernel_timeend_kernel_time 更改为某个 int 参数值( 在这个例子中显示:10000) 每次。因此,我不想在代码中修改它,而是想用选择的 int 参数创建一个函数并运行这个脚本。那可能吗? 我真的不知道如何实现这一目标。

我的理想想法是这样的:

get_crashes(10000); <-- get records with adding int parameter (in start_kernel_time and end_kernel_time) as 10000

get_crashes(30000); <-- get records with adding int parameter as 30000 

get_crashes(80000); <-- get records with adding int parameter as 80000

我真的很想了解如何实现这一目标?

【问题讨论】:

    标签: sql postgresql parameters amazon-redshift


    【解决方案1】:

    我不能写评论,因为我没有 50rep,但这是我的答案:

    您可以使用要传递的值创建一个临时表,并使用简单的查询调用游标,例如:

    SELECT [value] FROM *temptable*
    

    之后,在光标内部只写带有临时表上面的单个值的脚本

    更新

    DECLARE
    cur CURSOR FOR select col1 from tempTable;
    test_cur RECORD;
    BEGIN
    open cur;
    LOOP
    fetch cur into test_cur;
    exit when test_cur = null;
    if test_cur.col1 IS NOT NULL then
    return next test_cur.col1;
    end if;
    END LOOP;
    close cur;
    END;
    

    请注意 - 我从不写 PostgreSQL,只是了解 SQL 并在互联网上找到代码,所以也许你需要查看文档。

    【讨论】:

    • 我不完全理解这一点。我得到了创建一个带有值的临时表的部分,但我将如何使用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2014-06-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多