在下面的代码中我创建了用于异常处理的示例表和写入存储过程,问题是如果我将整数值插入列名称和电子邮件中它正在执行。如果我传递名称和电子邮件列的整数值它应该抛出异常说你的传递数据类型对于名称和电子邮件列是错误的。
任何人都可以帮助我。
CREATE TABLE people
(
id integer NOT NULL,
name text,
email text,
CONSTRAINT people_pkey PRIMARY KEY (id)
)
CREATE OR REPLACE FUNCTION test() RETURNS integer AS'
BEGIN
BEGIN
INSERT INTO people(id,name,email) values(1,5,6);
EXCEPTION
WHEN OTHERS THEN RETURN -1;
END;
RETURN 1;
END'LANGUAGE plpgsql;
select * from test()
select * from people
答案 0 :(得分:1)
这是正常行为,与例外或错误处理无关。
为SQL查询中的文本字段分配数值可以无缝地工作,因为PostgreSQL将隐式强制转换应用于数字文字(这也适用于任何数据类型,因为它们都有一个通过I / O转换例程表示文本。
在CREATE CAST的文档中提到了这一点:
通常不需要在用户定义之间创建强制转换 类型和标准字符串类型(text,varchar和char(n),as 以及定义在字符串中的用户定义类型 类别)。 PostgreSQL提供自动I / O转换转换 那。自动转换为字符串类型被视为赋值 强制转换,而字符串类型的自动强制转换只是显式的。