最近尝试用oracle数据库来开发,期望执行SQL如下:
select * from TABLE(testFunc(CURSOR(select * from EMP), ‘abc’))
要实现的testFunc函数有如下要求:
1. 在testFunc函数中要调用第三方C代码
2. 数据源不确定,可以为任意表,所以不能预先定义好一个表类型
3. testFunc函数的输出结果列数和数据类型都不确定,也就是说希望输出结果是一个动态表。
4. 要处理大数据,要求效率要高当然如果有另外的办法能提高效率也行,比如采用table UDF, 采用变参等,欢迎大家探讨。目前我采用将数据拼接成字符串,第三方代码解析后返回新的字符串,然后再解析出需要的列和数据类型,此法效率非常低下,盼望有人能给予帮助,非常感谢!PL/SQL, C语言, extprocPL/SQLC语言TABLE函数大数据
select * from TABLE(testFunc(CURSOR(select * from EMP), ‘abc’))
要实现的testFunc函数有如下要求:
1. 在testFunc函数中要调用第三方C代码
2. 数据源不确定,可以为任意表,所以不能预先定义好一个表类型
3. testFunc函数的输出结果列数和数据类型都不确定,也就是说希望输出结果是一个动态表。
4. 要处理大数据,要求效率要高当然如果有另外的办法能提高效率也行,比如采用table UDF, 采用变参等,欢迎大家探讨。目前我采用将数据拼接成字符串,第三方代码解析后返回新的字符串,然后再解析出需要的列和数据类型,此法效率非常低下,盼望有人能给予帮助,非常感谢!PL/SQL, C语言, extprocPL/SQLC语言TABLE函数大数据
解决方案 »
- merge后再查询,怎么查出来的序号在commit前后不一样啊
- 初学oracle 请教“oracle 没有为约束条件“” 指定检查条件”的问题
- oracle不同版本之间的dblink可以建立么
- 各位高手,如何把这条sql语句写成view
- oracle数据库突然变慢,查不到原因,请教大家了!
- 可不可以用vc程序动态创建oracle数据库?怎么做?
- 超简单的问题,在线等,马上给分
- create table b(c timestamp);这条语句为什么会报无效数据类型的错误,oracle中的时间戳数据类型应该如何定义?谢谢!
- oracle无法启动agtctl
- rman的0级备份和1级备份的中间做一个全备(非0级)能恢复吗?
- 求助大神:oracle biee11 analytics登陆不进,怎么重置biee密码?
- java如何将一个list传给oracle存储过程?
RETURNS TABLE(ANY)
LANGUAGE CPP
... ...如果要实现netezza这样的功能,oracle应该怎么做?
create or replace library TESTLIB as 'C:\oraclexe\app\oracle\product\11.2.0\server\bin\testlib.dll';
/create or replace function testFunc(id in varchar2, str in varchar2)
return varchar2
as
language C
name "test"
library testlib
with CONTEXT
parameters(CONTEXT, id, str, return);
/extern "C"
ORACLE_TEST char* test(OCIExtProcContext *ctxt, char* id, char* str) {
......
return str;
}select testFunc('abc', empno || ',' || ENAME || ',' || SAL) from EMP;最后解析函数返回的字符串。貌似oracle的extproc是这个问题的瓶颈。
请问有没有什么办法能够提高效率?比如采用table或者数组什么的?