PostgreSQL Oracle兼容性之 - psql prompt like Oracle SQL*Plus

Oracle的SQL*Plus客户端支持使用promote输入变量值,然后在脚本的其他位置使用该变量值。
例如大量的dbms脚本使用了这个用法, 如statspack输入起始值。
https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12032.htm
在PostgreSQL中,psql客户端也提供了类似的用法,例如:

postgres=# create table test(id int, info text);
CREATE TABLE
postgres=# insert into test select generate_series(1,100),'test';
INSERT 0 100

提示输入ID的值,返回该ID对应的test的行。

vi test.sql
\prompt "please enter a id: " id
select * from test where id=:id;

dege.zzz@r10k04474-> psql -h 127.0.0.1 -p 1922 -f ./test.sql
"please enter a id: "1
 id | info
----+------
  1 | test
(1 row)

在psql命令行中执行

postgres=# \ir test.sql
"please enter a id: "1
 id | info
----+------
  1 | test
(1 row)

其中
  \i FILE                execute commands from file
  \ir FILE               as \i, but relative to location of current script

参考帮助文档

man psql

       \prompt [ text ] name
           Prompts the user to supply text, which is assigned to the variable name. An optional prompt string, text, can be specified. (For multiword prompts, surround the text with single quotes.)

           By default, \prompt uses the terminal for input and output. However, if the -f command line switch was used, \prompt uses standard input and standard output.
时间: 2025-01-21 10:19:04

PostgreSQL Oracle兼容性之 - psql prompt like Oracle SQL*Plus的相关文章

PostgreSQL Oracle兼容性 - substrb - orafce substrb 适配 Oracle substrb

标签 PostgreSQL , substrb , 按字节截断 , 不截断多字节字符 背景 在orafce提供的substrb中,当截断到某个多字节字符时,如果字符被中间截断,会导致乱码. 为了兼容oracle substrb,不截断多字节字符,可以在orafce包的substrb基础之上再写一个plpgsql函数来代替. 兼容oracle substrb 下面是阿里云提供的方法. create extension orafce; CREATE OR REPLACE FUNCTION subst

PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁

PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁 作者 digoal 日期 2016-11-04 标签 PostgreSQL , autonomous_transaction , 自治事务 , Oracle兼容性 , plpgsql 背景 PostgreSQL的plpgsql服务端编程语言与Oracle数据库的pl/sql编程语言非常类似,但是对于自治事务一直没有语法层面的支持. 以往如果要支持自治事务,可以使用exce

PostgreSQL Oracle 兼容性之 - rowid (CREATE TABLE WITH OIDS)

标签 PostgreSQL , Oracle , 兼容性 , 行号 , rowid , oid , ctid 背景 Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录. PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录. 但是PostgreSQL的引擎为多版本引擎,因此一条记录在被更新后CTID会发生变化(代表了新的版本). 不管是Oracle还

PostgreSQL Oracle兼容性 之 - parser SQL保留|关键字(keywrods)大全

标签 PostgreSQL , keywords , 关键字 , Oracle 兼容性 背景 PostgreSQL数据库中有哪些关键字,这些关键字的使用限制如何? https://www.postgresql.org/docs/10/static/sql-keywords-appendix.html 文档中的说明并不是特别清晰,(并且KEYWORDS与版本强相关),所以使用pg_get_keywords这个系统函数得到的,更加准确可读. https://www.postgresql.org/do

PostgreSQL Oracle 兼容性之 - timestamp 与 numeric 的运算

标签 PostgreSQL , Oracle , 兼容性 , timestamp , numeric 背景 Oracle里面支持时间戳与数字的加减,数字默认单位为天. PostgreSQL 支持时间戳与interval类型进行加减.日期支持与整型做加减. 为了兼容Oracle(时间戳与数字加减),我们可以复写操作符来实现时间戳与数字的加减. 复写操作符 1.自定义几个函数,用于时间戳与数字的加减. postgres=# create or replace function timestamp_a

PostgreSQL Oracle 兼容性 之 TABLE、PIPELINED函数

标签 PostgreSQL , 返回表 , 返回复合类型 , 返回游标 背景 Oracle 通过table, pipelined函数,用于格式化返回类型为table的函数的结果. Table function concepts There a couple of steps to take when you are working with table functions. Like when you are working with normal tables you have to desc

PostgreSQL Oracle 兼容性之 - 系统列(ctid, oid, cmin, cmax, xmin, xmax)

标签 PostgreSQL , Oracle , 兼容性 , ctid , cmin , cmax , xmin , xmax , oid 背景 PostgreSQL中有一些系统列(即行的头部信息的列),例如物理行号,COMMAND ID,事务号,以及OID. 当我们建表时,不能使用冲突的列名,否则会报错: postgres=# create table a(ctid int); 错误: 42701: 字段名 "ctid" 与系统字段名冲突 LOCATION: CheckAttribu

PostgreSQL 10.0 preview 功能增强 - 匿名、自治事务(Oracle 兼容性)

标签 PostgreSQL , 10.0 , 匿名事务 , 自治事务 背景 PostgreSQL 10.0 通过session backendground实现了匿名事务,从此可以愉快的支持Oracle存储过程的自治事务了. 此前,我们需要通过dblink实现,或者通过匿名块+exception来实现,比较繁琐. <PostgreSQL Oracle 兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁> <PostgreSQL Oracle 兼容性之

PostgreSQL Oracle 兼容性之 - substrb (基于字节的字符串截取)

标签 PostgreSQL , substrb , 字节截取 背景 Oracle的substrb函数,用于基于字节流的截取,需要考虑多字节字符串的编码问题,未截取完整字符,则不截取. https://docs.oracle.com/cd/B12037_01/olap.101/b10339/x_stddev004.htm substr则用于基于字符串的截取. PostgreSQL也可以支持类似的功能. orafce插件 安装orafce插件,里面包含了大量的oracle兼容函数. https://