注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL:如何传递参数到 SQL 脚本?  

2013-05-28 15:43:53|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      昨天 bbs 论坛里有网友提到一个有关参数调用问题,这个问题应该很多人遇到过,这里记录下。

--1 网友问的问题

  " PostgreSQL数据库中,\i *.sql,是执行这个脚本,现在我想带个参数到这个*.sql脚本里? "
  
  备注:这位网友想在 psql 调用 *.sql 脚本时传递参数到 sql 文件中,这个需求很普通,因为
            在 shell 脚本执行某些维护工作时非常有用。这时可以使用 psql 的 -v 参数,如下:
      
--2 创建测试表
 [pg93@redhatB ~]$ psql francs francs
psql (9.3beta1)
Type "help" for help.

francs=> create table test_3(id int4,name varchar(32));
CREATE TABLE

francs=> insert into test_3 values (1,'a'),(2,'b'),(3,'c');
INSERT 0 3

francs=> select * from test_3;
 id | name 
----+------
  1 | a
  2 | b
  3 | c
(3 rows)
   

--3 带变量的 sql 脚本
 [pg93@redhatB tf]$ cat 1.sql
select * from test_3 where id=:v_id;
 

--4 测试:带参数的查询
 [pg93@redhatB tf]$ psql francs francs -v v_id=1 -f 1.sql 
 id | name 
----+------
  1 | a
(1 row)

[pg93@redhatB tf]$ psql francs francs -v v_id=2 -f 1.sql 
 id | name 
----+------
  2 | b
(1 row)
备注:满足需求。这里通过 -f 直接调用 sql 文件,也可以通过 -c 命令调用 sql 文件,如下:
  
--5 测试:-c 调用 sql 文件
 [pg93@redhatB tf]$ psql francs francs -v v_id=1 -c '\i 1.sql' 
 id | name 
----+------
  1 | a
(1 row)

[pg93@redhatB tf]$ psql francs francs -v v_id=2 -c '\i 1.sql' 
 id | name 
----+------
  2 | b
(1 row)
 备注:结果一样,个人建议使用前面的方法。另外,如果是比较复杂的逻辑,建议写在 function 中。
   
--6 参考
psql   

  评论这张
 
阅读(9119)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016