#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();