在存储过程中将输入参数作为值传递
Posted
技术标签:
【中文标题】在存储过程中将输入参数作为值传递【英文标题】:Pass input parameter as value in stored procedure 【发布时间】:2020-10-13 20:18:49 【问题描述】:我正在使用 SQL (plpgsql)。我创建了一个存储过程,它接收像这样的“DUMMYVAR”的varchar
值。我想使用输入值 ('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
和myvar = 'DUMMYVAR'
中有 5 条记录,我期望的是以下输出:
var1 var2 dummyvar
HELLO WORLD DUMMYVAR
HELLO WORLD DUMMYVAR
HELLO WORLD DUMMYVAR
HELLO WORLD DUMMYVAR
HELLO WORLD DUMMYVAR
【问题讨论】:
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
【讨论】:
以上是关于在存储过程中将输入参数作为值传递的主要内容,如果未能解决你的问题,请参考以下文章
在 Sql Server 中将 xml 文档作为存储过程的参数传递是不是安全?
如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?