#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