当您输入错误的数据类型时,是否有人知道您是否可以创建一个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);
答案 0 :(得分:0)
你不能在Postgres的TOP命令中触发外部异常。您可以将参数传递给PostgreSQL函数,在那里您可以在受保护的块中运行命令。在那里你可以处理异常。有些像
File "command line", line 1:
Error: Unbound module Pervasives
我不喜欢这种“无类型”功能 - 但它确实如此。
第二方面,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;
在PLpgSQL中是无稽之谈。你可以使用regexp,你可以使用IF some IS NOT smallint THEN -- has not sense
并测试限制,或者你可以转换为smallint并捕获异常。
PLpgSQL是严格类型的语言(PostgreSQL SQL也是如此),因此在那里不可能使用动态的类型较少的语言。
通常应首先在UI级别检查类型及其值 - 并且应该在SQL级别上安全地应用它们。 SQL级别会重新检查,但它可能引发一个常见的异常。参数检查是表示层的更好任务。