是否可以在oracle中使用"execute immediate"
命令执行"bulk Collect into"
命令?所有这些都将成为函数的一部分,从而返回管道表格。Oracle中的“Bulk Collect Into”和“Execute Immediate”
3
A
回答
8
是的,理论上你可以:
1 SQL> declare
2 type x is table of t.id%type index by pls_integer;
3 xx x;
4 begin
5 execute immediate
6 'select id from t' bulk collect into xx;
7 dbms_output.put_line(xx.count);
8 end;
9/
426
而且甲骨文明确规定此文档中:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm
但如果你真的需要执行动态,你可以用更有效的方法事件SQL - 弱引用游标。您将可以访问LIMIT等强大的选项,并且可以使用记录集合。
SQL> declare
2 type x is table of t%rowtype index by pls_integer;
3 xx x;
4 c sys_refcursor;
5 begin
6 open c for 'select * from t';
7 loop
8 fetch c bulk collect into xx limit 100;
9 dbms_output.put_line(xx.count);
10 exit when c%notfound;
11 end loop;
12 close c;
13 end;
14/
100
100
100
100
26
1
继梅德尼基福罗夫提出的想法,我使用游标解决了这个问题,在这里是解决方案;)
FUNCTION myFunction ( parameter_p IN VARCHAR2) RETURN myTableType PIPELINED
IS
c sys_refcursor;
stmt varchar2(4000);
out_rec mYrowType;
rec mYrowType;
BEGIN
stmt:='Select * from ''' || parameter_p || '''';
open c for stmt;
LOOP
fetch c into rec;
EXIT WHEN c%NOTFOUND;
out_rec.field1 := rec.field1;
out_rec.field2 := rec.field2;
out_rec.field3 := rec.field3;
PIPE Row(out_rec);
END LOOP;
Close c;
Return;
END myFunction;
相关问题
- 1. Bulk Collect Oracle
- 2. Oracle EXECUTE IMMEDIATE错误
- 3. BULK COLLECT INTO:'identifier'必须声明
- 4. BULK COLLECT和dbms_sql的用法
- 5. EXECUTE IMMEDIATE PL/SQL
- 6. Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT vs EXECUTE IMMEDIATE
- 7. Ref cursor with Execute immediate
- 8. BULK COLLECT INTO OPEN cursor FOR SELECT ...不填充集合
- 9. EXECUTE IMMEDIATE'一些命令'
- 10. 在FORALL语句EXECUTE IMMEDIATE
- 11. 带有可变绑定数量的Oracle EXECUTE IMMEDIATE可能吗?
- 12. 使用execute immediate调整数据文件oracle的大小
- 13. Bulk select into FROM Information_schema.Tables
- 14. 在Oracle EXECUTE IMMEDIATE临时表还没有生成ORA-00942
- 15. Oracle EXECUTE IMMEDIATE更改查询查询计划
- 16. 什么等价于DB2的Bulk Collect DB2
- 17. Sybase:子查询上的EXECUTE IMMEDIATE
- 18. EXECUTE IMMEDIATE插入多行的列
- 19. Oracle COLLECT函数和类型
- 20. Oracle 11g和Collect功能
- 21. 确切错误行号EXECUTE IMMEDIATE
- 22. 如何使用EXECUTE IMMEDIATE获取记录?
- 23. EXECUTE IMMEDIATE更新查询变量列
- 24. 使用EXECUTE IMMEDIATE和带变量的连接字符串
- 25. “BULK COLLECT SELECT”中的“不是GROUP BY表达式”
- 26. SELECT INTO与BULK INSERT配对
- 27. 为什么在这里使用immediate immediate?
- 28. 有没有可能在使用SELECT创建的命令上使用Oracle EXECUTE IMMEDIATE?
- 29. PLS-00497:不能在INTO列表中的单行和多行(BULK)之间混合
- 30. 将迭代的提取替换为BULK COLLECT
我真的需要使用动态SQL,所以你想使用refcursors是一个更好的主意比取消批量收集? –
是的,如果您要进行大批量的行,则ref cursor是相关的解决方案。 LIMIT允许您逐步获取记录的一部分,而不是一次性抽取PGA中的所有音量。 –