postgreSQL 触发器函数总是报IF 附近出错,代码附上

liangrf782533655 2013-04-09 11:58:07
CREATE FUNCTION fun() RETURNS void AS
$BODY$
BEGIN
IF
NEW.ColorNo IS NULL
THEN RAISE EXCEPTION
'ColorNo cannot be null';
END IF;
RETURN NULL;
END
$BODY$
LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION fun() OWNER TO SJK;
用的是pgadmin 工具,
总是报IF附近出错,在线等大神回复
...全文
428 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangrf782533655 2013-04-10
  • 打赏
  • 举报
回复
我找到原因了 我没有安装plpgsql语言,只需要先执行下面一句代码就行了。 安装plpgsql语言到数据库 createlang plpgsql DATABASE 不过谢谢版主的踊跃回答了
WWWWA 2013-04-10
  • 打赏
  • 举报
回复
引用 11 楼 liangrf782533655 的回复:
我本地没有postgresql数据库,用pgadmin3连接的是服务器的数据库,那到底能不能在这个工具上实行呢,为什么呢
用下述代码连接试试 D:\PS91\bin\psql.exe" -h %server% -U %username% -d %database% -p %port%
clqaitxp 2013-04-10
  • 打赏
  • 举报
回复
引用 14 楼 liangrf782533655 的回复:
我找到原因了 我没有安装plpgsql语言,只需要先执行下面一句代码就行了。 安装plpgsql语言到数据库 createlang plpgsql DATABASE 不过谢谢版主的踊跃回答了
检查当前支持的语种: select * from pg_language; postgres=# select * from pg_language; lanname | lanowner | lanispl | lanpltrusted | lanplcallfoid | laninline | lanvalidator | lanacl ----------+----------+---------+--------------+---------------+-----------+--------------+-------- internal | 10 | f | f | 0 | 0 | 2246 | c | 10 | f | f | 0 | 0 | 2247 | sql | 10 | f | t | 0 | 0 | 2248 | plpgsql | 10 | t | t | 12596 | 12597 | 12598 | (4 rows)
黄亮 2013-04-09
  • 打赏
  • 举报
回复
发错地方了吧
liangrf782533655 2013-04-09
  • 打赏
  • 举报
回复
引用 10 楼 wwwwb 的回复:
不用图形化管理工具,直接在命令行下PASTE上述代码,在PG9.1.2下测试通过
每次在工具中执行的话总是报 语言"plpgsql"不存在,那这又是什么问题呢
liangrf782533655 2013-04-09
  • 打赏
  • 举报
回复
我本地没有postgresql数据库,用pgadmin3连接的是服务器的数据库,那到底能不能在这个工具上实行呢,为什么呢
wwwwb 2013-04-09
  • 打赏
  • 举报
回复
不用图形化管理工具,直接在命令行下PASTE上述代码,在PG9.1.2下测试通过
wwwwb 2013-04-09
  • 打赏
  • 举报
回复
or
ss=# CREATE FUNCTION fun() RETURNS trigger AS $$
ss$#  BEGIN
ss$#   IF NEW.ColorNo IS NULL THEN
ss$#  RAISE EXCEPTION  'ColorNo cannot be null';
ss$#   END IF;
ss$# RETURN NULL;
ss$#   END;
ss$#  $$LANGUAGE plpgsql;
CREATE FUNCTION
ss=#
liangrf782533655 2013-04-09
  • 打赏
  • 举报
回复
引用 7 楼 wwwwb 的回复:
在PG命令行下 SQL code ? 123456789 ss=# CREATE FUNCTION fun() RETURNS trigger AS $$ ss$# BEGINss$# IF NEW.ColorNo IS NULL THENss$# RAISE EXCEPTION 'ColorNo cannot be null'; ss$# END IF; s……
版主,我现在的pgadmin3 过程语言中只提供了internal和c两个选择项 我也想用plpgsql啊,版主知道怎么追加么
wwwwb 2013-04-09
  • 打赏
  • 举报
回复
在PG命令行下
ss=# CREATE FUNCTION fun() RETURNS trigger AS $$
ss$# BEGIN
ss$#  IF NEW.ColorNo IS NULL THEN
ss$# RAISE EXCEPTION  'ColorNo cannot be null';
ss$#  END IF;
ss$#  END;
ss$# $$LANGUAGE plpgsql;
CREATE FUNCTION
ss=#
liangrf782533655 2013-04-09
  • 打赏
  • 举报
回复
加分了,求高手啊
liangrf782533655 2013-04-09
  • 打赏
  • 举报
回复
引用 4 楼 yousite1 的回复:
写触发器和存储过程建议使用plpgsql来写比较简单: 试试这样写: JavaScript code ? 12345678910111213 CREATE FUNCTION fun() RETURNS void AS $BODY$ BEGIN IF NEW.ColorNo IS NULL THEN RAISE EXCEPTION 'Color……
我也想用plpgsql过程语言啊,但是我的pgadmin3 过程语言中只提供了internal和c两个选择项,我想自己追加plpgsql,但是google上也没提供这种追加方法啊,所以很郁闷啊
yousite1 2013-04-09
  • 打赏
  • 举报
回复
写触发器和存储过程建议使用plpgsql来写比较简单: 试试这样写:


CREATE FUNCTION fun() RETURNS void AS
$BODY$ 
BEGIN
	IF NEW.ColorNo IS NULL THEN 
	 RAISE EXCEPTION 'ColorNo cannot be null';
	END IF;
	RETURN;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
liangrf782533655 2013-04-09
  • 打赏
  • 举报
回复
引用 2 楼 wwwwb 的回复:
CREATE OR REPLACE FUNCTION dd() RETURNS trigger AS $BODY$begin IF (NEW.ColorNo IS NULL) THEN RAISE EXCEPTION 'ColorNo cannot be null'; END IF; end;$BODY$ LANGUAGE plpgsql VOLATILE COS……
这和我写的有什么大的不同么,请解释一下,我用的是pgadmin1.8.4版本的
wwwwb 2013-04-09
  • 打赏
  • 举报
回复
CREATE OR REPLACE FUNCTION dd() RETURNS trigger AS $BODY$begin IF (NEW.ColorNo IS NULL) THEN RAISE EXCEPTION 'ColorNo cannot be null'; END IF; end;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION dd() OWNER TO aa;
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。本课程作为PostgreSQL数据库管理一,主要讲解以下内容: 1.     PostgreSQL 存储过程基本知识2.     PostgreSQL 用户自定义函数3.     PostgreSQL 控制结构4.     PostgreSQL 游标和存储过程5.     PostgreSQL 索引6.     PostgreSQL 视图7.     PostgreSQL 触发器8.     PostgreSQL 角色、备份和还原9.     PostgreSQL 表空间管理

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧