我想從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. Oracle PLSQL - UTL_FILE中的錯誤處理
- 6. 使用批處理腳本中的參數運行PowerShell腳本
- 7. 如何在批處理腳本中運行powershell腳本和批處理腳本?
- 8. 在IE8中處理腳本
- 9. PLSQL將腳本與連接參數相結合的SQL腳本
- 10. 在批處理腳本之間顯示的批處理腳本
- 11. ssis unicode flatfile腳本組件處理
- 12. 在javascript中處理數組的副本
- 13. shell腳本中的文本處理
- 14. 如何在批處理腳本中使用數組?
- 15. 在java腳本中處理多維數組無效
- 16. 如何在shell腳本中處理Perl數組元素?
- 17. 如何使用批處理腳本在數組中存儲值
- 18. PLSQL腳本優化/調優
- 19. 批處理腳本
- 20. 批處理腳本
- 21. 批處理腳本
- 22. 處理可選參數的bash腳本
- 23. 帶參數的批處理腳本
- 24. xcopy的批處理腳本
- 25. FFmpeg的批處理腳本
- 26. 批處理腳本編輯另一批處理腳本
- 27. 批處理腳本後停止向其他批處理腳本
- 28. 從另一個批處理腳本調用批處理腳本
- 29. 將文件內容讀入數組的批處理腳本
- 30. 在Unix中轉換PLSQL腳本?
你的第二代碼片段是不是一個shell腳本,但其中'$'表示shell提示符下交互式會話這可能是值得一提的(我花了一對夫婦因爲'$ array [0]'看起來像一個錯誤類型的'$ array [0]',但這可能就是我的愚蠢)。 –
在bash中,你也可以用更簡單的方式定義數組:'array =(a b c)' –
@FrankSchmitt Shell提示符被刪除,Frank。是的,數組索引中存在拼寫錯誤,謝謝。 –