我想從shell腳本將數組作爲單個參數傳遞給我的PL/SQL腳本,然後嘗試使用索引訪問PL/SQL腳本中的數組元素。我怎樣才能做到這一點?plsql腳本中的數組處理
4
A
回答
3
以下是一種方法。將shell數組作爲空格分隔的字符串傳遞給存儲過程,然後將其轉換爲集合 - 有許多方法可以實現。在這個例子中,我使用string_to_table()
函數的內置apex_util
包。
下面是程序(可能是函數,它給你):
create or replace procedure p1(p_list in varchar2)
is
l_array apex_application_global.vc_arr2;
begin
-- convert p_list varchar2 sting to a collection
l_array := apex_util.string_to_table(p_list, ' ');
-- iterate through the collection and print each element
for i in l_array.first..l_array.last loop
dbms_output.put_line(l_array(i));
end loop;
end;
在這裏我們定義,並通過殼陣列:
array[0] = 'a'
array[1] = 'b'
array[2] = 'c'
sqlplus testlab/[email protected] <<EOF
set serveroutput on
exec p1('${array[*]}');
EOF
結果:
SQL> exec p1('a b c');
a
b
c
PL/SQL procedure successfully completed
1
請看下面如何在Oracle
中做到這一點。我用了一個Oracle定義的collection
(varchar數組)。您可以創建自己的收藏集並以類似的方式傳遞它。
--- using oracle defined collection for varchar2
CREATE OR REPLACE procedure array_list_pass_proc(v_acct5 sys.odcivarchar2list)
as
begin
for i in 1..v_acct5.count -- Passing the array list to loop
loop
--Printing its element
dbms_output.put_line(v_acct5(i));
end loop;
end;
/
輸出:
SQL> execute array_list_pass_proc(sys.odcivarchar2list('0001','0002','0003'));
0001
0002
0003
PL/SQL procedure successfully completed.
+1
請重新閱讀這個問題 - OP詢問如何將數組*從shell腳本*傳遞到PL/SQL,而不是如何創建一個接受數組的過程。 –
相關問題
- 1. 數組的循環批處理腳本
- 2. PLSQL中的異常處理
- 3. bash腳本:處理參數
- 4. 如何從批處理腳本中運行批處理腳本?
- 5. 在IE8中處理腳本
- 6. ssis unicode flatfile腳本組件處理
- 7. 在javascript中處理數組的副本
- 8. shell腳本中的文本處理
- 9. PLSQL腳本優化/調優
- 10. 如何在批處理腳本中使用數組?
- 11. 在java腳本中處理多維數組無效
- 12. 如何在shell腳本中處理Perl數組元素?
- 13. 批處理腳本
- 14. 批處理腳本
- 15. xcopy的批處理腳本
- 16. FFmpeg的批處理腳本
- 17. 批處理腳本後停止向其他批處理腳本
- 18. 將文件內容讀入數組的批處理腳本
- 19. 交錯批處理腳本處理
- 20. 批處理腳本來處理文件
- 21. 運行批處理腳本,PowerShell腳本
- 22. 從PLSQL處理Oracle Apex的動態值
- 23. 批處理腳本中的IF語句
- 24. 批處理腳本中的變量
- 25. 如何處理python腳本中的UnicodeEncodeError?
- 26. Oracle腳本中的錯誤處理
- 27. python中的數組處理
- 28. 處理數組中的數組?
- 29. DB2,PLSQL:我的腳本不起作用
- 30. 用數據庫處理Perl腳本
你的第二代碼片段是不是一個shell腳本,但其中'$'表示shell提示符下交互式會話這可能是值得一提的(我花了一對夫婦因爲'$ array [0]'看起來像一個錯誤類型的'$ array [0]',但這可能就是我的愚蠢)。 –
在bash中,你也可以用更簡單的方式定義數組:'array =(a b c)' –
@FrankSchmitt Shell提示符被刪除,Frank。是的,數組索引中存在拼寫錯誤,謝謝。 –