Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Postgresql中的嵌套IF不';根本不工作?_Database_Postgresql_Stored Procedures - Fatal编程技术网

Database Postgresql中的嵌套IF不';根本不工作?

Database Postgresql中的嵌套IF不';根本不工作?,database,postgresql,stored-procedures,Database,Postgresql,Stored Procedures,这里的嵌套if条件不起作用。我不知道为什么。我是Postgresql的新手。你能帮我解决这个问题吗?我不知道该怎么办( 我已经用空值测试了我的mdendtime。但是条件不起作用。您应该删除函数底部的最后一个ELSE语句 此外,在函数中,您正在使用一种非常复杂的方法将字符串转换为时间或时间戳值,但这些都不是必需的。而不是执行以下操作: IF mdendtime != '' THEN t_11 := (select CAST (mdendtime as time without

这里的嵌套if条件不起作用。我不知道为什么。我是Postgresql的新手。你能帮我解决这个问题吗?我不知道该怎么办(


我已经用空值测试了我的mdendtime。但是条件不起作用。

您应该删除函数底部的最后一个
ELSE
语句

此外,在函数中,您正在使用一种非常复杂的方法将字符串转换为
时间
时间戳
值,但这些都不是必需的。而不是执行以下操作:

IF mdendtime != '' THEN        
  t_11 := (select CAST (mdendtime as time without time zone) as dendtime);   
  INSERT INTO tbl_household(chholdnumber, dendtime, ...) 
    VALUES ($1, t_11, ...);   
END IF;
您可以简单地执行以下操作:

  INSERT INTO tbl_household(chholdnumber, dendtime) 
    VALUES ($1, NULLIF(mdendtime, '')::time);
但正如Frank Heikens所说,您的功能太复杂了。您可能会插入6个基本相同的数据。显然,您正在菲律宾进行家庭调查,您希望存储有关家庭和一些调查数据位置的信息。家庭和调查是分开的实体和在适当的数据库设计中,所有实体都有自己的表

因此,首先将所有家庭数据放入一个表
houses
。进行新调查时,检查家庭数据是否已经在表中。如果已经在表中,请检索
hholdid
,否则将数据插入
houses
返回hholdid

现在制作一个表
survey
,它使用
houses
表中的
hholdid
作为外键。在
survey
表中,您可以为所有相关信息(包括
hholdid
)设置列,例如调查日期、开始时间、结束时间等,然后您可以简单地插入调查信息在那里,所有内容都在一行中,不需要函数

根据所有调查数据的含义,您可能希望重复将所有数据分解为实体的过程。受访者信息看起来是一个很好的候选对象:一个受访者可能会进行多个调查,因此请使用
respid
主键创建一个受访者表,并将该值存储在
调查中
表格


对“话语世界”的分析是良好数据库建模的核心。

“不起作用”不是有效的Postgres错误消息。您测试的任何变量(
mdendtime
mdstattime
)是否可以
null
?为什么要比较名为“time”的变量字符串文本?这些变量的数据类型是什么?我添加了函数部分。它不显示错误,但条件部分根本不起作用:)您需要解释什么不起作用-您正在测试的示例是什么,您期望/想要的行为是什么,以及实际的行为是什么?你有没有试着让我们和你都更好地理解这个问题?你的功能是复杂的,这就是为什么事情会出错。为什么要编写七个INSERT查询,它们做(几乎)相同的事情?使用一次插入并为列设置正确的值(包括默认值和空值)。sir@FrankHeikens。有一种趋势是并非所有参数都有值,因此我必须调整其工作方式;)帕特里克先生?你怎么知道我在菲律宾做家庭调查?菲律宾是我所知道的世界上唯一一个用barangay(简写为brgy)来表示邻里关系的国家。耶哈哈!你很聪明:)先生@Patrick?我的mdendtime在我的数据库中具有数据类型“没有时区的时间”。我将尝试数据库是否允许该数据类型中的NULL值。:)每个数据类型中都允许NULL
  INSERT INTO tbl_household(chholdnumber, dendtime) 
    VALUES ($1, NULLIF(mdendtime, '')::time);