我有一個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)? –