如何在存储过程中创建字符串列表变量以及如何在另一个查询中使用它?

Posted

技术标签:

【中文标题】如何在存储过程中创建字符串列表变量以及如何在另一个查询中使用它?【英文标题】:How to create a variable of list of strings in stored procedure and how to use it in another query? 【发布时间】:2019-03-24 06:59:05 【问题描述】:

我想在一个变量中保存一个字符串列表,然后我想在另一个查询中使用它。

这是我的存储过程:

CREATE PROCEDURE store_validated_sku_id
    (variable_sku_id OUT VARCHAR2)
AS
BEGIN
    SELECT vsku.SKU_ID INTO variable_sku_id 
    FROM CHELSEA_prdcataloga.vs_sku_discont_details_test discontd
    JOIN CHELSEA_prdcataloga.vsx_dcs_sku vsku ON discontd.SWAP_SKU = vsku.JDA_SKU_ID 
    JOIN CHELSEA_prdcataloga.auto_ship_view bcc ON bcc.sku_id = vsku.SKU_ID 
    WHERE vsku.web_eligible = 1 
      AND vsku.discontinued = 0 
      AND bcc.auto_ship_eligible = 1;

    dbms_output.put_line('variable_sku_id = '|| variable_sku_id);
END store_validated_sku_id;

我希望 variable_sku_id 成为字符串列表并希望在另一个查询中使用它。

【问题讨论】:

查看LISTAGG函数。 感谢@TenG,它成功了。我用 SELECT LISTAGG(vsku.SKU_ID,',') 替换了 SELECT vsku.SKU_ID INTO variable_sku_id 组内(按 vsku.SKU_ID 排序) INTO variable_sku_id 【参考方案1】:
create procedure store_validated_sku_id(variable_sku_id OUT VARCHAR2)
 as
BEGIN
  SELECT listagg(vsku.sku_id, ',') within group(order by vsku.sku_id)
    INTO variable_sku_id
    FROM chelsea_prdcataloga.vs_sku_discont_details_test discontd
    JOIN chelsea_prdcataloga.vsx_dcs_sku vsku ON discontd.swap_sku = vsku.jda_sku_id
    JOIN chelsea_prdcataloga.auto_ship_view bcc ON bcc.sku_id = vsku.sku_id
   WHERE vsku.web_eligible = 1        
     AND vsku.discontinued = 0
     AND bcc.auto_ship_eligible = 1;

  dbms_output.put_line('variable_sku_id = ' || variable_sku_id);

END store_validated_sku_id;

【讨论】:

以上是关于如何在存储过程中创建字符串列表变量以及如何在另一个查询中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在dojo工具包的Current JS文件中使用在另一个JS文件中创建的Dialog变量

如何在一个类中创建 CoreData 实体并在另一个类中访问?

如何在存储过程中创建视图

在 MySQL 中创建表变量

如何在打开游标之前在存储过程中创建一个临时表?

如何从 python 在 mysql 中创建存储过程?