Есть ли способ получить имя функции или процедуры BigQuery внутри функции или процедуры?

#google-cloud-platform #google-bigquery

#google-cloud-platform #google-bigquery

Вопрос:

Я искал в Google и здесь ответ на этот вопрос и ничего не нашел.

Я хочу иметь возможность делать что-то вроде:

 DECLARE thisName string;
SET thisName = CurrentProcedure();
  

Комментарии:

1. пока не ясно — пожалуйста, расскажите о вашем варианте использования — как вы планируете это использовать?

Ответ №1:

Невозможно получить имя функции, но приведенная ниже процедура может помочь вам получить имя процедуры из стека вызовов.

Это немного глупо, но нет способа получить стек вызовов без создания и перехвата исключения:

 -- Returns name of the procedure which calls this procedure. 
-- Returns NULL if called from top level of a script (not from a procedure).
CREATE OR REPLACE PROCEDURE yourDataset.CurrentProcedure(OUT name STRING)
BEGIN
RAISE USING MESSAGE = 'error on purpose';
EXCEPTION WHEN ERROR THEN
  IF ARRAY_LENGTH(@@error.stack_trace) >= 2 THEN
    SET name = @@error.stack_trace[OFFSET(1)].location;
  END IF;
END;

CREATE OR REPLACE PROCEDURE yourDataset.yourWorkProcedure()
BEGIN
  DECLARE name STRING;
  CALL yourDataset.CurrentProcedure(name);
  SELECT name;
END;

CALL yourDataset.yourWorkProcedure();