postgresql 存储过程动态插入数据 2

本文探讨了在C#中如何调用PostgreSQL存储过程进行动态数据插入,并通过测试验证了该操作不会出现错误。分享了一种实现方法,并指出还有更好的解决方案。
摘要由CSDN通过智能技术生成
最近学习postgresql,正一个小活要用上,所以就开始学习了!
然而,学习的过程极其艰辛,但却也充满了乐趣.

一般来说数据库的操作不外如何增,删,改,查,
而首要的就是要添加数据到数据库中,因为以前的经验,
存储过程要比不用存储过程效率要高不少,至少我的程序环境是这样的结果!

所以就想要做写些存储过程,如果一个表一个存储过程,那仅存储过程就得写好几百个
这个实是有点夸张了!(这还仅是插入.加上删除/修改/查询那得近上千)

那么能不能有个方法,可以减少工作量呢?自动根据表名,字段名及字段值与插入?
POSTGRESQL 真的很强大!虽然我还没有入门!

这个问题我通过测试看函数花了三整天,总算有点眉目:
干货直接拉到最后看最后一个插入存储过程.
下面是我的学习过程,本不想加上,可这是我一步步的做过来的.

--
目标:动态插入表中数据 -- 老规矩上代码 -- 插入函数如下 ---------------------------------------- CREATE OR REPLACE FUNCTION f_insert_module_string( modulename text, feildname text[], feildvalue text[], out returnValue text ) AS $$ DECLARE myid integer; ex_result integer default 0; ex_sql text; BEGIN myid:=f_getNewID(modulename,'id'); ex_sql:='insert into ' ||quote_ident(moduleName) ||'(id,' ||array_to_string(feildname,',') ||') values('||myid||',''' ||array_to_string(feildvalue,''',''') ||''')'; execute ex_sql; GET DIAGNOSTICS ex_result:= ROW_COUNT; if ex_result<>0 then returnValue:='{"SUCCESS":"插入操作'||ex_sql||'成功!"}'; else returnValue:='{"ERROR":"插入操作'||ex_sql||'失败!"}'; end if; END; $$ language plpgsql; -- 实际操作 select f_insert_module_string('test','{name,code,gen_time}','{whq,111000,2018-08-20}'); -- 得到如下结果:

--同样,在插入时,直接用单引号把日期给引起来,INSERT 也不会报错,

--那么如果用C#调用存储过程会不会报错呢?

--我们拭目以待!

------------------------------

--经测试没有问题!

 
  
--下面是测试过程及改进代码
--===================================================
--插入数据除了 id ,其余字段全部以TEXT 格式传递
--modulename 即为表名
--feildname  即为字段名
--feildvalue 即为对应的字段值(插入时全部为text)
--这里的字段名和字段值是一一对应的关系,否则出错
--===================================================
CREATE OR REPLACE FUNCTION f_insert_module_string(
modulename text,
feildname  text[],
feildvalue text[],
out returnValue text ) AS $$
DECLARE 
    myid         integer;
    ex_result    integer default 0;
    ex_sql       text;
BEGIN
    myid:=f_getNewID(modulename,'id');
    ex_sql:='insert into '
        ||quote_ident(moduleName)
        ||'(id,'
        ||array_to_string(feildname,',')
        ||') values('||myid||','''
        ||array_to_string(feildvalue,''',''')
        ||''')';
    execute ex_sql; 
    GET DIAGNOSTICS ex_result:= ROW_COUNT; 
    if ex_result<>0 then  returnValue:='{"SUCCESS":"插入操作'||ex_sql||'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL存储过程的写法与其他数据库管理系统有所不同。在PostgreSQL中,存储过程通常使用PL/pgSQL语言编写。PL/pgSQL是PostgreSQL的内置过程语言,它结合了SQL和一些编程语言的特性,用于编写存储过程、触发器和函数等。 下面是一个简单的示例,展示了如何编写一个PostgreSQL存储过程: ```plpgsql CREATE OR REPLACE FUNCTION my_function() RETURNS VOID AS $$ BEGIN -- 在这里编写存储过程的逻辑代码 -- 可以使用SQL语句和PL/pgSQL语言的控制结构 -- 例如,可以使用IF语句、FOR循环和异常处理等 -- 以下是一个示例,向表中插入一条数据 INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2'); -- 可以根据需要执行其他操作 END; $$ LANGUAGE plpgsql; ``` 在上面的示例中,我们创建了一个名为`my_function`的存储过程,它没有参数并且返回值为`VOID`。在`BEGIN`和`END`之间,你可以编写存储过程的逻辑代码。可以使用SQL语句执行数据库操作,也可以使用PL/pgSQL语言的控制结构实现更复杂的逻辑。 需要注意的是,存储过程的语法和使用方法可能会因PostgreSQL的版本和配置而略有不同。因此,在实际使用时,建议参考相关的PostgreSQL文档和手册,以确保正确地编写存储过程。<span class="em">1</span> #### 引用[.reference_title] - *1* [Mybatis调用PostgreSQL存储过程实现数组入参传递](https://download.csdn.net/download/weixin_38605801/12828739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值