操作Oracle的xmltype
因为可能插入超过4k的数据,所以需要用流
然后ADOQuery和ADOdataset都用过,发现个问题//Query
with ADOQry_1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into xmltest (id,xmldoc) values ( :id , xmlType(:clobs))');
Parameters.ParamByName('id').Value := '0001';
{//全部测试不通过
Parameters.ParamByName('clobs').LoadFromStream(strstream,ftBlob);
Parameters.ParamByName('clobs').LoadFromStream(strstream,ftOraClob);
TMemoField(Parameters.ParamByName('clobs')).LoadFromStream(strstream);
}
Prepared;
ExecSQL;
end;
而先查询,再在field里面导入流,然后保存进中间表,再调用存储过程xmltype(clob)强制转换导入却是可以的
with ADOQry_1 do
begin
Close;
Parameters.Clear;
SQL.Clear;
SQL.Add('select * from insertxml_tmp');
Open;
end; with ADOQry_1 do
begin
Edit;
Append;
FieldByName('id').value := '0001';
TMemoField(FieldByName('xmlclob')).LoadFromStream(strstream);
Post;
ADOQry_1.UpdateStatus;
end; with Adsp_1 do
begin
Close;
ProcedureName := 'XmlInsertClob';
ExecProc;
end;当时就想能不能调用底层一点的API什么的,控件用着是真不放心啊
然后又疑惑了,貌似查询操作记录也是调用的语句,流是怎么调用的呢select sql_text as "简略SQL语句",sql_fulltext as "SQL字串",parsing_schema_name as "执行者",module as "执行程序",last_active_time as "作用时间"
from v$sqlarea
where parsing_schema_name = '' and module = '' --执行者为parsing_schema_name ,执行程序为module
order by last_active_time desc
因为可能插入超过4k的数据,所以需要用流
然后ADOQuery和ADOdataset都用过,发现个问题//Query
with ADOQry_1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into xmltest (id,xmldoc) values ( :id , xmlType(:clobs))');
Parameters.ParamByName('id').Value := '0001';
{//全部测试不通过
Parameters.ParamByName('clobs').LoadFromStream(strstream,ftBlob);
Parameters.ParamByName('clobs').LoadFromStream(strstream,ftOraClob);
TMemoField(Parameters.ParamByName('clobs')).LoadFromStream(strstream);
}
Prepared;
ExecSQL;
end;
而先查询,再在field里面导入流,然后保存进中间表,再调用存储过程xmltype(clob)强制转换导入却是可以的
with ADOQry_1 do
begin
Close;
Parameters.Clear;
SQL.Clear;
SQL.Add('select * from insertxml_tmp');
Open;
end; with ADOQry_1 do
begin
Edit;
Append;
FieldByName('id').value := '0001';
TMemoField(FieldByName('xmlclob')).LoadFromStream(strstream);
Post;
ADOQry_1.UpdateStatus;
end; with Adsp_1 do
begin
Close;
ProcedureName := 'XmlInsertClob';
ExecProc;
end;当时就想能不能调用底层一点的API什么的,控件用着是真不放心啊
然后又疑惑了,貌似查询操作记录也是调用的语句,流是怎么调用的呢select sql_text as "简略SQL语句",sql_fulltext as "SQL字串",parsing_schema_name as "执行者",module as "执行程序",last_active_time as "作用时间"
from v$sqlarea
where parsing_schema_name = '' and module = '' --执行者为parsing_schema_name ,执行程序为module
order by last_active_time desc
解决方案 »
- delphi关于webservice的调用
- delphi2007如何使用png图片?
- 怎么建立Query的主从关系?
- d6与d7到底哪个好?
- 100分求教如何cancle掉耗时查询?(在线等待)
- 谁有多的,觉得差的,放着碍事的,功能简单的■■■■考勤系统■■■■,觉得是垃圾就拿来换分(分数可以多加)。
- RAD Studio 2007 最新的12月更新包安装问题
- 打包成一个文件的问题
- MDI应用程序中子窗口最大化打开时,会出现闪烁——为什么???
- 在数据库中怎样存储图片?
- 树内拖动,树与树之间的拖动的问题,高手低手,请昂首挺胸地进来吧,在线等之,我们共同交流...
- 我有20个文本文件,把里面重复的数据查找出来的方法?
ADO连接的时候一开始用的MS的 Provider OLE for oracle,各种报错,网上查了说是连接的问题,遂改成oracle的查oracle操作也基本都是说的OraADO控件的操作,全是封装起来的……有没有类似API说明之类,或者delphi直连的接口之类的?
公司用的D6,F1一下返回的东西实在是和MSDN没的比啊,而且描述上也是各种模糊……delphi控件的好使导致搜索数据连接相关完全都是拖个控件设置属性之类的教程,某些稍微下层点的东西完全找不到资料啊……控件不好使的时候人直接闷了
初看vcl代码,也没能找到它在哪里定义了一个8k的buffer
char固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。varchar可变长度的非 Unicode 数据,最长为 8,000 个字符。text可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。Unicode 字符串
nchar固定长度的 Unicode 数据,最大长度为 4,000 个字符。 nvarchar可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。ntext可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。
varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
\Delphi7\Source\Vcl\