当您输入错误的数据类型时,是否有人知道您是否可以创建ELEVATION EXCEPTION?例子显然它不起作用,但它是我正在寻找的一个例子
CREATE TABLE products(
name_pr varchar(20),
quantity smallint,
price smallint,
last_update timestamp,
latest_user_bd text
);
CREATE OR REPLACE FUNCTION validate_products()
RETURNS TRIGGER AS
$BODY$
BEGIN
IF NEW.price IS NOT SMALLINT THEN
RAISE EXCEPTION 'You must enter the Price';
END IF;
NEW.last_update = now();
NEW.latest_user_bd = user;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER validate_products
BEFORE INSERT OR UPDATE
ON products
FOR EACH ROW EXECUTE PROCEDURE validate_products();
插入C#的示例
string query = "INSERT INTO products(name_pr, quantity, price) VALUES('" + txtName.Text + "', '" + txtQuantity.Text + "','" + txtPrice.Text + "')";
con.Open();
comand = new NpgsqlCommand(query, con);
你不能在Postgres的TOP命令中触发外部异常。您可以将参数传递给PostgreSQL函数,在那里您可以在受保护的块中运行命令。在那里你可以处理异常。有些人喜欢
CREATE OR REPLACE FUNCTION new_product(__price text)
RETURNS void AS $$
DECLARE _price smallint;
BEGIN
_price := __price::smallint;
INSERT INTO product(..) (_price);
EXCEPTION WHEN invalid_text_representation, numeric_value_out_of_range THEN
IF price IS NULL THEN
RAISE EXCEPTION 'the price is not valid smallint value %', _price;
END IF;
END;
$$ LANGUAGE plpgsql;
我不喜欢这种“无类型”功能 - 但它确实如此,你想要什么。
PostgreSQL的第二种类型不是变种类型,所以模式
IF some IS NOT smallint THEN -- has not sense
在PLpgSQL中是无稽之谈。你可以使用regexp,你可以使用numeric
和测试限制,或者你可以转换为smallint并捕获异常。
PLpgSQL是严格类型的语言(PostgreSQL SQL也是如此),因此在那里不可能使用动态较少类型的语言。
通常应首先在UI级别上检查类型及其值 - 并且应该在SQL级别上安全地应用它们。 SQL级别会重新检查,但它可能引发一个常见的异常。参数检查是表示层的更好任务。