将计数器参数传递给postgres sql脚本
我有一个脚本myScript.sql。我正在用一些数字运行它。/myScript.sql 1000。它在下面执行将计数器参数传递给postgres sql脚本,sql,database,postgresql,scripting,Sql,Database,Postgresql,Scripting,我有一个脚本myScript.sql。我正在用一些数字运行它。/myScript.sql 1000。它在下面执行 psql -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} ${DB_INSTANCE} -f myScript.sql -v myNumber="'$1'"> /dev/null 还有sql本身 DO $do$ DECLARE _counter int := 0; BEGIN WHILE _c
psql -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} ${DB_INSTANCE} -f myScript.sql -v myNumber="'$1'"> /dev/null
还有sql本身
DO
$do$
DECLARE
_counter int := 0;
BEGIN
WHILE _counter < :myNumber
LOOP
_counter := _counter + 1;
insert into mySchema.myTable (id,action_id)
values (x, y);
END LOOP;
END
$do$
但它失败了。。。出了什么问题,我已经尝试了各种各样的选项,什么都不起作用。PSQL变量只在SQL语句中考虑,而在PL/pgSQL语句中不考虑 您可以尝试:
drop table v_myNumber;
select :myNumber into v_myNumber;
DO
$do$
DECLARE
_counter int = 0;
BEGIN
WHILE _counter < (select * from v_myNumber)
LOOP
_counter = _counter + 1;
RAISE NOTICE '_counter=%', _counter;
END LOOP;
END;
$do$
执行说明:
$ psql -e -f tloop.sql -v myNumber=3
drop table v_myNumber;
DROP TABLE
select 3 into v_myNumber;
SELECT 1
DO
$do$
DECLARE
_counter int = 0;
BEGIN
WHILE _counter < (select * from v_myNumber)
LOOP
_counter = _counter + 1;
RAISE NOTICE '_counter=%', _counter;
END LOOP;
END;
$do$
psql:tloop.sql:14: NOTICE: _counter=1
psql:tloop.sql:14: NOTICE: _counter=2
psql:tloop.sql:14: NOTICE: _counter=3
DO
你能说什么失败了吗?你有错误吗?它不知道什么是:myNumberERROR:语法错误在或附近:第6行:WHILE\u计数器在1..:MyNumberTanks,但我不明白什么是drop table并从该表中选择为什么是table???在t中运行select 3创建一个名为t的表,其中有一行和一列包含值3。您需要仔细选择此表的名称,因为如果此表已存在,则此SELECT语句将失败。