Postgres 9.1+数据库包含客户和产品。在客户表中,在每个客户的价格表达式列中,客户价格被描述为sql表达式。
如何从这些数据创建价格表?我在下面尝试了代码,但由于未定义eval()而出错。
create table customer ( id int primary key, priceexpression text ); insert into customer values (1, 'price*0.95'),(2,'cost+12.0' ); create table product ( id char(20) primary key, price numeric(12,4), cost numeric(12,4) ); insert into product values ('PRODUCT1', 120, 80),('PRODUCT2', 310.5, 290); select customer.id as customer, product.id as product, eval(priceexpression) as price from customer,product
这是ASP.NET MVC4应用程序。
您可以编写一个为您执行此操作的SQL函数,并使用例如postgres- utils随附的函数:
select c.name as cust_name, p.name as prod_name, p.cost as prod_cost, eval( 'select '||c.price_expression||' from product where id=:pid', '{"{cost}",:pid}', array[ p.cost, p.id ] ) as cust_cost from product p, customer c
但是当然,它可能很慢,不安全,您可以使用实例化视图来更轻松地缓存它,等等。