Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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

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
Sql ce(“|r.nam | | | | | | | | | | | | | | |”| r.def | | |,”; 如果结束; 端环; 参数列表:=rtrim(参数列表,,); 列列表:=rtrim(列列表','); 值列表:=rtrim(值列表,,); 执行格式(ddl、funcname、参数列表、表名、表名、表名、列列表、值列表); 结束; $$;_Sql_Postgresql_Sql Insert_Sql Null - Fatal编程技术网

Sql ce(“|r.nam | | | | | | | | | | | | | | |”| r.def | | |,”; 如果结束; 端环; 参数列表:=rtrim(参数列表,,); 列列表:=rtrim(列列表','); 值列表:=rtrim(值列表,,); 执行格式(ddl、funcname、参数列表、表名、表名、表名、列列表、值列表); 结束; $$;

Sql ce(“|r.nam | | | | | | | | | | | | | | |”| r.def | | |,”; 如果结束; 端环; 参数列表:=rtrim(参数列表,,); 列列表:=rtrim(列列表','); 值列表:=rtrim(值列表,,); 执行格式(ddl、funcname、参数列表、表名、表名、表名、列列表、值列表); 结束; $$;,sql,postgresql,sql-insert,sql-null,Sql,Postgresql,Sql Insert,Sql Null,在您的情况下,生成的插入函数将是: 创建或替换函数public.cars\u insert(make\u在字符中变化,model\u在字符中变化,具有\u自动\u传输\u在布尔值中,在\u日期\u在带有时区的时间戳中创建\u) 还车 语言plpgsql 作为$function$ 声明 结果(1)设置车辆;; 开始 插入汽车 ( 品牌、型号、有自动变速器、在日期创建 ) 价值观 ( make_in,model_in,coalesce(自动变速器已安装,错误),coalesce(在日期创建,现在()

在您的情况下,生成的插入函数将是:

创建或替换函数public.cars\u insert(make\u在字符中变化,model\u在字符中变化,具有\u自动\u传输\u在布尔值中,在\u日期\u在带有时区的时间戳中创建\u)
还车
语言plpgsql
作为$function$
声明
结果(1)设置车辆;;
开始
插入汽车
(
品牌、型号、有自动变速器、在日期创建
)
价值观
(
make_in,model_in,coalesce(自动变速器已安装,错误),coalesce(在日期创建,现在())
)
将*返回到结果集合中;
返回结果集;
结束;
$function$

您需要两条Insert语句;一个用于填充可为空的列,另一个用于忽略这些列,作为默认值,仅当您不引用要插入的列时使用。

您尝试过上一次查询吗?我应该工作,应该工作,但遗憾的是没有。它返回以下错误:error:DEFAULT在此上下文行中是不允许的25:coalesce(has_automatic_transmission,DEFAULT),我也不使用动态sql,除非我绝对必须这样做。我相信一定有一种明智的方法可以使用sql语法来实现这一点,因为isAh,是的,我认为我阅读文档的速度太快了。我们不能将
DEFAULT
用作函数的参数。这个SO答案可能有用:是的,我认为作为函数param的“DEFAULT”不再具有列的作用域,而是在列的作用域内被引用,这很愚蠢,但事实就是这样。很酷,但是你想在每个
插入
中都有两个子查询吗?@LaurenzAlbe:我不想这样做。这只是回答问题的概念证明。我更愿意在客户机中使用带有动态SQL的函数、触发器或处理空情况。公平地说,每个子查询只针对实际的NULL输入执行,因此如果NULL是一个罕见的异常,那么性能影响是有限的。当有6列具有默认值时,这不起作用,因为我必须为每个排列都有一个副本
CREATE TABLE IF NOT EXISTS public.cars
(
    id serial PRIMARY KEY,  
    make varchar(32) not null,
    model varchar(32),
    has_automatic_transmission boolean not null default false,
    created_on_date timestamptz not null DEFAULT NOW()
);  
drop function if exists cars_insert; 
 
create function cars_insert
(
    in make_in text,
    in model_in text,
    in has_automatic_transmission_in boolean,
    in created_on_date_in timestamptz 
)  
returns public.carsas 
$$
    declare result_set public.cars;
    begin   
        insert into cars
        (
            make,
            model,
            has_automatic_transmission,
            created_on_date
        ) 
        values 
        (
            make_in,
            model_in,
            has_automatic_transmission_in,
            created_on_date_in
        ) 
        returning * into result_set;  

        return result_set;
    end;
$$

language 'plpgsql';
insert into cars
        (
            make,
            model,
            has_automatic_transmission,
            created_on_date
        ) 
        values 
        (
            make,
            model,
            COALESCE(has_automatic_transmission_in, DEFAULT),
            COALESCE(created_on_date_in, DEFAULT)
        )