Хранимая процедура Snowflake SQL не работает

Я пытаюсь создать хранимую процедуру SQL в Snowflake (Snowsight), но выдает ошибку во время выполнения. Не могу определить в чем проблема.

Я получаю эту ошибку:

неверный идентификатор «C_KEY_REC.KEY_NM»

Кто-нибудь может помочь? Я новичок в этом, и мне придется использовать хранимую процедуру SQL. Не получил никаких разрешений от Google.

Ниже приведен макет того, что у меня есть:

CREATE OR REPLACE TABLE KEY_TBL
(
     key_nm         VARCHAR
    ,key_val        VARCHAR
    ,active_yn      VARCHAR
);

INSERT INTO KEY_TBL(key_nm, key_val, active_yn )
VALUES
     ('KEY_NAME_1','KEY_VAL_1', 'Y')
    ,('KEY_NAME_2','KEY_VAL_2', 'Y')
;

CREATE OR REPLACE TABLE LOOP_CHK
(
     key_nm         VARCHAR
    ,key_val        VARCHAR
);

CREATE OR REPLACE PROCEDURE SP_LOOP_TEST()
RETURNS VARCHAR
LANGUAGE SQL
AS
DECLARE
    cur_key    CURSOR FOR SELECT key_nm, key_val FROM KEY_TBL WHERE active_yn = 'Y' ORDER BY key_nm;

BEGIN
    OPEN cur_key;
    FOR c_key_rec IN cur_key
    DO
        INSERT INTO LOOP_CHK(key_nm, key_val)
        VALUES(c_key_rec.key_nm, c_key_rec.key_val);
    END FOR;
    RETURN '1';
END;
;

CALL SP_LOOP_TEST();

Я пробовал как с оператором OPEN, так и без него. Проверил документацию Snowflake, а также этот и другие сайты в Google. Но не смог решить.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вам нужно использовать динамический SQL (выполнить немедленно) при использовании курсора

CREATE OR REPLACE PROCEDURE SP_LOOP_TEST()
RETURNS VARCHAR
LANGUAGE SQL
AS
DECLARE
    cur_key cursor for  SELECT key_nm, key_val 
    FROM KEY_TBL WHERE active_yn = 'Y' ORDER BY key_nm;
v_insert_stmt varchar2;
    --cur_main cursor for select sis_table,census_table, sis_column_list, process_flag 
     --       from CENSUS_HISTORY.CENSUS_SIS_MAPPING   WHERE process_flag = 'Y';
BEGIN
   -- OPEN cur_key;
   FOR c_key_rec IN cur_key do

   v_insert_stmt := ' INSERT INTO LOOP_CHK(key_nm, key_val) ' ||
        ' VALUES(' || '\'' || c_key_rec.key_nm || '\'' || ', 
                    ' || '\''||  c_key_rec.key_val || '\'' || ' )';
    execute immediate v_insert_stmt;    
    END FOR;
    RETURN '1';
END;

Спасибо @Himanshu. Должен ли я использовать динамический подход к запросам для операторов SELECT вместо INSERT?

Jayanta Paul 01.07.2024 21:53

@JayantaPaul Никакой динамики не будет, только если вы используете данные, которые получаете от курсора.

Himanshu Kandpal 02.07.2024 01:17

Другие вопросы по теме