我如何在postgresql中使用psql实现这段代码?

7cwmlq89  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(115)

如何在postgresql中使用psql实现这些代码?

Declare @Id int
Set @Id = 1

While @Id <= 100
Begin 
   Insert Into tblAuthors values ('Author - ' + CAST(@Id as nvarchar(10)),
              'Country - ' + CAST(@Id as nvarchar(10)) + ' name')
   Print @Id
   Set @Id = @Id + 1
End

我试着搜索一些postgresql语法的教程,但是没有一个有用。

58wvjzkj

58wvjzkj1#

不需要PL/pgSQL、循环或变量:

insert into tblauthors (name, country)
select concat('Author - ',id),
       concat('Country - ',id,' name')
from generate_series(1,100) as g(id);
irtuqstp

irtuqstp2#

@a_horse_with_no_name的答案是正确的,只需要一个插入。然而,你的问题似乎更多的是关于语法而不是如何完成。所以让我们回顾一下;将代码转换为Postgres所需的一些观察。
1.该语言是plpgsql而不是psql。在Psql命令行界面应用程序进入Postgresql数据库管理系统。

  1. @不是对象名称中的有效字符。
    1.声明变量需要指定数据类型。
  2. Set不用于变量赋值。如果使用它,则会建立/更改运行时环境
    1.变量初始化可以在定义变量时进行。
    1.没有nvarchar数据类型。只使用text
    1.没有Print语句。请改用raise notice
  3. +不用于字符串连接。请使用函数concat()或运算符(||)。
    1.每个语句必须以分号(;)结束。
    1.循环由loop ... end loop;封闭
    1.除了声明之外的所有语句都必须包含在begin ... end;中。
    1.整个代码块必须用单引号或美元引用的字符串常量括起来。
    1.所有代码块必须位于Function、Procedure、Do块或其他代码块中。
    1.虽然不是必需的,但最好总是在插入时指定列名。(恕我直言,应该是必需的)。
    考虑到上面的代码,您的代码变为:
DO $BLK$          -- A Dollar-Quoted String Constant 
declare 
  id integer = 1;

begin 
    while id <= 100
    loop
        insert into tblauthors (name, country)
             values ( 'author - ' || cast(id as text)
                    , 'country - '  || cast(id as text) || ' name'
                    ); 
        raise notice '%', cast(id as text); 
        id = id + 1;
    end loop;
end; $BLK$;

与其 * 搜索一些教程 *,不如从Documentation开始。更具体地说,也许是Lexical Structure一章
注意:上面的#2并不完全正确。如果变量名用双引号括起来,可以使用@作为"@name"。但是,双引号很快就会成为一个可读文件,最好完全避免。

相关问题