在遠端和本地儲存過程間傳遞陣列
簡單描述一下在遠端儲存過程和本地儲存過程之間傳遞陣列的方法。
對於本地的儲存過程直接,直接傳遞陣列是很容易的:
SQL> CREATE OR REPLACE PACKAGE PA_TEST AS
2 TYPE T_NAME IS TABLE OF VARCHAR2(30);
3 END;
4 /
程式包已建立。
SQL> CREATE OR REPLACE PROCEDURE P_TEST (P_NAME OUT PA_TEST.T_NAME) AS
2 BEGIN
3 SELECT TABLE_NAME BULK COLLECT INTO P_NAME FROM USER_TABLES;
4 END;
5 /
過程已建立。
SQL> SET SERVEROUT ON SIZE 1000000
SQL> DECLARE
2 V_NAME PA_TEST.T_NAME;
3 BEGIN
4 P_TEST(V_NAME);
5 FOR I IN 1..V_NAME.COUNT LOOP
6 DBMS_OUTPUT.PUT_LINE(V_NAME(I));
7 END LOOP;
8 END;
9 /
T_BLOB
T
T_PK
MLOG$_T
MLOG$_T_BLOB
MLOG$_T_PK
T2
RUPD$_T_PK
PL/SQL 過程已成功完成。
不過同樣的方法並不適應於遠端儲存過程呼叫:
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
------------------------------------------------
YTK102.YTK_THINKPAD
SQL> CONN YANGTK/YANGTK@TEST1已連線。
SQL> CREATE DATABASE LINK YTK102.YTK_THINKPAD CONNECT TO YANGTK IDENTIFIED BY YANGTK USING 'YTK102';
資料庫連結已建立。
SQL> CREATE OR REPLACE PACKAGE PA_TEST AS
2 TYPE T_NAME IS TABLE OF VARCHAR2(30);
3 END;
4 /
程式包已建立。
SQL> SET SERVEROUT ON SIZE 1000000
SQL> DECLARE
2 V_NAME PA_TEST.T_NAME;
3 BEGIN
4 P_TEST@YTK102.YTK_THINKPAD(V_NAME);
5 FOR I IN 1..V_NAME.COUNT LOOP
6 DBMS_OUTPUT.PUT_LINE(V_NAME(I));
7 END LOOP;
8 END;
9 /
P_TEST@YTK102.YTK_THINKPAD(V_NAME);
*第 4 行出現錯誤:
ORA-06550: 第 4 行, 第 2 列:
PLS-00306: 呼叫 'P_TEST' 時引數個數或型別錯誤
ORA-06550: 第 4 行, 第 2 列:
PL/SQL: Statement ignored
對於遠端儲存過程,即使傳遞完全相同的集合資料型別,也是會報錯的,這是由於變數的定義在本地,Oracle無法確定本地變數和遠端變數是相同的。
對於這種情況,可以利用遠端型別來進行變數的宣告:
SQL> DECLARE
2 V_NAME PA_TEST.T_NAME@YTK102.YTK_THINKPAD;
3 BEGIN
4 P_TEST@YTK102.YTK_THINKPAD(V_NAME);
5 FOR I IN 1..V_NAME.COUNT LOOP
6 DBMS_OUTPUT.PUT_LINE(V_NAME(I));
7 END LOOP;
8 END;
9 /
T_BLOB
T
T_PK
MLOG$_T
MLOG$_T_BLOB
MLOG$_T_PK
T2
RUPD$_T_PK
PL/SQL 過程已成功完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在遠端和本地儲存過程間傳遞陣列[zt]儲存過程陣列
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- oracle儲存過程中的陣列Oracle儲存過程陣列
- 儲存過程if,for,while語句,陣列和遊標使用儲存過程While陣列
- 儲存過程 傳 datatable儲存過程
- 小程式 - 陣列追加兼本地儲存陣列
- 本地MinIO儲存服務Java遠端呼叫上傳檔案Java
- 給SQL Server儲存過程,傳送陣列引數的變通辦法SQLServer儲存過程陣列
- 遞迴儲存過程中使用cursor遞迴儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 000 上傳本地庫到Github遠端庫過程全記錄Github
- MySQL儲存過程中處理陣列 UDF程式碼分享MySql儲存過程陣列
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- lightdb新特性--相容oracle儲存過程的聯合陣列Oracle儲存過程陣列
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- MySql儲存過程中limit傳參MySql儲存過程MIT
- php url傳遞陣列PHP陣列
- [MVC]通過ViewData傳遞列表給JavaScript陣列MVCViewJavaScript陣列
- mysql 儲存過程和事件排程MySql儲存過程事件
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- 在Oracle中查詢儲存過程和函式Oracle儲存過程函式
- 從程式中傳遞開始日期與結束日期至儲存過程儲存過程
- 兩種SQL分頁方法儲存過程和遊標儲存過程SQL儲存過程
- java呼叫oracle儲存過程的自定義型別(可變陣列)JavaOracle儲存過程型別陣列
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- php獲取遠端網站圖片並儲存本地PHP網站
- Shell自學二(引數傳遞和陣列)陣列
- 儲存過程儲存過程
- Oracle 傳送郵件的儲存過程Oracle儲存過程
- 在Entity Framework中使用儲存過程Framework儲存過程
- 在儲存過程中寫truncate table儲存過程
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- 在SQL Server中使用儲存過程傳送電子郵件SQLServer儲存過程
- 如何用 scp 在本地和遠端主機之間複製檔案
- 日常學習儲存--陣列和指標陣列指標
- arrilist陣列和collections儲存學生排序陣列排序
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程