我有以下情况,但我不知道我的代码有什么问题。我收到此错误:列vx1不存在(vx1不是列的变量)。
vx1 double precision;
vy1 double precision;
vz1 double precision;
vx2 double precision;
vy2 double precision;
vz2 double precision;
begin
vx1 := x1;
vy1 := y1;
vz1 := z1;
vx2 := x2;
vy2 := y2;
vz2 := z2;
create view "shortestpathEdges" as
select *
from tbledges te
where te.x<=vx1 and te.y<=vy1 and te.z<=vz1 and
te.x<=vx2 and te.y<=vy2 and te.z<=vz2;
这是完整的功能,但它会让你感觉不舒服,所以我觉得很简单,因为还有错误。
create temp view shortestpathEdges as
select *
from(select x , y, z, vid
from(select tv.x as x,tv.y as y,tv.z as z,tv."VertexID" as vid
from (select te."EdgeID" edgeid, te."VertexID" vertexid
from tbledges te
where te.status='dual')as t1, tblvertices as tv
where t1.vertexid=tv."VertexID") as tv2
where tv2.x<=vx1 and tv2.y<=vy1 and tv2.z<=vz1 and
tv2.x<=vx2 and tv2.y<=vy2 and tv2.z<=vz2) as tv3, tbledges as tble
where tv3.vid=tble."VertexID";
答案 0 :(得分:1)
PL / Pgsql帮助文档的Variable Substitution部分提到了答案(可以说是隐密的)。
变量替换目前仅适用于SELECT,INSERT,UPDATE, 和DELETE命令,因为主SQL引擎允许查询 参数仅在这些命令中。使用非常量名称或值 在其他语句类型(通常称为实用程序语句)中,您 必须将实用程序语句构造为字符串并执行它。
这意味着PL / Pgsql中的变量替换不会发生在DDL命令上(尚未)。
为此,您应该使用EXECUTE语句(该链接包含有关如何构建变量sql_string
的示例,该变量可以通过EXECUTE sql_string;
简单地运行)