Передать входной параметр как значение в хранимой процедуре

#sql #amazon-web-services #stored-procedures #amazon-redshift

#sql #amazon-веб-сервисы #хранимые процедуры #amazon-redshift

Вопрос:

Я использую SQL (plpgsql). Я создал хранимую процедуру, которая принимает varchar значение, подобное этому ‘DUMMYVAR’. Я хотел бы использовать входное значение (‘DUMMYVAR’) для заполнения целого столбца таблицы, однако при попытке его запуска появляется ошибка вывода, хранимая процедура сигнализирует, что ‘DUMMYVAR’ не является столбцом.

Вот пример хранимой процедуры:

 CREATE OR REPLACE PROCEDURE my_procedure(myvar VARCHAR)
AS $$
BEGIN
    INSERT INTO mytable (var1, var2, dummyvar)
        SELECT 'HELLO', 'WORLD', myvar
        FROM othertable;
END;
$$

  

Предполагая othertable , что в and есть 5 записей myvar = 'DUMMYVAR' , я ожидаю следующего вывода:

 var1    var2    dummyvar
HELLO   WORLD   DUMMYVAR
HELLO   WORLD   DUMMYVAR
HELLO   WORLD   DUMMYVAR
HELLO   WORLD   DUMMYVAR
HELLO   WORLD   DUMMYVAR
  

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

1. INSERT Оператор ссылается на dummvar вместо dummyvar — или это опечатка? Если вы запустите INSERT инструкцию вручную, это сработает?

Ответ №1:

Кажется, у меня все работает нормально

 CREATE TEMP TABLE test_source (
      row_id INTEGER IDENTITY 
    , col_1 VARCHAR
);
INSERT INTO test_source (col_1)
VALUES ('hello world')
     , ('hello world')
     , ('hello world')
     , ('hello world')
     , ('hello world')
;
CREATE TEMP TABLE test_target (
      row_id INTEGER 
    , col_1 VARCHAR
    , col_2 VARCHAR
);
CREATE OR REPLACE PROCEDURE sp_insert_test( test_value VARCHAR)
AS $$
BEGIN
    INSERT INTO test_target (row_id, col_1, col_2)
    SELECT *, test_value
    FROM test_source;
END;
$$ LANGUAGE plpgsql;
;
CALL sp_insert_test ('test-test-test')
;
SELECT * FROM test_target ORDER BY 1
;
 row_id |    col_1    |     col_2
-------- ------------- ----------------
      1 | hello world | test-test-test
      2 | hello world | test-test-test
      3 | hello world | test-test-test
      4 | hello world | test-test-test
      5 | hello world | test-test-test