变相解决Unidac无法向Postgresql传游标RefCursor的问题

不说了,先上代码.

PG:

--建立t1表
CREATE TABLE public.t1 (
  f1 INTEGER NOT NULL,
  f2 VARCHAR(20),
  f3 VARCHAR(20)[][] [],
  CONSTRAINT t1_pkey PRIMARY KEY(f1)
)
WITH (oids = false);
--建立以t1表行为元素的数组,用来代替REFCURSOR
CREATE OR REPLACE FUNCTION public.fun1 (
  p1 public.t1 []
)
RETURNS varchar [] [] AS
$body$
DECLARE
  row1 public.t1%rowtype;
  arr1 VARCHAR [ ];
BEGIN
  FOREACH row1  in array p1
  loop
    arr1 :=  array_append(arr1,row1.f2) ;
  end LOOP;
  RETURN arr1;
END;
$body$
LANGUAGE ‘plpgsql‘

Delphi:

//把整个表的表字段传到PG中Array结构的string中,当然也可以挑选字段来传,不用的字段,直接增加个","就行.
function DataSeRecordToArrayString(ACds: TDataSet): string;
var
  I: Integer;
  sRecord: string;
begin
  for I := 0 to ACds.FieldCount - 1 do
  begin
    if ACds.Fields[I].IsNull then
      Result := Result + ‘,‘
    else
    begin
      sRecord := ACds.Fields[I].AsString;
      if ACds.Fields[I].DataType in [ftBlob, ftObject, ftDataSet, ftGraphic] then
        Result := Result + ‘,‘ + sRecord
      else
      begin        //处理转义字符 如果是正常文本 可以注释掉以加速
        if sRecord.contains(‘"‘) then
          sRecord := sRecord.Replace(‘"‘, ‘\"\"‘, [rfReplaceAll]);
        if sRecord.IndexOfAny([‘,‘, ‘ ‘, ‘{‘, ‘"‘]) >= 0 then
          sRecord := ‘\"‘ + sRecord + ‘\"‘;
        Result := Result + ‘,‘ + sRecord;
      end;
    end;
  end;
  Result := ‘{"(‘ + Result.Substring(1) + ‘)"}‘;
end;
//测试
procedure TForm1.Button1Click(Sender: TObject);
var
  s, s1, s2: string;
begin
  UniQuery1.SQL.Text := ‘select * from t1‘;
  UniQuery1.Open;
  UniQuery1.First;
  s := DataSeRecordToArrayString(UniQuery1);
  UniQuery1.Next;
  s1 := DataSeRecordToArrayString(UniQuery1);
  UniQuery1.Next;
  s2 := DataSeRecordToArrayString(UniQuery1);
  with UniStoredProc1 do
  begin
    Close;
    ParamByName(‘p1‘).AsString := Format(‘{%s,%s,%s}‘, [s, s1, s2]);
    try
      ExecProc;
    except
      on E: Exception do
      begin
        ShowMessage(E.Message);
        Exit;
      end;
    end;
    ShowMessage(Fields[0].AsString);
  end;
end;
时间: 2024-12-17 12:35:03

变相解决Unidac无法向Postgresql传游标RefCursor的问题的相关文章

使用Kindeditor的多文件(图片)上传时出现上传失败的解决办法/使用Flash上传多文件(图片)上传时上传失败的解决办法

近来用户反映希望我们把在线编辑器中的多图片上传功能实现,因为他们在编辑商品描述时经常会有一次上传多张图片的需求,如果要逐张选择的话效率很低,客户的需求就是我们的追求,很快我们就把完善功能排到了日程表中,要求尽快实现. 我们在项目中使用的在线编辑器是Kindeditor4.1.10,它们的多文件上传插件是使用Flash实现的,原本应该就是能使用的,但为什么老是显示上传失败的,百度了一下前人的经验和教训,出现这种情况,有两种可能:1)上传的目标文件夹没有写权限,导致上传的文件无法进行写操作,所以上传

如何解决控件附件上传时超大附件无法上传的问题

起因: 我们的附件控件里边,一般情况下默认设置大小为10M,如果我们设置30M的情况,就无法满足上传了. 原因: 是因为我们ajax的一个文件里取我们控件自定义大小的值,无法取到.因为我们传的int类型的值,所以我们在用QueryString取的时候的值为Null. 解决: 打开Portal->Ajax->FileUploadHandler.ashx文件里,找到以下代码: Protected int MaxSize { get { if (!int.TryParse(Request.Query

怎样解决asp.net.mvc上传附件超过长度问题?

最近,在做一个上传附件功能,但是文件超过4M,就报上传的文件超过长度问题 如何解决这个问题呢?这里我找了一下资料,了解一下问题所在,有3种解决方法 方案一:在所在项目的web.config配置文件中,修改maxRequestLength的值 方案二:在.net framework的安装目录下的machine.config配置文件,修改maxRequestLength的值 方案三:修改IIS服务的上传文件大小的限制 方案一: 1.修改web.config文件,改变这个maxRequestLengt

解决不能连接远程postgresql

在远程服务器上安装了postgresql,用 pgAdmin添加服务器始终不行.    解决办法: 在远程的postgresql数据库上的pg_hba.conf中添加 host  all  all   0.0.0.0/0   trust 并保证postgresql.conf 中参数设置为listen_addresses = '*'    修改完毕后重启: /bea/PostgreSQL/9.3/bin/pg_ctl  stop /bea/PostgreSQL/9.3/bin/pg_ctl  st

解决从本地文件系统上传到HDFS时的权限问题

当使用 hadoop fs -put localfile /user/xxx 时提示: put: Permission denied: user=root, access=WRITE, inode="/user/shijin":hdfs:supergroup:drwxr-xr-x 表明:权限不够.这里涉及到两个方面的权限.一个是本地文件系统中localfile 文件的权限,一个是HDFS上 /user/xxx目录的权限. 先看看 /user/xxx目录的权限:drwxr-xr-x  

解决安卓微信浏览器中上传不能调用相机的问题

使用input type=file标签进行文件上传时,在安卓手机中的微信浏览器中不能调起相机,但是在苹果手机中的微信浏览器中可以调用相机.解决办法很简单, <input type="file" name="upload" onchange="onChooseFile(this)" accept="image/png,image/jpeg,image/gif" capture="camera">

解决IE系列浏览器上传页面接收问题

引用:在网上看见一个说程序员的致命缺点中: 第四点就是大部分的程序员是一种信息囤积型的程序员,说直接一点就是狭隘,主要体现就是在知识的共享上面,非常害怕将知识全部告诉了别人,自己的存在价值就会大打折扣,这些主要是老员工居多,他们经常会隐藏代码,不愿意公布代码.小心翼翼地避免访问记录,也许这类的程序员很乐意告诉你他的工作是多么了不起,多么的厉害,但是如果你想要知道他的代码估计会很难.最终,他们注定要失败,这样的做事行为不被别人接受,存在也是没价值的. 在加上在网上 搜索资料的感受现将最近解决的一个

解决Hibernate不支持PostgreSQL中双冒号(::)的Bug

在PostgreSQL中,双冒号(::)的作用是类型转换,而在Hibernate中,SQL中冒号的作用是命名参数,用于SQL中命名参数的匹配,这时,当在PostgreSQL数据库环境中,正常的SQL本身包括双冒号时,通过Hibernate进行查询就会报错,这个应该是Hibernate的一个Bug,怎么解决呢,本文将给出方案. 通过研究Hibernate的源代码,发现了问题所在,问题出在org.hibernate.engine.query.spi.ParameterParser,这个类构造方法为私

解决百度ueditor配置上传目录为外部目录时,项目启动访问不到图片的问题。

如图所示,公司项目用到了百度的ueditor,配置的上传目录并不在项目根目录下,而是在外部目录中.于是在上传图片时,出现了无法获取图片的问题. 解决方法:添加该目录至tomcat项目部署目录中,如下图所示. 原文地址:https://www.cnblogs.com/yjry-th/p/10943160.html