【问题标题】:Procedures in Bigquery with default parameters使用默认参数的 Bigquery 过程
【发布时间】:2022-11-16 09:08:30
【问题描述】:

我正在 Bigquery 中创建一个过程,我想向它传递一个参数,在本例中是表的名称。但是如果没有传递给过程,它会默认分配一个值。

这就是我目前拥有的:

CREATE OR REPLACE PROCEDURE `MY_DATASET.MY_PROCEDURE`(tableName STRING)
BEGIN

  DECLARE tableName STRING DEFAULT "MY_TABLE";
  DECLARE queryString STRING;

  SET queryString = SELECT * FROM MY_DATASET.tableName;

END;

这是它目前向我显示的错误:

Variable 'tableName' previously declared as an argument

如果我不向过程传递任何参数,则查询如下:

SELECT `MY_DATASET.MY_PROCEDURE`();

queryString = SELECT * FROM MY_DATASET.MY_TABLE;

但是如果我将一个表传递给过程,我需要它来创建以下查询:

SELECT `MY_DATASET.MY_PROCEDURE`('TABLE_TEST');

queryString = SELECT * FROM MY_DATASET.TABLE_TEST;

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以尝试并考虑以下可能的解决方法。

    由于在声明的参数上传递 NULL 值将导致 expects 1 argument(s), 0 provided 错误,您可以只传递一个空字符串然后使用 IF statement 来处理你想要的默认值如果传递了一个空字符串。

    CREATE OR REPLACE PROCEDURE `MY_DATASET.MY_PROCEDURE`(tableName STRING)
    BEGIN
    DECLARE table_Name STRING;
    DECLARE queryString STRING;
    
    SET table_Name = IF (tableName = '', 'MY_TABLE', tableName);
    
    SET queryString = " SELECT * FROM MY_DATASET."||table_Name||"";
    
    SELECT queryString;
    
    END
    

    使用空字符串参数输出:

    CALL SELECT `MY_DATASET.MY_PROCEDURE`('');
    

    使用传递的参数输出:

    CALL `MY_DATASET.MY_PROCEDURE`('TABLE_TEST');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2016-11-04
      • 2012-08-06
      • 2013-10-03
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      相关资源
      最近更新 更多