Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将计数器参数传递给postgres sql脚本_Sql_Database_Postgresql_Scripting - Fatal编程技术网

将计数器参数传递给postgres sql脚本

将计数器参数传递给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

我有一个脚本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 _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语句将失败。