我有一个SQL语句,在这个语句中,我使用两个表来减去搜索差异。由于我经常使用,我想创建一个函数或过程来使这些和屏幕输出。有人可以解释我如何做出这些最好的方式,你能举个例子吗?函数/过程中select的返回值
0
A
回答
0
也许这就是你要找的文件,如果您使用的是Oracle 11g第2版:
create or replace procedure prnt_my_view(my_view in varchar2, separator in varchar2 default ',') is
type myrefcur is ref cursor;
type rowtext is table of varchar2(256);
rowdef varchar2(256);
rows_cv myrefcur;
text rowtext;
begin
select listagg(column_name,'||'''||separator||'''||') within group (order by column_id) into rowdef from user_tab_columns where lower(table_name) = lower(my_view);
open rows_cv for 'select '||rowdef||' from '||my_view;
fetch rows_cv bulk collect into text;
for i in text.first..text.last loop
dbms_output.put_line(text(i));
end loop;
close rows_cv;
exception when others then
dbms_output.put_line('something is wrong:'||sqlerrm);
end;
编辑: 如果你不能使用LISTAGG,检查例如这里其他的解决方案:alternative to listagg in Oracle?
1
如果频繁使用MINUS查询,那么最好是建立在查询视图。要获取结果集,只需从视图中选择。
例如,
CREATE OR REPLACE VIEW my_view AS
SELECT column_list FROM table1
MINUS
SELECT column_list FROM table2
而获取的结果,
SELECT * FROM my_view;
阅读更多细节CREATE VIEW
+0
谢谢。我将使用视图为minus sql语句但是我想创建一个函数或过程来使用dbms_output查看这些输出。冷,你建议我怎么做这些?谢谢 – user650034
+0
@ user104906如果你真的想在PL/SQL中使用它,那么只需使用'OPEN CURSOR FOR your_query'并返回一个引用游标。例如,请参阅http://stackoverflow.com/a/27812983/3989608 –
相关问题
- 1. 忽略返回值过程/函数VHDL
- 2. 如何从函数中的select查询返回int值?
- 3. 在函数的函数中返回值
- 4. 使用Yii2查询从函数中返回一个具有函数的值select
- 5. 返回表的Oracle过程或函数
- 6. 函数返回值
- 7. 返回函数值
- 8. 函数的返回值返回undefined
- 9. MySQL函数 - 通过ODBC返回值
- 10. 过程的返回值
- 11. 赋值函数返回值
- 12. c select()函数总是返回1
- 13. Postgresql函数没有返回表select
- 14. php函数返回一个select元素
- 15. 如何调用pl/sql存储过程(函数,返回数值)?
- 16. Javascript中函数参数的返回值
- 17. 过程式语言有返回值的函数吗?
- 18. crud函数的返回值
- 19. 无返回值的函数
- 20. SignalR函数的返回值
- 21. 角函数的返回值
- 22. VB.NET函数的返回值
- 23. ajax函数的返回值
- 24. 函数== 0的返回值?
- 25. 函数的const返回值
- 26. PowerShell函数的返回值
- 27. 由于异步函数过早返回函数的值
- 28. JavaScript的子函数通过返回父函数返回
- 29. 函数返回值无返回语句
- 30. 函数返回值返回undefined
是否有没有把这个查询转换为[图](http://docs.oracle.com/理由CD/B28359_01/server.111/b28286/statements_8004.htm#SQLRF01504)? –