首页 / 知识
关于sql:如何在psql中使用脚本变量?
2023-04-13 18:35:00

How do you use script variables in psql?在MS SQL Server中,我创建了脚本以使用可自定义的变量:
然后,我将在运行时更改
我如何对PostgreSQL客户端 Postgres变量是通过 set命令创建的,例如...
...,然后可以替换为...
... 要么 ...
编辑:从psql 9.1开始,变量可以用引号引起来,如下所示:
在旧版本的psql客户端中: ...如果要将变量用作条件字符串查询中的值,例如...
...那么您需要在变量本身中包含引号,因为上述内容将无法正常工作。而是这样定义您的变量...
但是,如果像我一样,您遇到了要从现有变量中创建字符串的情况,我发现窍门就是...
现在,您同时具有相同字符串的带引号和不带引号的变量!而且你可以做这样的事情....
关于PSQL变量的最后一句话:
如果将它们用SQL语句括在单引号中,它们将不会扩展。
要在SQL语句中扩展为字符串文字,必须在变量集中包括引号。但是,变量值已经必须用引号引起来,这意味着您需要第二组引号,并且必须对内部引号进行转义。因此,您需要:
编辑:从PostgreSQL 9.1开始,您可以改写:
您可以尝试使用WITH子句。
特别是对于
注意,冒号未加引号,然后变量名称" self"被加引号。我知道语法很奇怪。这仅在psql中有效; (例如)PgAdmin-III无法使用。
这种替换发生在psql中的输入处理期间,因此您不能(说)定义一个使用 FWIW,真正的问题是我在 set命令的末尾添加了分号:
分号被解释为变量中的实际字符:
因此,当我尝试使用它时:
...我懂了:
这不仅无法在文字周围设置引号,而且将命令分为两部分(第二部分无效,因为它以" NOINHERIT"开头)。 这个故事的寓意:PostgreSQL"变量"实际上是文本扩展中使用的宏,而不是真正的值。我敢肯定这会派上用场,但一开始它很棘手。
您需要使用一种过程语言,例如PL / pgSQL而不是SQL proc语言。 postgres(从9.0版开始)允许使用任何受支持的服务器端脚本语言的匿名块
http://www.postgresql.org/docs/current/static/sql-do.html 由于所有内容都在字符串内部,因此需要对转义的外部字符串变量进行转义和引用两次。取而代之的是,使用美元引号不能完全防止SQL注入。 另一种方法是(ab)使用PostgreSQL GUC机制创建变量。有关详细信息和示例,请参见此先前的答案。
您在 我不建议将此方法用于一般用途,但在链接问题中提到的狭窄情况下可能很有用,在这种情况下,发帖者需要一种为触发器和函数提供应用程序级用户名的方法。 我用一个临时表解决了它。
这样,我有一个"变量"可以在多个查询中使用,这对于会话是唯一的。我需要它来生成唯一的"用户名",而如果导入具有相同用户名的用户时仍然没有冲突。 我真的很想念那个功能。实现类似目的的唯一方法是使用函数。 我以两种方式使用它:
Perl版本:
表格版本:
笔记:
我发现这个问题和答案非常有用,但也令人困惑。我很难让带引号的变量起作用,所以这是使它起作用的方式:
这样,您可以在一个语句中定义变量。使用它时,单引号将嵌入到变量中。 注意!当我在带引号的变量后添加注释时,当我尝试其他答案中的某些方法时,它作为变量的一部分被吸收。那真是让我有些困惑。使用这种方法,注释似乎可以按照您的期望进行处理。 我在另一个线程上发布了一个新的解决方案。 它使用表来存储变量,并且可以随时更新。通过更新表触发动态创建静态不可变getter函数(由另一个函数)。您将获得漂亮的表存储空间,以及不可变的吸气剂的超快速度。
假设我要声明一个整数变量
示例表
显然,此表中没有任何内容:
我们声明一个变量。注意下一行的分号是如何!
现在我们可以插入。我们必须使用这种奇怪的"
有效!
说明: 那么...如果下一行没有分号怎么办?变量?看一看:
我们声明
让我们选择
WTF是吗?它不是整数,而是字符串
|
最新内容
相关内容
linux命令创建项目组?
linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文件夹,linux命令中用root用户新建一个user1用户,新建一个group1的组linux脚本命令输信息?
linux脚本命令输信息?,系统,信息,代码,脚本,数据,工具,发行,命令,变量,文件,linux下shell脚本命令shell变量调出命令。linux中的shell脚本有多linux命令简写自定义?
linux命令简写自定义?,系统,状态,命令,代码,工具,发行,标准,软件,文件,别名,Linux:Python编写Linux自定义命令工具1、首先我们先认识一下cat指linux的创建目录命令?
linux的创建目录命令?,名字,地址,位置,密码,软件,系统,命令,目录,文件夹,文件,请问LINUX中,创建文件夹、文件命令及清除命令。1、创建文件夹mklinux上启动脚本命令?
linux上启动脚本命令?,服务,状态,系统,代码,脚本,工作,周期性,命令,文件,方法,Python脚本在Linux下如何自启动与定时任务的实例详解Linux在启linux创建端口命令?
linux创建端口命令?,系统,网络,服务,通讯,检测,工具,端口,电脑,命令,以下,Linux中如何添加一个新的端口号1、修改Linux远程端口的方法如下:首先linux下文件创建命令?
linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,目录,Linux虚拟机命令如何创建新的文件和文件夹首先,连接相应linuxlinux创建vp命令?
linux创建vp命令?,系统,工作,基础,设备,地址,命令,目录,环境,信息,工具,linux基础命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目录linux下编写脚本命令?
linux下编写脚本命令?,代码,时间,工具,标准,系统,实战,平台,最新,网站,文件,linux写脚本,需要ls只显示前10个文件,怎么实现?在linux中如果用lslinux命令创建文件加?
linux命令创建文件加?,名字,管理,系统,名称,密码,首次,命令,文件,文件夹,位置,创建文件linux命令首先打开linux的终端。然后输入touch命令创建linux用户自定义命令?
linux用户自定义命令?,系统,时间,标准,软件,项目,电脑,服务,工具,基本知识,材料,如何创建linux命令”快捷方式”或”自定义1、使用命令ln创建linux定时器脚本命令?
linux定时器脚本命令?,系统,代码,时间,工具,工作,定期,周期性,异常,任务,脚本,Linux设置定时任务打开终端窗口,并使用 crontab -e 命令编辑当前