mysql 美元符号_坑爹的PostgreSQL的美元符号(有时需要替换成单引号)

今天想在PostgeSQL数据库里建一个存储过程(或函数也行),由于对存储过程比较生疏,上网搜了很多教程和源代码例子,照着写,发现怎么都不行,甚至把网上教程包括官方教程的源代码原封不动的复制下来一执行都会报错,

教程示例:

---创建自定义函数sales_tax

CREATE or replace FUNCTION sales_tax(subtotal real) RETURNS real AS$$BEGIN

RETURN subtotal * 0.06;END;

$$ LANGUAGE plpgsql;---调用自定义函数sales_tax

select * from sales_tax(0.5)

但在我的Mac上,报错,说是美元符号$$未结束,在Windows机器上也是一样报错。

Unterminated dollar quote started at position 71 in SQL ....

For platforms that don't recognize dollar quoting you can use ' instead. You'll need to escape any ' in the body of the anonymous function though.

意思是,有些PostgreSQL版本是不支持$$符号的,这时可以换成单引号''来包裹住函数(存储过程)的主体语句。于是我替换成单引号之后,马上就可以了:

---创建自定义函数sales_tax

CREATE or replace FUNCTION sales_tax(subtotal real) RETURNS real AS

'BEGIN

RETURN subtotal * 0.06;

END;'LANGUAGE plpgsql;---调用自定义函数sales_tax

select * from sales_tax(0.5)

特记录一下。另外,存储过程(StoredProcedure)和函数(Function)还是有区别的,用惯了微软的SQL Server的人应该都很清楚,但发现网上用PostgreSQL的人很多都把两者搞混淆了,认为Function就是存储过程。这可能是因为在PostgreSQL里,二者非常相似,函数和存储过程都可以有输入、输出参数。例如,上面的Function也可以改成存储过程:

create or replace procedure my_proc(subtotal real, INOUT tax real) AS

'BEGIN

tax := subtotal * 0.07;

END;' LANGUAGE plpgsql;

注意:存储过程不能有out类型的参数,需要改成INOUT型,表示输入或输出类型。

----------------------------------------------------------------------------------------------------

后续:后来发现,$$符号也可以用,但需要配合PostgreSQL的PG Admin4的web页面的编辑框使用,在DBVisualizer客户端用不了, 看来应该是DBVisualizer客户端自身的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值